主頁 > 軟體設計 > 讀發布!設計與部署穩定的分布式系統(第2版)筆記15_快速失敗和替換

讀發布!設計與部署穩定的分布式系統(第2版)筆記15_快速失敗和替換

2023-06-29 08:58:07 軟體設計

1. 快速失敗而非緩慢回應

1.1. 如果回應緩慢比沒有回應更糟,那么最壞的情況肯定是緩慢的失敗回應

1.2. 如果系統能夠預先確定某次呼叫會失敗,那么最好快速失敗

2. 快速失敗模式通過避免回應緩慢來提高整個系統的穩定性

2.1. 當系統由于部分失效而面臨壓力時,快速失敗模式還有助于保持系統容量

2.2. 與超時模式配合使用,快速失敗模式有助于避免層疊失效

3. 預留資源并盡早驗證集成點有效

3.1. 確保在開始之前就能完成事務

3.1.1. 關鍵資源不可用,比如所需呼叫的斷路器已跳閘,那么就不要再浪費精力去呼叫

3.2. 在事務的開始階段和中間階段,關鍵資源可用狀態發生變化的可能性極小

3.3. 應用程式或服務可以從傳入的請求或訊息中,大致了解需要哪些資料庫連接和外部集成點,然后可以快速檢查所需的連接,并查看集成點周圍的斷路器狀態

4. 使用輸入驗證

4.1. 即使在預留資源之前,也要進行基本的用戶輸入驗證

4.2. 找到未輸入的必需引數才是關鍵

5. 任其崩潰并替換

5.1. 有時,為了實作系統級穩定性,放棄組件級穩定性就是所能做的最好的事情

5.1.1. 通過組件崩潰保護系統

5.1.2. 通過組件級不穩定性構建系統級穩定性

5.1.3. 這可能是將系統恢復到已知良好狀態的最佳方式

5.1.4. 隔離組件以實作獨立崩潰

5.2. 在Erlang語言中,這被稱為“任其崩潰并替換”的哲學

5.2.1. 任其崩潰并替換的方法認為錯誤恢復難以完成且不可信賴,所以我們的目標應該是盡快回到剛完成啟動時的干凈狀態

5.3. 程式所能擁有的最干凈的狀態,就是在剛剛完成啟動的那一刻

5.4. 前提

5.4.1. 有限的粒度

5.4.1.1. 必須為崩潰定義邊界

5.4.1.2. 發生崩潰的組件應該是獨立的,系統的其余部分必須能夠自我防護,避免受到層疊失效的影響

5.4.1.3. 在微服務架構中,服務的整個實體可能是正確的崩潰粒度

5.4.1.4. 在Erlang和Elixir中,崩潰的自然邊界就是actor

5.4.2. 快速替換

5.4.2.1. actor這樣的行程內組件,重啟時間以微秒為單位

5.4.2.2. 在容器中運行Go二進制檔案

5.4.2.2.1. 啟動一個新容器及其內部一個行程的時間以毫秒為單位計算,此時就可以通過讓整個容器崩潰實作快速替換

5.4.2.3. NodeJS服務在AWS中一個長時間運行的虛擬機上運行

5.4.2.3.1. 啟動NodeJS行程需要花幾毫秒,但啟動一臺新的虛擬機則需要幾分鐘
5.4.2.3.2. 只需要讓NodeJS行程崩潰,就可以實作快速替換

5.4.2.4. 不要讓單體系統崩潰

5.4.2.4.1. 運行時負載較大或啟動時間較長的大型行程,不適合運用“任其崩潰并替換”策略
5.4.2.4.2. 將許多特性耦合到單個行程中的應用程式,也不推薦運用該策略
5.4.2.4.3. 在資料中心的幾臺虛擬機上,運行著一個老舊的前端安裝API的JavaEE應用程式
5.4.2.4.3.1. 啟動時間以分鐘為單位計算,此時,“任其崩潰并替換”并不是正確的策略

5.4.3. 監管

5.4.3.1. 監管器不是服務的消費者

5.4.3.2. 管理工人與要求服務是兩碼事

5.4.3.3. 如果把兩者混淆,就會損害系統

5.4.4. 重新歸隊

5.4.4.1. 在一個actor或實體先崩潰然后由監管器重新將其啟動之后,系統必須要恢復對新啟動的服務提供方的呼叫

5.4.4.2. 如果實體被直接呼叫,則呼叫方的斷路器應該自動將該實體重新歸隊

5.4.4.3. 如果實體是負載均衡池中的一部分,那么必須能夠將實體加回池中,接受作業

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

標籤:架構設計

上一篇:Bean生命周期的擴展點:Bean Post Processor

