讀發佈!設計與部署穩定的分散式系統(第2版)筆記21_實例層之配置

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

只要將配置信息存放在與源代碼不同的存儲庫中,將其鎖好,僅對有權訪問的人開放,並且管理員能夠根據過程、程式和執行人等授予或撤銷對相關配置信息的訪問許可權,那麼配置信息也可以存放在版本控制系統中 ...


1. 導致運維失誤的兩大因素

1.1. 隱秘的連鎖反應

1.2. 暗藏的高複雜度

1.3. 影響著配置屬性

2. 配置

2.1. 配置屬性是系統用戶介面的一部分,供支持其開發和運維的人員使用

2.1.1. 最易被忽視

2.2. 生產級別的軟體都有大量可配置的屬性

2.2.1. 主機名

2.2.2. 埠號

2.2.3. 文件系統位置

2.2.4. ID號

2.2.5. 用戶名

2.2.6. 密碼

2.3. 任何屬性出現錯誤,系統都會遭到破壞

2.3.1. 即使該系統大部分時間能夠正常工作,也仍有可能在某個重要時刻中斷服務

3. 配置文件

3.1. 由於同一個軟體需要在不同的實例上運行,因此某些配置屬性可能會因機器而異

3.2. 代碼應該在部署目錄之外查找適合相應部署環境的配置

3.3. 配置文件會包含整個企業中最敏感的信息:生產資料庫的密碼

3.3.1. 要避免將不同部署環境的配置值保存在版本控制系統中

3.4. 只要將配置信息存放在與源代碼不同的存儲庫中,將其鎖好,僅對有權訪問的人開放,並且管理員能夠根據過程、程式和執行人等授予或撤銷對相關配置信息的訪問許可權,那麼配置信息也可以存放在版本控制系統中

4. 易處理基礎設施的配置

4.1. 基於鏡像的環境中無法針對不同的實例改變其配置文件

4.2. 方法

4.2.1. 在啟動時註入配置信息

4.2.1.1. 提供環境變數或文本blob來註入配置信息

4.2.1.2. 對大多數小團隊來說,註入配置信息更為適用

4.2.2. 使用配置服務

4.2.2.1. 將配置信息註入鏡像的方法通過配置服務完成

4.2.2.2. 實例會對配置服務產生嚴重的依賴

4.2.2.2.1. 配置服務只要一中斷,就立即會引發嚴重級別高達1級的事故
4.2.2.2.2. 當配置服務不可用時,實例就根本無法啟動

4.2.2.3. ZooKeeper、etcd以及其他任何配置服務,都是複雜的分散式系統軟體

4.2.2.3.1. 必須依賴一個精心設計的網路拓撲才能最大限度地提高可用性,並且必須對其容量進行精細的管理

4.2.2.4. 配置服務需要高度的運維成熟度,並會帶來一些顯著的開銷

4.2.2.4.1. 只是服務於一個應用程式,那麼就不值得使用配置服務
4.2.2.4.2. 只有服務於組織中更廣泛的應用程式時,才適合進行配置服務

5. 定義配置屬性

5.1. 屬性名稱應足夠清晰,幫助用戶避免“自我失誤”

5.2. 主機就定義為hostname,這樣的命名雖然沒錯,但毫無幫助

6. 明晰性

6.1. 指的是系統容許運維工程師、開發工程師和業務負責人瞭解其歷史趨勢、當前狀況、即時狀態和未來走向的程度

6.2. 系統級的明晰性視圖將呈現歷史分析、當前狀態、即時行為和未來走向,每個實例都可以提供足夠多的數據構建系統級視圖

6.3. 當且僅當具有某種程度的明晰性時,系統才能更加成熟

6.4. 良好的數據有助於做出正確的決策,在缺乏可信數據的情況下,決策就只能根據某人的影響力、偏見

6.5. 缺乏明晰性的系統無法在生產環境中長期運行

6.5.1. 如果系統管理員不瞭解系統在做什麼,就無法對其進行調整和優化

