微服務架構 | 2. 服務配置管理
- 2022 年 1 月 12 日
- 筆記
- Spring 微服務實踐學習筆記, 學習筆記
前言
參考資料:
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服務原理與實戰》
《B站 尚矽谷 SpringCloud 框架開發教程 周陽》
將配置寫入一個 config 常量類往往會有些問題,每次對配置進行更改時,應用程式都必須重新編譯和重新部署;
在少量的應用程式中可以將配置寫在低層級的屬性文件,如:YAML、JSON 或 XML;其中包含資料庫和中間件連接資訊,以及驅動應用程式行為的相關元數據;
但是在處理可能包含數百個微服務的基於雲的應用程式,其中每個微服務可能會運行多個服務實例時,需要對配置進行集中管理;
1. 配置管理基礎知識
1.1 為什麼需要配置管理
- 將配置寫入一個 config 常量類往往會有些問題,每次對配置進行更改時,應用程式都必須重新編譯和重新部署;
- 在少量的應用程式中可以將配置寫在低層級的屬性文件,如:YAML、JSON 或 XML;其中包含資料庫和中間件連接資訊,以及驅動應用程式行為的相關元數據;
- 但是在處理可能包含數百個微服務的基於雲的應用程式,其中每個微服務可能會運行多個服務實例時,需要對配置進行集中管理;
1.2 配置管理需要遵從的四個原則
- 分離:將服務配置資訊與服務的實際物理部署完全分開;
- 抽象:將訪問配置數據的功能抽象到一個服務介面;
- 集中:將應用程式配置集中在儘可能少的存儲庫中 ;
- 穩定:保證其高可用和冗餘;
1.3 配置在什麼時候被讀取
1.4 配置管理的架構概念
- 配置管理的連接資訊(連接憑據、服務端點等)將在微服務啟動時被傳遞給微服務;
- 配置管理的更改通常通過構建和部署管道來處理,其中配置的更改可以通過版本資訊進行標記,並通過不同的環境進行部署;
1.5 配置管理有多種選擇
1.6 Spring Cloud 的三種配置文件(.xml .yml 與 .properties)
-
.xml
- 一種可擴展標記語言;
- 用於標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型;
- 是一種允許用戶對自己的標記語言進行定義的源語言;
- 適合 Web 傳輸;
- 用於引入
pom
依賴文件;
-
.yml(下稱 yml)
- 一種比 XML 更為簡單易讀的序列化語言,更像是一種數據格式;
- 也稱 yaml,yml 文件擴展名是 yaml 的縮寫;
- 以數據為中心,比 json、xml 等更適合做配置文件;
- 複雜配置建議用 yml。易讀性強;
- 支援的多種程式語言種類(支援python、go等大量程式語言);
- 支援中文內容;
- 支援列表;
- 優先載入,會被後載入的 properties 覆蓋;
-
.properties(下稱 properties)
- 作用同 yml;
- 簡單配置用 properties;
- properties 支援中文內容只能用 unicode 編碼;
- 只支援鍵值對數據;
- 載入優先順序低,會覆蓋 yml 的內容;
1.7 Spring Cloud 的兩類配置文件(application 與 boostrap)
-
application.yml 或 application.properties(以下統稱:application)
- 主要用於 Spring Boot 項目的自動化配置;
- 是用戶級的資源配置項;
-
boostrap.yml 或 boostrap.properties(以下統稱:boostrap)
- 是系統級的,由父
ApplicationContext
載入,載入優先於 application; - 主要用於從額外的資源來載入配置資訊;
- 可以在本地外部配置文件中解密屬性(用於加密/解密的場景);
- 默認不能被本地相同配置覆蓋;
- bootstrap可以理解成系統級別的一些參數配置,這些參數一般是不會變動的;
- 使用 Spring Cloud Config 配置中心時,這時需要在 bootstrap 配置文件中添加連接到配置中心的配置屬性來載入外部配置中心的配置資訊;
- 需要注意一個例外:若 bootstrap 裡面配置了 server.port=8888,而 application 裡面配置了 server.port=7777。事實上,項目啟動時的埠號是 7777(bootstrap不關心這個屬性);
- 是系統級的,由父
-
相同點:
- 共用一個環境,是任何 Spring 應用程式的外部來源;
1.8 目前幾種流行的配置中心對比
名稱 | 廠商 | 特點(優點) | 缺點 |
---|---|---|---|
Spring Cloud Config | 非分散式鍵值存儲;提供了對 Spring 和非 Spring 服務的緊密集成;可以使用多個後端來存儲配置數據 , 包括共享文件系統、Eureka、Consul 和 Git 等 | ||
2. Spring Cloud Config
SpringCloud Config 為微服務架構中的微服務提供集中化的外部配置支援,配置伺服器為各個不同微服務應用的所有環境提供了一個中心化的外部配置;
最後
