主頁 > 軟體設計 > 讀發布!設計與部署穩定的分布式系統(第2版)筆記17_中間件、背壓和調速器

讀發布!設計與部署穩定的分布式系統(第2版)筆記17_中間件、背壓和調速器

2023-07-03 08:07:42 軟體設計

1. 完全的解耦

1.1. 各臺服務器、層級和應用程式解耦得越徹底,集成點、層疊失效、回應緩慢和執行緒阻塞等問題就越少

1.2. 應用程式解耦后,系統可以單獨更改其他應用程式的所有配件,因此也更具適應性

2. 中間件

2.1. 在極其雜亂無章的環境中,集成原本就不在一起作業的系統

2.2. 中間件既可以做到將其集成,又可以做到將其解耦

2.3. 由于集成點是導致系統不穩定的首要原因,因此“既可集成,又能解耦”是件好事

2.4. 松耦合的中間件允許呼叫系統和接收系統在不同的地點和時間處理訊息

2.4.1. IBM MQSeries

2.4.2. 所有基于佇列或發布-訂閱機制的訊息傳遞系統

2.4.3. 實作系統間訊息傳遞的SMTP或SMS系統

2.4.3.1. SMTP和SMS系統通常由人(而不是服務器)充當訊息代理,且系統延遲往往很高

2.5. 面向訊息的中間件,在空間和時間上實作端點解耦

2.5.1. 發出請求的系統不會“坐等回復”

2.5.2. 不會導致層疊失效

2.6. 從同步的“請求-回復”到異步的通信方式的轉變,需要完全不同的設計

2.6.1. 需要考慮轉換成本

2.6.2. 中間件解耦是架構決策

2.6.2.1. 相關的實施會波及系統的每個部分

2.6.3. 應該在最后責任時刻到來時,盡早做出這種幾乎不可逆轉的決策

3. 背壓機制

3.1. 每個性能問題都源于其背后的一個等待佇列

3.1.1. 套接字的監聽佇列

3.1.2. 作業系統的運行佇列

3.1.3. 資料庫的I/O佇列

3.2. 如果佇列無限長,那么它就會耗盡所有可用的記憶體

3.3. 隨著佇列長度的增加,完成佇列中某項作業的時間也會增加

3.3.1. 當佇列長度達到無窮大時,回應時間也會趨向無窮大

3.4. 要想獲得有限的回應時間,就需要構建有限長度的等待佇列

3.5. 如果佇列的長度是有限的,那么當佇列已滿且生產者仍試圖再塞入一個新請求時,必須立刻采取應對措施

3.5.1. 假裝接受新請求,但實際上將其拋棄

3.5.2. 確實接受新請求,但拋棄佇列中的某一個請求

3.5.2.1. 隨著時間的推移價值迅速降低的資料,拋棄佇列中最先發出的請求可能是最佳選擇

3.5.3. 拒絕新請求

3.5.4. 阻塞生產者,直至佇列出現空的位置

3.5.4.1. 一種流量控制手段,允許佇列向發送資料包的上游系統實施“背壓”措施

3.5.4.2. 消費者必須當心,不要永久阻塞

3.6. TCP在每個資料包中都采用額外的欄位構建背壓機制

3.6.1. 來自TCP接收方視窗的背壓,會讓發送方填滿其發送緩沖區,這時后續寫入套接字的呼叫將被阻塞

3.7. 背壓機制通過讓消費者放慢作業來實作安全性

3.8. 背壓機制會導致執行緒阻塞

3.9. 背壓機制最適合異步呼叫和編程

3.9.1. Rx框架、actor或channel工具實作這個機制

3.10. 在系統邊界內運用背壓機制效果最好

3.10.1. 在系統邊界之間,還是需要使用卸下負載模式和異步呼叫

4. 卸下負載

4.1. 服務、微服務、網站和開放式API都有一個共同特點:無法控制其需求量

4.1.1. 總能對某個系統施加超出其處理能力的負載

4.2. 服務應該模仿TCP的做法

4.2.1. 當負載過高時,就開始拒絕新的作業請求

4.2.2. 當請求花費的時間超過SLA規定的回應時長時,就可以卸下一些負載

4.2.2.1. 讓系統的回應時間得到控制,而不是任其讓呼叫方超時

4.3. 將負載均衡器用作減震器

4.4. 運用背壓機制會更有效

5. 自動化機制

5.1. 自動化機制缺乏判斷能力,一旦出錯,就錯得驚人

5.2. 自動化機制處理人類不擅長的事情

5.2.1. 重復的任務和快速的回應

5.3. 自動化機制不擅長的事情

5.3.1. 自動化機制不擅長的事情

6. 調速器

6.1. 使用調速器限制發動機的速度,即使動力源可以更快地驅動,調速器也可以防止它以不安全的轉速運轉