下一篇:返回列表

標籤雲
其他(161825) Python(38259) JavaScript(25516) Java(18273) C(15238) 區塊鏈(8273) C#(7972) AI(7469) 爪哇(7425) MySQL(7271) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4607) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1985) HtmlCss(1976) 功能(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
最新发布
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記15_快速失敗和替換

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230627103223140-2108494309.png) # 1. 快速失敗而非緩慢回應 ## 1.1. 如果回應緩慢比沒有回應更糟,那么最壞的情況肯定是緩慢的失敗回應 ......

    uj5u.com 2023-06-29 08:58:07 more
  • Bean生命周期的擴展點:Bean Post Processor

    摘要:在本篇文章中,我們將深入探討Spring框架中的重要組件——BeanPostProcessor。首先,我們將了解其設計理念和目標,然后通過實際的例子學習如何基礎使用它,如何通過BeanPostProcessor改變Bean的初始化結果以及如何利用它修改Bean的屬性。 本文分享自華為云社區《S ......

    uj5u.com 2023-06-29 08:56:17 more
  • 說說設計模式~委派模式

    [回到目錄](https://www.cnblogs.com/lori/p/3896484.html) # 概述 委派模式(Delegate Pattern)又叫作委托模式,是一種面向物件的設計模式,允許物件組合實作與繼承相同的代碼重用。它的基本作用就是負責任務的呼叫和分配,是一種特殊的靜態代理模式 ......

    uj5u.com 2023-06-28 11:02:11 more
  • 說說設計模式~責任鏈模式

    [回到目錄](https://www.cnblogs.com/lori/p/3896484.html) # 責任鏈模式 它是一種設計模塊,主要將操作流程與具體操作解耦,讓每個操作都可以設定自己的操作流程,這對于作業流應用是一個不錯的選擇! 下面是官方標準的定義:責任鏈模式是一種設計模式。在責任鏈模式 ......

    uj5u.com 2023-06-28 11:02:04 more
  • 說說設計模式~責任鏈模式

    [回到目錄](https://www.cnblogs.com/lori/p/3896484.html) # 責任鏈模式 它是一種設計模塊,主要將操作流程與具體操作解耦,讓每個操作都可以設定自己的操作流程,這對于作業流應用是一個不錯的選擇! 下面是官方標準的定義:責任鏈模式是一種設計模式。在責任鏈模式 ......

    uj5u.com 2023-06-28 11:01:46 more
  • 說說設計模式~委派模式

    [回到目錄](https://www.cnblogs.com/lori/p/3896484.html) # 概述 委派模式(Delegate Pattern)又叫作委托模式,是一種面向物件的設計模式,允許物件組合實作與繼承相同的代碼重用。它的基本作用就是負責任務的呼叫和分配,是一種特殊的靜態代理模式 ......

    uj5u.com 2023-06-28 10:56:15 more
  • 驅動開發:取行程模塊的函式地址

    在筆者上一篇文章`《驅動開發:內核取應用層模塊基地址》`中簡單為大家介紹了如何通過遍歷`PLIST_ENTRY32`鏈表的方式獲取到`32位`應用程式中特定模塊的基地址,由于是入門系列所以并沒有封裝實作太過于通用的獲取函式,本章將繼續延申這個話題,并依次實作通用版`GetUserModuleBase... ......

    uj5u.com 2023-06-28 10:09:39 more
  • 高并發整體可用性:一文詳解降級、限流和熔斷

    水滿則溢,月盈則虧,任何事物都不可能無限制的發展,我們的系統服務能力也一樣。



    當隨著流量的不斷增長,達到或超過服務本身的可承載范圍,系統服務的自我保護機制的建立就顯得很重要了。



    本文希望可以用最通俗的解釋和貼切的實體來帶大家了解什么是限流、降級和熔斷。 ......

    uj5u.com 2023-06-28 10:09:22 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記14_穩態

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230627102336712-1268258427.png) # 1. 最大限度地避免直接對生產系統進行人為操作最為妥善 ## 1.1. 人為干預生產環境會導致問題 ### ......

    uj5u.com 2023-06-28 10:09:06 more
  • 微服務架構基本原理學習筆記(三)

    上一篇:微服務架構基本原理學習筆記(二) 五、微服務之間的通信 微服務通信模式 微服務本身并沒有規定通信規則,換句話說,一個微服務并沒有規定可以被哪些應用程式訪問,或者被哪些其它的微服務呼叫。應用程式與微服務間的直接通信,或者微服務與微服務間的直接呼叫,往往會因為其中錯綜復雜的關系而導致級聯故障,任 ......

    uj5u.com 2023-06-28 10:08:46 more