讀發佈!設計與部署穩定的分散式系統(第2版)筆記33_混沌工程

来源:https://www.cnblogs.com/lying7/archive/2023/08/20/17637427.html
-Advertisement-
Play Games

![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230817140634376-621525736.png) # 1. 康威定律 ## 1.1. 梅爾文·康威 ### 1.1.1. Melvin Conway ### 1.1 ...


1. 康威定律

1.1. 梅爾文·康威

1.1.1. Melvin Conway

1.1.2. 1968年

1.1.3. 在設計系統時,組織受制於其自身的溝通結構,這使得它設計的系統結構與溝通結構相一致。

1.1.3.1. 社會學現象

1.2. 要在系統內部或系統之間構建介面,兩個人必須以某種方式溝通有關該介面的規範

1.2.1. 沒有溝通,就無法建立介面

1.3. 如果系統不是用穩定性模式構建的,那麼它可能採用了典型的緊耦合架構

1.3.1. 發生失效的總體概率,是其中任何一個組件發生失效的概率之和

1.4. 應用程式的某些組件是針對QA環境的網路拓撲結構進行設計的,而這與生產環境不匹配

2. 負載測試

2.1. 併發用戶是無法衡量的

2.2. 不存在長久的用戶連接,只存在隨著請求的到達而形成的一系列離散的訪問

2.3. 對於不再點擊的用戶和尚未點擊的用戶,伺服器無法區分

2.3.1. 會在用戶最後一次點擊之後的幾分鐘內,保持活動狀態

2.3.1.1. 意味著會話的持續時間絕對比用戶的持續時間要長

2.3.2. 如果對會話進行計數,那麼就會高估用戶的數量

2.4. 伺服器會使用超時

3. 會話

3.1. 會話是每台應用程式伺服器的致命弱點

3.2. 每個會話都會消耗資源,主要是消耗記憶體

3.3. 啟用會話複製功能後(該網站確實啟用了),每個會話都會被序列化,併在每個頁面請求後傳輸到會話備份伺服器上

3.4. 意味著會話消耗了記憶體、CPU和網路帶寬

4. 測試

4.1. 所有的測試腳本都是遵守規則的

4.2. 按照應用程式的使用方式對其進行了測試

4.3. 應用程式開發人員沒有採取某種能夠阻止惡劣情況蔓延的防護措施

5. 混沌工程

5.1. 混沌工程源於悖論,穩定的系統會變得脆弱

5.2. 混沌並不總是涉及軟體中的故障,有時也出現在組織成員身上

5.2.1. 組織中的每一個人都是普通人,難免會犯錯

5.2.2. 高可靠性組織也使用演習和模擬的方法,在人的方面尋找相同的系統性弱點

5.3. 基本的做法

5.3.1. 規劃一段時間

5.3.2. 把一些人指定為在此期間“無行為能力”

5.3.3. 看業務是否可以繼續照常開展

5.3.4. 僵屍來襲模擬

5.3.4.1. 能立即發現一些關鍵的過程在人們離開後無法完成

5.3.4.2. 也許存在一個需要特定角色的系統,而這個角色只有一個人來擔任,或者另一個人掌握著關於如何配置虛擬交換機的關鍵信息

5.3.4.3. 當知道在無人參與的情況下,公司能讓業務正常運作一整天時,可以創造一個有20%的“僵屍”存在的異常情況,增加系統的壓力

5.4. 在分散式系統上進行實驗的學科,旨在建立系統能夠應對生產環境中的動蕩狀態的信心

5.5. 用來應對分散式系統,而且通常是應對大規模的系統

5.6. 由於規模問題,我們既無法在非生產環境中模擬上述問題,也不能通過單獨測試組件來獲得信心

5.7. 強調要從整個系統的視角看問題,它需要應對在單個組件中無法觀察到的那些新冒出的屬性

5.8. 系統

5.8.1. 由人員、技術和過程所組成的整個集合,而不僅僅是信息系統

5.9. 通過優化系統獲得可用性,還要獲得對來自惡劣和動蕩的世界的干擾的容忍性,而不是在理想化的環境中追尋高吞吐量

5.10. “大眾微型麵包車”悖論

5.10.1. 你能學會修複經常壞的東西,但無法學會如何修複那些很少壞的東西