6.2. 調速器可以感知狀態和時間,知道一段時間以來自身執行的操作

6.3. 調速器往往是不對稱的

6.3.1. 在不安全的方向上施加阻力

6.3.2. 一旦超出范圍,就可以運用調速器增加操作阻力

6.4. 使用調速器的意義在于放緩做事的速度,以便人工干預

6.4.1. 需要監控回應曲線的兩端,當有情況發生時能夠提醒人們,并給他們足夠的可視化資訊理解所發生的事情

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

標籤:架構設計

上一篇:說說設計模式~管道模式(pipeline)

下一篇:返回列表

標籤雲
其他(162006) Python(38266) JavaScript(25520) Java(18286) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7281) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4609) 数据框(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(1983) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .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版)筆記17_中間件、背壓和調

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230628121233652-2011697937.png) # 1. 完全的解耦 ## 1.1. 各臺服務器、層級和應用程式解耦得越徹底,集成點、層疊失效、回應緩慢和執行緒阻 ......

    uj5u.com 2023-07-03 08:07:42 more
  • 說說設計模式~管道模式(pipeline)

    [回到目錄](https://www.cnblogs.com/lori/p/3896484.html) # 說明 復合的責任鏈,類似于管道模式,只要符合條件,說會向下傳遞,不會終止 # 演算法說明 * 按最高優先級去使用,符合就用,不符合就走下一個策略 * 具體鏈條,有點像pipeline管道模式 * ......

    uj5u.com 2023-07-01 08:47:21 more
  • 第一次操盤大促,穩定性保障如何做到萬無一失?

    業界有很多大促活動,像618、雙11、雙12等等。每一次大促不只是給業務帶來了新高,對于技術同樣也有很重要的意義,縱觀一些優秀的技術團隊,都是跟著業務一起成長的。在高并發大流量的背景下,如何支撐好業務運營,是一件很有挑戰性的事情,它可以從多方面檢驗我們的技術能力,對我們的系統架構和應急保障都提出了很... ......

    uj5u.com 2023-07-01 08:47:04 more
  • 說說設計模式~管道模式(pipeline)

    [回到目錄](https://www.cnblogs.com/lori/p/3896484.html) # 說明 復合的責任鏈,類似于管道模式,只要符合條件,說會向下傳遞,不會終止 # 演算法說明 * 按最高優先級去使用,符合就用,不符合就走下一個策略 * 具體鏈條,有點像pipeline管道模式 * ......

    uj5u.com 2023-07-01 08:46:42 more
  • 第一次操盤大促,穩定性保障如何做到萬無一失?

    業界有很多大促活動,像618、雙11、雙12等等。每一次大促不只是給業務帶來了新高,對于技術同樣也有很重要的意義,縱觀一些優秀的技術團隊,都是跟著業務一起成長的。在高并發大流量的背景下,如何支撐好業務運營,是一件很有挑戰性的事情,它可以從多方面檢驗我們的技術能力,對我們的系統架構和應急保障都提出了很... ......

    uj5u.com 2023-07-01 08:46:09 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記16_握手和考驗機

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230628115834099-2000661347.png) # 1. 握手 ## 1.1. 發送方和接收方之間的信號傳遞程序 ## 1.2. 模擬調制解調器使用一種握手形式 ......

    uj5u.com 2023-06-30 08:31:23 more
  • 教你如何用Vue3搭配Spring Framework

    摘要:在本文中,我們將介紹如何使用Vue3和Spring Framework進行開發,并創建一個簡單的TodoList應用程式。 本文分享自華為云社區《Vue3搭配Spring Framework開發【Vue3應用程式實戰】》,作者:黎燃。 一、介紹 Vue3和Spring Framework都是現 ......

    uj5u.com 2023-06-30 08:31:18 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記16_握手和考驗機

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230628115834099-2000661347.png) # 1. 握手 ## 1.1. 發送方和接收方之間的信號傳遞程序 ## 1.2. 模擬調制解調器使用一種握手形式 ......

    uj5u.com 2023-06-30 08:30:46 more
  • 教你如何用Vue3搭配Spring Framework

    摘要:在本文中,我們將介紹如何使用Vue3和Spring Framework進行開發,并創建一個簡單的TodoList應用程式。 本文分享自華為云社區《Vue3搭配Spring Framework開發【Vue3應用程式實戰】》,作者:黎燃。 一、介紹 Vue3和Spring Framework都是現 ......

    uj5u.com 2023-06-30 08:30:41 more
  • 如何成為架構師?

    作者總結這些年在支付寶做架構的經驗,把自己摸索成長的內容寫下來,從對架構師的認知到業務能力和架構能力多方面總結了案例經驗,希望可以幫助到大家。 ......

    uj5u.com 2023-06-29 08:59:41 more