主頁 > 軟體設計 > 讀發布!設計與部署穩定的分布式系統(第2版)筆記09_一窩蜂和容量

讀發布!設計與部署穩定的分布式系統(第2版)筆記09_一窩蜂和容量

2023-06-23 07:39:37 軟體設計

1. 停電事故后電力恢復的方式

1.1. 停電后常見的情形是,送電幾秒鐘后又再次斷電

1.2. 數百萬臺空調和冰箱的用電需求,使剛付訓復的電力供應發生過載

1.3. 當電力供應不足時,增加的電流很快就到達滿負荷,導致過載,觸發斷路器跳閘,燈再次熄滅

2. 經驗教訓

2.1. 系統規模相對較小的組件子集上永遠不會出現這種情況

2.2. 系統達到穩態時的負載,會與系統啟動或周期性運行的負載存在明顯不同

2.3. 示例

2.3.1. 一個應用程式服務器農場的啟動程序

2.3.2. 每臺服務器都需要連接到資料庫,并加載一定數量的參考資料或種子資料

2.3.3. 每臺服務器的快取都從空閑狀態開始,逐漸形成一個有用的作業集

2.3.4. 大多數HTTP請求會轉換為一個或多個資料庫查詢

2.3.5. 當應用程式啟動時,資料庫上的瞬時負載要比運行一段時間后的負載高得多

3. 一窩蜂

3.1. 一堆服務器一同對資料庫施加瞬時負載

3.2. 是對系統的集中使用,相比將峰值流量分散開后所需的系統能力,一窩蜂需要一個更高的系統容量峰值

3.3. 一窩蜂所需系統成本過高,高峰需求無法處理

3.4. 引發一窩蜂現象的情況

3.4.1. 在代碼升級和重新運行之后,啟動多臺服務器

3.4.2. 午夜(或任何一個整點時間)觸發cron作業

3.4.3. 配置管理系統推出變更

3.4.4. 當一些外部現象引起流量的同步“脈沖”時

3.4.5. 阻塞許多執行緒的所有地方,它們在等待某個執行緒完成作業

3.4.5.1. 這個狀態打破時,新釋放的執行緒就會對任何接收資料包的下游系統施加一窩蜂

3.4.6. 虛擬用戶的腳本存在固定等待時間,則在進行負載測驗時,就會產生流量脈沖

3.4.6.1. 腳本中的每個等待時間都應該附帶一個小的隨機時間增量

3.5. 解決方案

3.5.1. 使用增加的退避時間避免脈沖

3.5.1.1. 固定的重試時間間隔,會集中那段時間的呼叫方需求

3.5.1.2. 使用退避演算法,不同呼叫方在經過自己的退避時間后,在不同的時間點發起呼叫

3.5.2. 使用隨機時鐘擺動以分散需求

3.5.2.1. 不要將所有cron作業都設定在午夜或其他任何整點時間執行

3.5.2.2. 混合的方式設定時間,分散負載

4. 系統容量

4.1. 無論系統資源是需要數月、數周還是數秒才能完成整備,最終都可能導致不同層級之間的處理速率不匹配

4.2. 由于容量不對等,前端總是有能力來壓倒后端

4.3. 將系統容量均勻地進行匹配,是不切實際的

4.3.1. 除了某一天會派上用場,其他時間99%的基礎設施將處于閑置狀態

4.4. 對于服務的構建,如果不能使之全部滿足前端潛在的壓倒性需求,那么就必須構建服務呼叫方和服務提供方的韌性,從而能夠應對海嘯般襲來的請求

4.5. 對服務呼叫方來說,當回應獲取速度變慢或連接被拒絕時,使用斷路器模式有助于緩解下游服務的壓力

4.6. 對服務提供方來說,可以使用握手和背壓通知呼叫方,限制呼叫方發送請求的速度

4.7. 使用艙壁模式,為關鍵服務的高優先級呼叫方預留系統容量

5. 系統容量失衡

5.1. 放大效應的特例

5.2. 在QA環境中很少能觀察到的問題

5.2.1. 主要原因是每個系統的QA環境通常會縮小到只有兩臺服務器

5.2.2. 檢查服務器和執行緒的數量

5.2.3. 實作QA環境虛擬化并實作擴展

5.2.4. 重視介面的兩側

5.3. 考驗機能幫助驗證前端系統能否良好地實作降級

5.4. 關系中一方的增幅變化大大超過另一方

5.5. 宣傳帶來的流量高峰,就更難以預測了

5.5.1. 自黑式

5.5.2. 季節性、市場驅動或宣傳驅動等流量模式的變化,會導致前端系統的大量請求涌向后端系統(通常是良性的),就像熱門的社交媒體帖子導致網站流量劇增

5.6. 要為出現任何狀況做好準備

5.6.1. 可以使用系統容量建模的方法,確保系統能力至少在可變范圍之內

5.6.2. 如果系統具有韌性,那么它可能會減慢處理速度,甚至當無法在允許的時間內處理事務時,就開始出現“快速失敗”

