讀發佈!設計與部署穩定的分散式系統(第2版)筆記29_控制層下

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

![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230804112759115-773698620.png) # 1. 配置服務 ## 1.1. 配置服務本身就是分散式資料庫 ### 1.1.1. 像ZooKeeper和et ...


1. 配置服務

1.1. 配置服務本身就是分散式資料庫

1.1.1. 像ZooKeeper和etcd這樣的配置服務

1.1.2. 受CAP定理和亞光速通信的限制

1.1.3. 可實現容量擴展,但不具備資源可伸縮性

1.1.4. 也會遭受相同的網路創傷

1.2. 信息並不僅僅從服務流向客戶端實例,實例也可以向服務報告其版本號(或提交SHA演算法)和節點標識符

1.3. 每次寫入配置服務,都必須經歷某種共識機制才能生效

1.4. 確保實例可以在沒有配置服務的情況下啟動

1.5. 確保實例在配置服務無法訪問時不會停止工作

1.6. 確保配置服務的某個被網路分隔的節點不具備關閉整個系統的能力

1.7. 要跨地理區域進行複製

2. 環境整備和部署服務

2.1. 部署是運維工作中的必經環節,是連接開發和生產的橋梁

2.2. 部署工具本身應該配備一個部署包庫

2.3. 對一些組織來說,部署就是DevOps

2.4. 推式部署工具

2.4.1. 使用SSH或其他代理工具,因此中央伺服器可以連接到目標機器上來運行腳本

2.4.2. 這些目標機器事先並不知道自己的角色,伺服器會統一將角色分配給它們

2.4.3. 對於長壽命的虛擬機甚至物理主機,推式部署工具就可以更簡單地進行設置和管理

2.5. 拉式部署工具

2.5.1. 特別適用於資源可擴展的場景

2.5.2. 拉式部署工具更依賴各台機器瞭解自己的角色

2.5.3. 機器上的軟體可以訪問配置服務獲取有關其角色的最新信息

2.6. 用於生產環境的構建包需要使用已知來源的程式庫,在一臺“乾乾凈凈”的伺服器上運行

2.7. 可重覆的構建工作非常重要,要確保在機器上可以運行的代碼在生產環境中也能運行

2.8. 任何廣泛使用的伺服器軟體都可用作攻擊武器,包括構建伺服器,諸如Jenkins、Bamboo或GoCD

2.8.1. 構建系統本身的插件是直接從網上下載的

2.9. 金絲雀部署是構建工具需要完成的一項重要工作

2.9.1. “金絲雀”指一小組實例,它們率先獲得了系統的新版本

2.9.2. 在一段時間內,運行新版本的實例會與運行舊版本的實例共存

2.9.3. 如果金絲雀實例行為異常,或者其度量指標一直很低,那麼該構建就不會推送給剩餘的實例安裝

2.10. 金絲雀部署的目的就是在構建包到達用戶之前,拒絕其中糟糕的構建包

3. 命令與控制

3.1. 只有當實例需要花費很長時間才能做好運行前的準備工作時,實時控制才有必要

3.2. 控制點

3.2.1. 重置斷路器

3.2.2. 調整連接池大小和超時

3.2.3. 禁用特定的出站集成

3.2.4. 重新載入配置

3.2.5. 開始或停止接收負載

3.2.6. 特性開關

3.3. 開發人員不相信運維人員能正確地部署軟體並運行腳本

3.4. 運維人員不允許開發人員登錄到生產機器更新資料庫模式

3.5. 這個信任的破裂本身就是一個需要解決的問題

3.5.1. 絕對不要在生產代碼中構建一個自我毀滅“按鈕”

3.5.2. 許多服務會採取公開一些控制的方法來更新資料庫模式,或者刪除並重新設置所有數據

3.6. 刷新緩存按鈕,這也是非常危險的

3.7. 命令隊列

3.7.1. 一個共用的消息隊列或發佈-訂閱匯流排,所有的實例都可以監聽

3.7.2. 有了命令隊列,一窩蜂效應就更容易發生了

3.7.3. 為每個實例添加一個隨機的延遲時間,讓它們能夠分散地執行命令,這是避免一窩蜂效應的好方法

3.8. Watir或RoboForm這樣的圖形用戶界面測試工具

3.9. 對生產環境中長期的運維工作來說,圖形用戶界面是糟糕的管理界面。長期運維的最佳界面是命令行

