讀發佈!設計與部署穩定的分散式系統(第2版)筆記16_握手和考驗機

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

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


1. 握手

1.1. 發送方和接收方之間的信號傳遞過程

1.2. 模擬數據機使用一種握手形式,協商兩個設備都能接受的速度和信號編碼

1.3. TCP使用三次握手建立套接字連接

1.4. TCP握手還允許接收方發信號告訴發送方:在接收方準備好之前不要發送數據

1.5. EIA-232C(以前稱為RS-232)的串列協議,是從接收方那裡知道它何時能準備好接收數據

1.6. 握手在低層通信協議中無處不在,但幾乎很少出現在應用程式層

1.7. 握手是一種未被充分利用的技術,在應用層協議中擁有巨大的優勢

1.7.1. HTTP並不擅長握手

2. 創建基於合作的需求控制機制

2.1. 客戶端和伺服器之間的握手,允許將需求的流量調節到可服務的級別

2.2. 在構建客戶端和伺服器時,兩者都必須實現握手

2.3. 讓伺服器通過限制自己的工作量保護自己

2.3.1. 伺服器應該有辦法拒絕執行發來的工作,而不是成為滿足任何要求的“受氣包”

2.3.2. 基於HTTP的伺服器需要依賴負載均衡器與Web伺服器或應用程式伺服器之間的合作關係實現“握手”

3. 健康狀況檢查

3.1. 在集群或負載均衡服務中,使用健康狀況檢查實現實例與負載均衡器握手

3.2. 當失衡的系統容量導致響應緩慢時,“握手”可能是最有價值的

3.3. 當調用缺乏握手機制的服務時,斷路器是一種可以使用的權宜之計

3.4. 在層疊失效情況下,握手是一種防止裂紋跨層蔓延的有效方法

4. 在自己的低層協議中構建握手

4.1. 如果創建了基於套接字的協議,那麼可以在其中構建握手機制

4.2. 端點就可以在未準備好接受工作時,通知其他端點

5. 考驗機

5.1. 分散式系統的失效方式很難在開發環境或QA環境中顯現

5.2. 可以創建考驗機來模擬每個集成點另一端的遠程系統

5.2.1. 硬體工程師和機械工程師一直使用考驗機

5.2.2. 軟體工程師雖然也已經在使用,但其考驗機過於簡單

5.2.3. 像設計應用程式伺服器一樣來設計考驗機,其中與真實應用程式相關的那些測試,可以設計為可插拔的形式

5.3. 優秀的考驗機嚴格測試系統,像現實世界的系統一樣“惡毒”

5.4. 考驗機應該給被測系統留下“傷疤”,它的意義就是讓被測系統做到不信有好事

5.4.1. 考驗機應該像一個小“黑客”,嘗試各種不良行為來給調用方搞破壞

5.5. 考驗機會引出混沌工程

5.6. 考驗機作為一臺單獨的伺服器運行,沒有義務遵循任何介面規範,可以激髮網絡錯誤、協議錯誤或應用程式級錯誤

5.6.1. 每個系統最終都會偏離介面規範,因此在遠程系統無法使用時,測試本地系統的行為就變得至關重要

5.6.2. 模擬偏離介面規範的系統失效方式

5.7. 遠程調用使用網路,套接字連接容易出現的失效

5.7.1. 網路傳輸問題

5.7.2. 網路協議問題

5.7.3. 應用程式協議問題

5.7.4. 應用程式邏輯問題

5.8. 考驗機知道其存在的意義是且僅是進行測試

5.8.1. 真正的應用程式不會直接調用低層網路API,但考驗機可以

5.8.2. 其位元組發送速度能快能慢

5.8.3. 能建立極長的監聽隊列

5.8.4. 能與套接字綁定卻從不發起連接

5.9. 考驗機僅是補充,不能取代其他測試方法

5.10. 考驗機有助於驗證非功能性行為,同時又與遠程系統保持隔離

6. mock對象

6.1. mock對象只能產生符合已定義介面的行為

6.2. mock對象通過切斷所有外部連接改進單元測試的隔離性,通常在系統層級之間的邊界處使用


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

-Advertisement-
Play Games
更多相關文章
  • # vane 寫這個的初衷是因為每次用node寫介面的時候總是需要一些寫大一堆的東西, 也有些人把很多介面都放在一個js文件內, 看起來很是雜亂, 後來用到nuxt寫的時候, 感覺用文件名來命名介面路徑很是方便, 無論是query參數還是params參數,都可以通過文件名來命名, 也可以通過文件夾層 ...
  • * 環境變數問題 ```typescript datasource db { provider = "mysql" url = env("DATABASE_URL") } ``` 1. `npx prisma db push` 預設取 .env 配置文件,那多環境怎麼處理? 2. 增加 `.env. ...
  • # 什麼是巡檢報告 巡檢報告是指對某一個系統或設備進行全面檢查,並把檢查結果及建議整理成報告的過程。 巡檢報告通常用於評估系統或設備的運行狀況與性能,以發現問題、優化系統、提高效率、降低故障率等方面提供參考。 ![file](https://img2023.cnblogs.com/other/233 ...
  • 前言 現在很多網頁用的都是固定標題欄,就像這樣: 很多網站為了相容小視窗還會做個JS適配: 但是如果視窗比這還小的話... 那就只剩下一部分了。 由於設置position:fixed後元素不會隨著滾動條滾動,所以超出頁面邊緣的部分將永遠看不見,除非增大視窗或縮小顯示比例。 很多設計師忘記考慮這一點了 ...
  • vue3插槽Slots 在 Vue3 中,插槽(Slots)的使用方式與 Vue2 中基本相同,但有一些細微的差異。以下是在 Vue3 中使用插槽的示例: // ChildComponent.vue <template> <div> <h2>Child Component</h2> <slot></ ...
  • 儘管寫過 outlet 路由的配置。 考慮到 token 判定和 路由頁 變更,我不瞭解v6是不是有更詳解的做法。 決定調一下配置,期望 在任何頁面非同步更新時,token 都可以在跳轉前 被檢測到,防止無 token 跳轉發生。 補上404頁面( 地址欄 頁面不存在時,展示404頁面 ) ![](h ...
  • [回到目錄](https://www.cnblogs.com/lori/p/3896484.html) # 說明 複合的責任鏈,類似於管道模式,只要符合條件,說會向下傳遞,不會終止 # 演算法說明 * 按最高優先順序去使用,符合就用,不符合就走下一個策略 * 具體鏈條,有點像pipeline管道模式 * ...
  • 業界有很多大促活動,像618、雙11、雙12等等。每一次大促不只是給業務帶來了新高,對於技術同樣也有很重要的意義,縱觀一些優秀的技術團隊,都是跟著業務一起成長的。在高併發大流量的背景下,如何支撐好業務運營,是一件很有挑戰性的事情,它可以從多方面檢驗我們的技術能力,對我們的系統架構和應急保障都提出了很... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...