5.10.2. 意味著當很少壞的東西壞掉時,情況就會更加可怕

5.11. 在使組件更穩健與使整個系統更穩健這兩者之間

5.11.1. Netflix公司並不是做“二選一”,而是選擇了“全都要”

5.11.1.1. 運用穩定性模式,讓單個實例更容易存活下來

5.11.1.2. 讓這些失效發生得更頻繁,使它們變成一種常態

5.11.1.2.1. 對很痛苦的事,要更頻繁地做。

5.12. 集群服務應該不受實例失效的影響

5.13. 關掉實例是最基本和最直接的混沌註入,絕對能發現系統中的弱點

6. 調節器

6.1. 調節器的任務是消除變化,但這種變化正是系統工作質量信息的最終來源

6.2. 調節器做得越好,能夠獲得的有關如何改進系統的信息就越少

6.2.1. 在IT人員休假之前,你不知道對他們有多依賴

7. 爆炸半徑

7.1. 指不良體驗的嚴重程度,這涉及受影響的顧客數量及顧客體驗被破壞的程度


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

-Advertisement-
Play Games
更多相關文章
  • 言: 今天在寫一個功能,需要接收演算法發過來的檢測數據,我這邊需要和演算法同步開發,有些地方需要演算法那邊的變數或數據,就寫了一些臨時變數,但是演算法對接後有需要把這些臨時變數改回來,所以想到了使用todo來記錄一下,等到代碼合併時把記錄的點修改過來。 接下來進行簡單的講解:C#中的todo就相當於我們的書 ...
  • 已知一張二維碼圖片,怎麼生成一張一模一樣的圖片出來? 最近有個項目,需要用到QRCode,之前只做過Datamatrix格式的,想著應該也是差不多的,於是就依葫蘆畫瓢,掏出我的陳年OnBarcode類庫,一通修改,生成了個嶄新的QRCode,與客戶提供的二維碼圖片一比對,雖然掃出來內容一樣,但明顯圖 ...
  • **簡介** 有時候我們在發佈程式時,不想讓客戶看到項目中的文件,這時就可以使用.NET的嵌入文件功能(虛擬文件)。在.NET中,虛擬文件(Virtual File)是一種特殊類型的文件,它們在編譯時被嵌入到程式集中,而不是作為獨立的文件存在於文件系統中。EmbeddedFile是指在編譯時將文件內 ...
  • 前言 筆者之前開發過一套C/S架構的桌面應用,採用了JWT作為用戶的登錄認證和授權。遇到的唯一問題就是JWT過期了該怎麼辦?設想當一個用戶正在進行業務操作,突然因為Token過期失效,莫名其妙地跳轉到登錄界面,是不是一件很無語的事。當然筆者也曾想過:為何不把JWT的有效期儘量設長些(假設24小時), ...
  • # Unity 如何獲取Texture 的記憶體大小 在Unity中,要獲取Texture的記憶體文件大小,可以使用UnityEditor.TextureUtil類中的一些函數。這些函數提供了獲取存儲記憶體大小和運行時記憶體大小的方法。由於UnityEditor.TextureUtil是一個內部類,我們需要 ...
  • 為什麼需要設備驅動模型 內核版本發展 2.4版本之前內核沒有統一的設備驅動模型,但是可以用(例如先前的led字元設備驅動實驗,使用前需要手動調用mknod命令創建設備文件,從而進一步控制硬體)。 2.4~2.6版本內核使用devfs,掛載在/dev目錄。需要在內核驅動中創建設備文件(調用devfs_ ...
  • 轉載請標明出處,維權必究: https://www.cnblogs.com/tangZH/p/12900387.html Glide源碼解析一,初始化 Glide源碼解析二—into方法 Glide源碼解析三(註冊組件) Glide源碼解析四(解碼和轉碼) Glide自定義組件註冊 通過Glide加 ...
  • > Vue2.x使用EventBus進行組件通信,而Vue3.x推薦使用`mitt.js`。 > > > 比起Vue實例上的`EventBus`,`mitt.js`好在哪裡呢?首先它足夠小,僅有200bytes,其次支持全部事件的監聽和批量移除,它還不依賴Vue實例,所以可以跨框架使用,React或 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...