SpringCloud微服務系列- 分散式能力建設之配置中心

欢乐豆123發表於2024-06-29

SpringCloud微服務系列- 分散式能力建設之配置中心

概要

配置中心,顧名思義就是用來統一管理專案中所有配置的系統。

微服務裡面,配置中心的思路就是把專案中各種配置、各種引數、各種開關,全部都放到一個集中的地方進行統一管理,並提供一套標準的介面。當各個服務需要獲取配置的時候,就來配置中心的介面拉取。當配置中心中的各種引數有更新的時候,也能通知到各個服務實時的過來同步最新的資訊,使之動態更新。

一、Spring Cloud Config的相關介紹

統一配置各個微服務例項

1. 分散式系統面臨問題

在分散式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分散式配置中心元件。

2. 什麼是Spring Cloud Config

Spring Cloud Config 專案是一個解決分散式系統的配置管理方案。

3. 整體結構

整個結構包括三個部分,客戶端(各個微服務應用),服務端(中介者), 配置倉庫(可以是本地檔案系統或者遠端倉庫,包括git,Svn等)。

1)配置倉庫中放置各個配置檔案(.yml或者.properties)

2)服務端指定配置檔案存放的位置

3)客戶端指定配置檔案的名稱

4. Config能幹什麼

1) 提供服務端和客戶端支援

2) 集中管理各環境的配置檔案

3) 配置檔案修改之後,可以快速的生效

4) 可以進行版本管理

5) 支援大的併發查詢

6)支援各種語言

5. 對北比主流配置中心

開源的配置中心有很多,比如,360的QConf、淘寶的nacos、攜程的Apollo等。在SpringCloud中,有分散式配置中心元件spring cloud config,它功能全面、強大,可以無縫地和Spring體系相結合,使用方便簡單。

2. Config配置總控中心搭建

分散式配置中心服務端:

<!--引入config依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactIdspring-cloud-config-server</artifactId>
</dependency>

3. Config配置讀取規則

客戶端如何透過配置中心服務端,來獲取遠端倉庫屬於自己微服務的配置

1. Config支援的請求的引數規則

1 /{application)/{profile}[/label}]
2 /{application}-(profile}.yml
3 /{label}/application)-{profile}.yml
4 /{application}-(profile}.properties
5 /{label}/{application}-{profile}.properties
6 
7 application 應用名
8 profile 環境名
9 label Git分支

注意:

1) {application} 就是應用名稱,對應到配置檔案上來,就是配置檔案的名稱部分,例如我上面建立的配置檔案。

2) {profile}就是配置檔案的版本,我們的專案有開發版本、測試環境版本、生產環境版本,對應到配置檔案上來就是以application-{profile),yml加以區分,
例如application-dev.yml,application-test.yml,application-prod.yml.

3) {label}表示git分支,預設是master分支,如果專案是以分支做區分也是可以的,
那就可以透過不同的label來控制訪問不同的配置檔案了。

最推薦使用方式:

/{分支名}/{應用名}-{環境名yml

4. Config客戶端配置與測試

注意:
applicaiton.yml: 是使用者級的資源配置項
bootstrap.yml: 是系統級的,優先順序更加高
bootstrap.yml 優先順序高於application.yml

為什麼要引入bootstrap
注意:要將Client模組下的application.yml檔案改為pootstrap.yml,這是很關鍵的,因為bootstrap.yml是比application.ymls先載入的。bootstrap.yml優先順序高於application.yml

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

6. Config客戶端之動態重新整理

問題:難道每次運維修改配置檔案,客戶端都需要重啟?

1. 分散式配置的動態重新整理問題
修改碼雲上的配置檔案內容做調整。
問題:
1) 重新整理3344,發現ConfigServer配置中心立刻響應
2) 重新整理3355,發現ConfigServer客戶端沒有任何響應
3) 3355沒有變化除非自己重啟或者重新載入
4) 難道每次運維修改配置檔案,客戶端都需要重啟

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

手動重新整理配置:
POST請求: http://localhost:3355/actuator/refresh

=================== 分割線 ================

五、訊息匯流排_什麼是 Spring Cloud Bus

Spring Cloud Bus微服務中必備的元件,透過它來解決分散式配置中心所遇到的問題

1. Config配置中心遇到的問題

當我們在更新碼雲上面的配置以後,如果想要獲取到最新的配置,需要手動重新整理機制,每次提交程式碼傳送請求來重新整理客戶端,客戶端越來越多的時候,需要每個客戶端都執行一遍,這種方案就不太適合了。

Spring Cloud作為微服務架構的一個綜合解決方案,也提供了對應的解決方案Spring Cloud Bus,即訊息匯流排。

2. 什麼是Spring Cloud Bus

Spring Cloud Bus透過建立多個應用之間的通訊頻道,管理和傳播應用間的訊息,從技術角度來說,應用了AMQP訊息代理作為通道,透過MQ的廣播機制實現訊息的傳送和接收。Bus支援兩種訊息代理:RabbitMQ和Kafka。

3. Spring Cloud Bus做配置更新的步驟

1) 修改配置檔案,提交程式碼觸發post給客戶端A傳送bus/refresh

2) 客戶端A接收到請求從Server端更新配置並且傳送給Spring Cloud Bus
3) Spring Cloud bus接到訊息並通知給其它客戶端

4) 其它客戶端接收到通知,請求Server端獲取最新配置

5) 全部客戶端均獲取到最新的配置

相關文章