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

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

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


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. 存在時間相對滯後的問題,並且還會將問題向下轉移到超載的平臺服務上


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

-Advertisement-
Play Games
更多相關文章
  • SpringAOP作為Spring最核心的能力之一,其重要性不言而喻。然後需要知道的是AOP並不只是Spring特有的功能,而是一種思想,一種通用的功能。而SpringAOP只是在AOP的基礎上將能力集成到SpringIOC中,使其作為bean的一種,從而我們能夠很方便的進行使用。 ...
  • 在初始類中,我們介紹瞭如何訪問類屬性,除了訪問類屬性外還有其他操作類屬性的情況,我們將在這裡做詳細介紹: # 1.給類屬性指定預設值 類中的每個屬性都必須有初始值,哪怕這個值是0或者空字元串。在有些情況下,如設置預設值時,在方法\_\_init\_\_方法內指定這種初始值是可行的,如果對某個屬性這樣 ...
  • 我們通過代碼入手,層層加碼,直觀感受SLF4J列印日誌,並跟蹤代碼追本溯源。主要瞭解,SLF4J是如何作為門面和其他日誌框架進行解耦。 ...
  • # Rust語言 - 介面設計的建議之受約束(Constrained) - [Rust API 指南 GitHub](https://github.com/rust-lang/api-guidelines):https://github.com/rust-lang/api-guidelines - ...
  • 經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據ViewData,ViewBag,路由,頁面佈局,wwwroot和客戶端庫,Razor語法,EnityFrameworkCore與資料庫,HttpContext,... ...
  • 好久沒寫博客了,今天給大家分享一個圖片轉PDF的相關操作,也算是一次總結吧。 首先需要準備動態庫itextsharp.dll,這個dll去網上下載,都可以下載到,C#對PDF的操作都是基於這個類庫來實現的。話不多說,直接上代碼。 /// <summary> /// 導出PDF /// </summa ...
  • # 個人博客-推薦文章載入優化 # 前言 隨著博客文章越來越多,那麼推薦的文章也是越來越多,之前推薦文章是只推薦8篇,但是我感覺有點少,然後也是決定加一個載入按鈕,也是類似與分頁的效果,點擊按鈕可以繼續載入8篇文章。 # 我的實現思路 同樣使用`X.PagedList`組件去實現分頁效果,通過Nug ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...