3.10. 所有構建的軟體要麼必須維護,要麼被迫拋棄

3.11. 要選擇那些適合團隊規模和工作負載規模的工具

3.12. 可以從系統可見性開始,使用日誌記錄、跟蹤和度量指標來創建明晰性

3.13. 當面對更大或更動態的系統時,可以使用配置、整備和部署服務來獲得杠桿作用

3.14. 一旦系統(在某種程度上)穩定下來,並且問題顯露出來,就要建立控制機制,這樣就能進行更精確的控制,而不僅僅是重新配置和重新啟動實例

3.15. 相比那些高度動態的環境,部署到長壽命機器上的大型系統從控制機制中受益更多

4. 平臺廠商

4.1. 相對於雲供應商,平臺能夠提供一個與之不同的特性——位置無關性

4.2. Kubernetes、Apache Mesos、Cloud Foundry以及Docker的Swarm Mode

4.3. 既然已經在平臺上花了大價錢,就應該充分加以利用

4.3.1. 不要嘗試在它外面再包裝一層API,或自己提供一套腳本

5. 工具清單

5.1. 日誌收集和搜索

5.2. 度量指標收集和可視化

5.3. 部署

5.4. 配置服務

5.5. 實例安置位置

5.6. 實例和系統可視化

5.7. 調度

5.8. IP地址、覆蓋網路、防火牆和路由管理

5.9. 自動擴展控制器

5.10. ⑩告警和通知

6. 要點

6.1. 每個解決方案都會帶來新問題。隨著系統容量的水平擴展和垂直擴展,我們幾乎將一切虛擬化了

6.2. 一旦知道整個系統發生了什麼,就能採取干預措施

6.3. 需要瞭解自動化讓所有事情都運行得更快帶來的問題

6.3.1. 自動化缺乏人的判斷力,所以當出錯時,錯誤會發展得很快,這就需要我們在自動化中建立安全機制


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

-Advertisement-
Play Games
更多相關文章
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • ## windows程式圖標緩存 在vs中替換c++程式的圖標後,需要重新編譯,但是很多情況下都不會刷新,還是看到老的圖標,只能重啟電腦才能看到新的圖標。 通過ChatGPT得到相關的回答如下: 如果在 Windows 上更換了可執行文件 (.exe) 的圖標,但是在圖標文件已經更改的情況下仍然顯示 ...
  • 進程函數 簡單描述一下關於進程的函數,主要有fork調用、exec調用、exit調用、wait調用和sleep調用。 fork調用 所需頭文件 #include <unistd.h> //標準函數庫 #include <sys/types.h> //提供系統調用的標誌 函數原型 pid_t fork ...
  • 海納思全稱是海思機頂盒NAS系統, 網站 https://www.ecoo.top/. 他們做的固件在 N2 NS-1 上應該是集成度做的最好的一個, 包含的功能很豐富, 除了常見的 Aria2, Transmission, Samba, 還集成了命令行, 網盤和筆記等. 適合想直接刷機使用, 不喜... ...
  • 一.前言 從上個世紀到現在,工程師們在優化伺服器性能的過程中,提出了各種不同的io模型,比如非阻塞io,io復用,信號驅動式io,非同步io。具體io模型在不同平臺上的實現也不一樣,比如io復用在bsd上可以由kqueue實現,在solaris系統上可以由/dev/poll實現。為了實現系統的可移植性 ...
  • 分庫分表是大型互聯網應用經常採用的一種數據層優化方案,常見的分庫分表中間件如 sharding-jdbc、mycat 都已經比較成熟,基本上可以應對我們一般的分庫分表需求。 做過分庫分表的同學應該知道,在給業務系統做分庫分表改造過程中,難的不是如何使用這些組件進行分庫分表,而是如何將非分庫分表的系... ...
  • 因歷史遺留原因,接手的項目沒有代碼提醒/格式化,包括 eslint、pretttier,也沒有 commit 提交校驗,如 husky、commitlint、stylelint,與其期待自己或者同事的代碼寫得完美無缺,不如通過一些工具來進行規範和約束。 ### eslint eslint 是一個代碼 ...
  • # 引言 這幾天幫朋友忙,用了一周時間,高仿了一個釘釘審批流。這個東西會有不少朋友有類似需求,就分享出來,希望能有所幫助。為了方便朋友的使用,設計製作的時候,儘量做到節點配置可定製,減少集成成本。如果您的項目有審批流需求,這個項目可以直接拿過去使用。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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...