讀發佈!設計與部署穩定的分散式系統(第2版)筆記13_斷路器與艙壁

来源:https://www.cnblogs.com/lying7/archive/2023/06/27/17503288.html
-Advertisement-
Play Games

斷路器能有效防止集成點、層疊失效、系統容量失衡和響應緩慢等危及穩定性的反模式出現,它能與超時模式緊密協作,跟蹤調用超時失敗 ...


1. 電路保險絲

1.1. 保險絲通過自身率先失效,控制整體的系統失效方式

1.2. 當遇到電阻時,電流產生的熱量與電流強度的平方和電阻的乘積(I^2R)成正比

1.3. 在房子著火前先行熔斷,切斷電路並避免火災

1.4. 民用保險絲早已被淘汰

2. 斷路器

2.1. 斷路器可以避免房屋起火

2.1.1. 由於短路或其他原因導致電流過大時,斷路器能允許一個子系統(電路)發生系統失效,從而保護整個系統(房屋)

2.2. 出現問題,停止調用

2.3. 斷路器會阻止而不是重新執行操作

2.3.1. 即用一個組件將那些有風險的操作納入其中,在系統異常時,該組件能防止調用

2.4. 斷路器能有效防止集成點、層疊失效、系統容量失衡和響應緩慢等危及穩定性的反模式出現,它能與超時模式緊密協作,跟蹤調用超時失敗

2.4.1. 斷路器是一種系統在流量壓力之下實現自動功能降級的方法

2.5. 斷路器會將系統失效記錄下來

2.5.1. 一旦系統失效次數(或更複雜情況下的系統失效頻率)超過閾值,斷路器就會跳閘並“斷開電路

2.6. 當斷路器處於斷開狀態時,必須對調用訪問做出處理

2.6.1. 最簡單的方式是讓調用立即返回失敗結果

2.7. 經過超時設定的時間後,斷路器決定嘗試執行重覆操作,因此進入半斷開狀態

2.7.1. 如果這次嘗試失敗,斷路器將返回到斷開狀態,直到另一個超時時間結束

3. 斷路器的狀態

3.1. 開放、跟蹤並報告斷路器狀態變化情況

3.2. 應該始終用日誌記錄斷路器狀態的變化,並開放斷路器當前的狀態,以供查詢和監控

3.3. 斷路器也有助於收集有關調用量和響應時間的信息

3.4. 一個簡單累加次數的計數器並不能說明問題

3.4.1. 5個小時之內觀察到的5次均勻分佈的失敗與最近30秒之內發生的5次失敗,這兩個現象之間存在巨大的差異

3.4.2. 相比失敗的總數,我們通常對失敗的密度更感興趣

3.5. 在單個進程的範圍內構建斷路器

3.5.1. 一個進程只會令其內部的各個線程瞭解其斷路器狀態,但不會向多個其他進程共用其斷路器狀態

4. 艙壁

4.1. 船舶的艙壁是一些隔板,一旦將其密封起來,就能將船分隔成若幹獨立的水密隔艙

4.1.1. 船體即使被洞穿一次也不會沉沒

4.2. 艙壁這種設計強調了控制損害範圍的原則

4.3. 通過使用隔板對系統進行分區,就可以將系統失效控制在其中某個分區內,而不會令其摧毀整個系統

4.4. 確定一些自然邊界,這些邊界能夠以具備技術可行性和經濟收益性的方法對系統加以分隔,具體分隔邊界可以根據調用方、功能或系統拓撲來劃定

4.5. 當災難發生時,艙壁模式將系統進行分隔,確保部分系統功能可用

4.6. 物理冗餘是實現艙壁最常見的形式

4.6.1. 在一臺伺服器上運行兩個應用程式實例,如果其中一個崩潰,那麼另一個仍將繼續運行

4.6.2. 物理機冗餘設計比虛擬機冗餘設計更加穩健