6.5.2. 如果開發人員不瞭解生產環境中系統各個部分的運行狀況,那麼他們就不能隨著時間的推移,提高系統的可靠性或韌性

6.5.3. 如果業務負責人不瞭解系統是否在幫助他們賺錢,那麼他們將不會投資系統未來的工作

6.5.4. 如果缺乏明晰性,那麼每次發佈都會讓系統變得更糟,從而令系統發生退化

7. 明晰性設計

7.1. 嚴格的局部可見性只能實現嚴格的局部優化

7.2. 如果每次僅提升一個應用程式的可見性,則會掩蓋擴展效應引發的問題

7.3. 監控和報告系統應該像在系統周圍構建的外骨骼,而不是交織在系統內部

7.3.1. 要密切關註系統內耦合現象,監控框架侵入系統內部相對容易

7.4. 從進程中獲取信息

7.5. 在實例上運行的進程是完全不明晰的

7.5.1. 除非能在該進程中運行調試器,否則進程幾乎不會揭示任何關於自己的信息

7.6. 黑盒技術在系統外部運行,通過外部觀察到的事物檢查進程

7.6.1. 可以在系統發佈後實施,通常由運維人員完成

7.6.2. 易用的日誌抓取系統(如Splunk)就是黑盒技術的例子

7.7. 白盒技術在系統內部運行,通常這種技術看起來像是由特定語言庫提供的代理

7.7.1. 在開發過程中,白盒技術和進程必須要集成到一起

7.7.2. 白盒技術與編程語言和開發框架之間的耦合更為緊密


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

-Advertisement-
Play Games
更多相關文章
  • # 一、截圖神器 ## 1、Snipaste * Snipaste,一款簡單強大的截圖貼圖利器 * 下載地址:Snipaste ![](https://img2023.cnblogs.com/blog/3202319/202306/3202319-20230601170348434-18242786 ...
  • # 一、NVM簡介 在項目開發過程中,使用到vue框架技術,需要安裝node下載項目依賴,但經常會遇到node版本不匹配而導致無法正常下載,重新安裝node卻又很麻煩。為解決以上問題,nvm:一款node的版本管理工具,能夠管理node的安裝和使用,使用簡單,可下載指定node版本和切換使用不同版本 ...
  • 在項目中使用el-dialog中發現不能夠拖拽移動,因此網上找了相關資料,使用自定義指令實現拖拽功能。 1、創建自定義指令: 新建文件directive/el-drag-dialog/index.js import drag from "./drag"; const install = functi ...
  • 一個輕量、可拓展、針對手機網頁的前端開發者調試面板。 vConsole 是框架無關的,可以在 Vue、React 或其他任何框架中使用。 現在 vConsole 是微信小程式的官方調試工具。 ...
  • 當你使用html2canvas對某個節點進行截圖時,項目小dom節點少那還沒什麼性能問題,如果是個大項目,有成百上千個dom節點,那將是非常頭疼的事情(產品經理:小張啊,你這個截圖功能為什麼需要這個長的時間,這讓客戶怎麼用,重新改。小張:********...)。不多bb了,直接開始 html2ca ...
  • 在前端後端開發中,我們通常會使用JavaScript來實現網頁的動態效果和交互功能。 由於JavaScript是一種開放的腳本語言,其代碼可以被輕易地查看和複製,這就給我們的代碼安全帶來了一定的威脅。為了保護我們的代碼不被惡意利用,我們需要對其進行加密和壓縮處理。 一般而言,加密和壓縮是兩個不同的概 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 遇到的問題 在一個新項目中,設計統一了項目中所有的字體,並提供了字體包。在項目中需要按需引入這些字體包。 首先,字體包的使用分為了以下幾種情況: 無特殊要求的語言使用字體A,阿拉伯語言使用字體B; 加粗、中等、常規、偏細四種樣式,AB兩種 ...
  • 數字化轉型會帶來大量的研發需求,如何更好更快的交付這些需求成為一個突出問題,該怎麼打造一個平臺去解決該問題?能不能用第一性原理思維去推導出發展方向? ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...