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) 全部客戶端均獲取到最新的配置