4.7. 當訪問請求量到達系統最大容量時,就可以為系統的關鍵服務分配幾個獨立的伺服器農場,預留其中的某些農場供關鍵應用程式使用,其他農場用於非關鍵應用程式

4.8. 在雲環境中,應該在服務的不同分區中運行實例

4.8.1. 每個分區的規模都很大,彼此隔離性很強

4.8.2. 當使用函數即服務時,基本上每個函數調用都會在自己的隔間中運行

4.9. 當系統容量規模較小時,進程綁定就是通過艙壁進行分隔的一個例子

4.9.1. 這種做法能夠減少進程在CPU內核之間遷移時對緩存的衝擊,所以進程綁定通常被認為是一種性能調優手段

4.9.2. 如果該進程被綁定到一個CPU內核上,則它只能在該內核上使用所有可用的CPU處理周期

4.9.3. 可以對應用程式內的線程池進行分隔,對伺服器的CPU進行分隔,或對集群中的伺服器進行分隔

4.10. 即使在出現系統失效時,艙壁也能有效地維持整個或部分服務的正常運行

4.10.1. SOA內的每個服務都存在單點失效問題

4.10.2. 對於單一服務失效就能拖垮整個企業應用系統的SOA,這點特別有用

4.11. 當使用共用服務模型時,尤其要考慮使用艙壁模式

4.11.1. SOA或微服務架構的系統失效,可能會非常迅速地蔓延開來


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文將探究京東競速榜H5頁面的核心前端技術,包括動畫、樣式配置化、皮膚切換、海報技術、調試技巧等方面,希望能夠為廣大前端開發者提供一些有用的參考和思路。 ...
  • 前端文件上傳本來是一個常規交互操作,沒什麼特殊性可言,但是最近在做文件上傳,需要實現截圖粘貼上傳,去找了下有沒有什麼好用的組件,網上提供的方法有,但是沒找完整的組件來支持cv上傳,經過瞭解發現可以用剪貼板功能讓自己的cv實現文件上傳,於是自己就整合了目前幾種文件上傳的交互方式,碼了一個支持cv的vu... ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 hree.js 是一個基於 WebGL 的 JavaScript 3D 庫,用於創建和渲染 3D 圖形場景。 一、 圖像渲染過程 1、webGL webGL: WebGL 是一種基於 JavaScript API 的圖形庫,它允許在瀏覽器 ...
  • theme: condensed-night-purple highlight: atelier-cave-light 在前端的頁面佈局中經常會出現在子元素個數使用不同的樣式的需求,比如文章列表,在較少內容下單列表現,而在元素內容較多時使用雙列表現。再比如在頁面排版上,可以根據元素內容的多少來修改內 ...
  • 基於uniapp+vite4+pinia跨多端實現chatgpt會話模板Uniapp-ChatGPT。 uni-chatgpt 使用uni-app+vite4+vue3+pinia+uview-plus等技術構建多端仿製ChatGPT手機端APP會話應用模板。支持編譯到h5+小程式+APP端,支持渲 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230627102336712-1268258427.png) # 1. 最大限度地避免直接對生產系統進行人為操作最為妥善 ## 1.1. 人為干預生產環境會導致問題 ### ...
  • 上一篇:微服務架構基本原理學習筆記(二) 五、微服務之間的通信 微服務通信模式 微服務本身並沒有規定通信規則,換句話說,一個微服務並沒有規定可以被哪些應用程式訪問,或者被哪些其它的微服務調用。應用程式與微服務間的直接通信,或者微服務與微服務間的直接調用,往往會因為其中錯綜複雜的關係而導致級聯故障,任 ...
  • 一個小小的故障就可能造成巨大的負面影響,因此穩定性工作複雜卻又至關重要。本文將通過故障預防、修複、復盤來講解該如何建設一個穩定性體系。 來到阿裡後,我的工作內容一直都是商品中心的穩定性,這份工作對於我個人在技術和經驗上的成長提升是無比巨大的。在我看來,穩定性是一個極為複雜的工作,對人的能力考驗... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...