主頁 > 軟體設計 > 讀發布!設計與部署穩定的分布式系統(第2版)筆記13_斷路器與艙壁

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

2023-06-27 08:34:28 軟體設計

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或微服務架構的系統失效,可能會非常迅速地蔓延開來

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/556065.html

標籤:架構設計

上一篇:跨架構平臺在云計算中的應用

下一篇:返回列表

標籤雲
其他(161682) Python(38254) JavaScript(25515) Java(18265) C(15238) 區塊鏈(8273) C#(7972) AI(7469) 爪哇(7425) MySQL(7269) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2437) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1985) HtmlCss(1973) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布