5.6.2.1. 當負載壓力減弱后,系統應該還能夠恢復回來

5.6.3. 使用自動擴展應對激增的訪問請求

5.6.3.1. 存在時間相對滯后的問題,并且還會將問題向下轉移到超載的平臺服務上

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

標籤:架構設計

上一篇:讀發布!設計與部署穩定的分布式系統(第2版)筆記08_自黑與放大

下一篇:返回列表

標籤雲
其他(161492) Python(38244) JavaScript(25512) Java(18251) C(15238) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7265) 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(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1971) 功能(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版)筆記09_一窩蜂和容量

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230622230643001-398516589.png) # 1. 停電事故后電力恢復的方式 ## 1.1. 停電后常見的情形是,送電幾秒鐘后又再次斷電 ## 1.2. 數 ......

    uj5u.com 2023-06-23 07:39:37 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記08_自黑與放大

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230621151546278-1606324122.png) # 1. 自黑式攻擊 ## 1.1. 自黑只會偶爾成為人類的美德 ## 1.2. 對系統來說,絕對不會推崇自黑 ......

    uj5u.com 2023-06-22 08:06:50 more
  • 驅動開發:內核注冊表增刪改查

    注冊表是Windows中的一個重要的資料庫,用于存盤系統和應用程式的設定資訊,注冊表是一個巨大的樹形結構,無論在應用層還是內核層操作注冊表都有獨立的API函式可以使用,而在內核中讀寫注冊表則需要使用內核裝用API函式,如下將依次介紹并封裝一些案例,實作對注冊表的創建,洗掉,更新,查詢等操作。 ......

    uj5u.com 2023-06-22 08:06:36 more
  • 驅動開發:內核注冊表增刪改查

    注冊表是Windows中的一個重要的資料庫,用于存盤系統和應用程式的設定資訊,注冊表是一個巨大的樹形結構,無論在應用層還是內核層操作注冊表都有獨立的API函式可以使用,而在內核中讀寫注冊表則需要使用內核裝用API函式,如下將依次介紹并封裝一些案例,實作對注冊表的創建,洗掉,更新,查詢等操作。 ......

    uj5u.com 2023-06-22 08:06:01 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記08_自黑與放大

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230621151546278-1606324122.png) # 1. 自黑式攻擊 ## 1.1. 自黑只會偶爾成為人類的美德 ## 1.2. 對系統來說,絕對不會推崇自黑 ......

    uj5u.com 2023-06-22 08:05:37 more
  • 工業互聯網專案開發作業流程及核心問題

    工業互聯網專案開發全流程V3.0 工業互聯網專案開發作業流程及核心問題 一、需求分析 1、共享平臺需求分析 這個平臺要解決什么問題?這個平臺的用戶群體是誰?這個平臺應該具備哪些主要功能?這個平臺的使用場景是什么?這個平臺如何與現有的系統集成? 2、需求檔案設計 需求檔案是否詳細、明確,且可以量化?是 ......

    uj5u.com 2023-06-21 08:49:53 more
  • 工程師常用的6種最佳實踐

    一、約定大于配置 泰思勒定律也被稱為復雜度守恒定律。該定律指出每一個程序都有其固有的復雜性,存在一個臨界點,超過了這個點程序就不能再簡化了,你只能將固有的復雜性從一個地方移動到另外一個地方。 根據這個定律,在做系統設計時,默認會給用戶一個“套餐”,這個套餐會滿足多數人的需求。實在不滿足需求再特殊配置 ......

    uj5u.com 2023-06-21 08:49:34 more
  • 工業互聯網專案開發作業流程及核心問題

    工業互聯網專案開發全流程V3.0 工業互聯網專案開發作業流程及核心問題 一、需求分析 1、共享平臺需求分析 這個平臺要解決什么問題?這個平臺的用戶群體是誰?這個平臺應該具備哪些主要功能?這個平臺的使用場景是什么?這個平臺如何與現有的系統集成? 2、需求檔案設計 需求檔案是否詳細、明確,且可以量化?是 ......

    uj5u.com 2023-06-21 08:48:49 more
  • 工程師常用的6種最佳實踐

    一、約定大于配置 泰思勒定律也被稱為復雜度守恒定律。該定律指出每一個程序都有其固有的復雜性,存在一個臨界點,超過了這個點程序就不能再簡化了,你只能將固有的復雜性從一個地方移動到另外一個地方。 根據這個定律,在做系統設計時,默認會給用戶一個“套餐”,這個套餐會滿足多數人的需求。實在不滿足需求再特殊配置 ......

    uj5u.com 2023-06-21 08:48:30 more
  • Java設計模式之代理模式--經紀人的作業

    代理模式是23種設計模式中結構型模式的一種,它的核心是通過代理類來完成其他物件的訪問,降低訪問者和被訪問者的耦合度,也對功能進行了增強。 ......

    uj5u.com 2023-06-20 10:32:31 more