1. 程式人生 > >分布式配置中心201902

分布式配置中心201902

廣播 令牌 動態刷新 cloud 最終一致性 ado 環境管理 自定義 align

分布式配置中心

1.配置中心簡介

2.xxl-conf簡介

3.代碼模擬演示

1.配置中心簡介

為什麽需要集中配置

當然是程序的發展,需要引入集中配置

隨著程序功能的日益復雜,程序的配置日益增多:各種功能的開關、參數的配置、服務器的地址……

對配置的期望也越來越高,配置修改後實時生效,灰度發布,分環境、分集群管理配置,完善的權限、審核機制……

隨著采用分布式的開發模式,項目之間的相互引用隨著服務的不斷增多,相互之間的調用復雜度成指數升高,每次投產或者上線新的項目時苦不堪言,因此需要引用配置中心治理

1.1 程序現狀

業務的急劇擴張,導致單機服務無法滿業務需求。這時候需要對單體大服務進行切開,服務走向SOA(微服務化)

技術分享圖片技術分享圖片?

這種場景中,配置文件的部署如上圖所示。這樣去部署配置簡直是一場噩夢,而且無法做到快速的動態的調整。失去了配置主要意義之一。所以統一配置中心顯得非常必要。

1.2 有哪些開源配置中心

spring-cloud/spring-cloud-config https://github.com/spring-cloud/spring-cloud-config spring出品,可以和spring cloud無縫配合

淘寶 diamond https://github.com/takeseem/diamond 已經不維護

disconf https://github.com/knightliao/disconf java開發,螞蟻金服技術專家發起,業界使用廣泛

ctrip apollo https://github.com/ctripcorp/apollo/ Apollo(阿波羅)是攜程框架部門研發的開源配置管理中心,具備規範的權限、流程治理等特性。

xxl-conf https://gitee.com/xuxueli0323/xxl-conf 輕量級分布式配置管理平臺,擁有"輕量級、秒級動態推送、多環境、跨語言、跨機房、配置監聽、權限控制、版本回滾"等特性。

1.3 配置中心對比

功能特性技術分享圖片技術分享圖片?

技術分享圖片技術分享圖片?

技術路線兼容性技術分享圖片

技術分享圖片?

可用性與易用性技術分享圖片技術分享圖片?

1.4 對比結果

綜上,ctrip applo是較好的選擇方案,但是由於xxl-conf功能簡單易用,可滿足絕大多數配置需求,也輕量化,依賴也低。

支持不同環境(開發、測試、生產)、不同集群

完善的管理系統,權限管理、發布審核、操作審計

SpringBoot集成友好 ,較小的遷移成本

配置修改實時生效(熱發布)

版本發布管理

2.xxl-conf簡介

1,概述特性

2,背景發展

3,架構設計

4,快速入門

2.1 概述特性

概述

XXL-CONF 是一個輕量級分布式配置管理平臺,擁有"輕量級、秒級動態推送、多環境、跨語言、跨機房、配置監聽、權限控制、版本回滾"等特性。現已開放源代碼,開箱即用。

特性

1、簡單易用: 接入靈活方便,一分鐘上手;

2、輕量級: 部署簡單,不依賴第三方服務,一分鐘上手;

3、配置中心HA:配置中心支持集群部署,提升配置中心系統容災和可用性。

4、在線管理: 提供配置中心, 通過Web界面在線操作配置數據,直觀高效;

5、多環境支持:單個配置中心集群,支持自定義多套環境,管理多個環境的的配置數據;環境之間相互隔離;

6、多數據類型配置:支持多種數據類型配置,如:String、Boolean、Short、Integer、Long、Float、Double 等;

7、跨語言:底層通過http服務(long-polling)拉取配置數據並實時感知配置變更,從而實現多語言支持。

8、跨機房:得益於配置中心集群關系對等特性,集群各節點提供冪等的配置服務;因此,異地跨機房部署時,只需要請求本機房配置中心即可,實現異地多活;

9、高性能:得益於配置中心的 "磁盤配置" 與客戶端的 "LocalCache",因此配置服務性能非常高;單機可承擔大量配置請求;

10、實時性: 秒級動態推送;配置更新後, 實時推送配置信息, 項目中配置數據會實時更新並生效, 不需要重啟線上機器;

11、配置變更監聽功能:可開發Listener邏輯,監聽配置變更事件,可據此動態刷新JDBC連接池等高級功能;

12、最終一致性:底層借助內置廣播機制,保障配置數據的最終一致性,從而保證配置數據的同步;

13、配置備份: 配置數據同時在磁盤與MySQL中存儲和備份,並定期同步, 提高配置數據的安全性;

14、多種獲取配置方式:支持 "API、 註解、XML占位符" 等多種方式獲取配置,可靈活選擇使用;

15、兼容Spring原生配置:兼容Spring原生配置方式 "@Value"、"${}" 加載本地配置功能;與分布式配置獲取方式隔離,互不幹擾;

16、分布式: 支持多業務線接入並統一管理配置信息,支撐分布式業務場景;

17、項目隔離: 以項目為維度管理配置, 方便隔離不同業務線配置;

18、高性能: 通過LocalCache對配置數據做緩存, 提高性能;

19、客戶端斷線重連強化:設置守護線程,周期性檢測客戶端連接、配置同步,提高異常情況下配置穩定性和時效性;

20、空配置處理:主動緩存null或不存在類型配置,避免配置請求穿透到遠程配置Server引發雪崩問題;

21、用戶管理:支持在線添加和維護用戶,包括普通用戶和管理員兩種類型用戶;

22、配置權限控制;以項目為維度進行配置權限控制,管理員擁有全部項目權限,普通用戶只有分配才擁有項目下配置的查看和管理權限;

23、歷史版本回滾:記錄配置變更歷史,方便歷史配置版本回溯,默認記錄10個歷史版本;

24、配置快照:客戶端從配置中心獲取到的配置數據後,會周期性緩存到本地快照文件中,當從配置中心獲取配置失敗時,將會使用使用本地快照文件中的配置數據;提高系統可用性;

25、訪問令牌(accessToken):為提升系統安全性,配置中心和客戶端進行安全性校驗,雙方AccessToken匹配才允許通訊;

2.2 背景發展

背景

常規項目開發過程中, 通常會將配置信息位於在項目resource目錄下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活動開關、閾值配置、黑白名單……等等。使用properties維護配置信息將會導致以下幾個問題:

1、需要手動修改properties文件;

2、需要重新編譯打包;

3、需要重啟線上服務器 (項目集群時,更加令人崩潰) ;

4、配置生效不及時: 因為流程復雜, 新的配置生效需要經歷比較長的時間才可以生效;

5、不同環境上線包不一致: 例如JDBC連接, 不同環境需要差異化配置;

優點

1、不需要 (手動修改properties文件) : 在配置中心提供的Web界面中, 定位到指定配置項, 輸入新的配置的值, 點擊更新按鈕即可;

2、不需要 (重新編譯打包) : 配置更新後, 實時推送新配置信息至項目中, 不需要編譯打包;

3、不需要 (重啟線上服務器) : 配置更新後, 實時推送新配置信息至項目中, 實時生效, 不需要重啟線上機器; (在項目集群部署時, 將會節省大量的時間, 避免了集群機器一個一個的重啟, 費時費力)

4、配置生效 "非常及時" : 點擊更新按鈕, 新的配置信息將會即可推送到項目中, 瞬間生效, 非常及時。比如一些開關類型的配置, 配置變更後, 將會立刻推送至項目中並生效, 相對常規配置修改繁瑣的流程, 及時性可謂天壤之別;

5、不同環境 "同一個上線包" : 因為差異化的配置托管在配置中心, 因此一個上線包可以復用在生產、測試等各個運行環境, 提供能效;

發展

於2015年,我在github上創建XXL-CONF項目倉庫並提交第一個commit,隨之進行系統結構設計,UI選型,交互設計……

至今,XXL-CONF已接入多家公司的線上產品線,接入場景如電商業務,O2O業務和核心中間件配置動態化等,截止2018-10-24為止,XXL-CONF已接入的公司包括不限於:

- 1、深圳市綻放工場科技有限公司

- 2、深圳雙猴科技有限公司

- 3、商智神州軟件有限公司

- 4、浙江力太科技 - ……

2.3 架構設計

架構圖技術分享圖片技術分享圖片?

配置中心由以下幾個核心部分組成:

1、管理平臺:提供一個完善強大的配置管理平臺,包含:環境管理、用戶管理、項目管理、配置管理等功能,全部操作通過Web界面在線完成;

2、管理平臺DB:存儲配置信息備份、配置的版本變更信息等,進一步保證數據的安全性;同時也存儲"管理平臺"中多個模塊的底層數據;

3、磁盤配置數據:配置中心在每個配置中心集群節點磁盤中維護一份鏡像數據,當配置新增、更新等操作時,將會廣播通知並實時刷新每個集群節點磁盤中的配置數據, 最終實時通知接入方客戶端;

4、客戶端;

客戶端設計技術分享圖片技術分享圖片?

客戶端基於多層設計,核心四層設計如下:

1、API層:提供業務方可直接使用的上層API, 簡單易用, 一行代碼獲取配置信息;同時保證配置的實時性、高性能;

2、LocalCache層:客戶端的Local Cache,極大提升API層的性能,降低對配置中心集群的壓力;首次加載配置、監聽配置變更、底層異步周期性同步配置時,將會寫入或更新緩存;

3、Mirror-File層:配置數據的本地快照文件,會周期性同步 "LocalCache層" 中的配置數據寫入到 "Mirror-File" 中;當無法從配置中心獲取配置,如配置中心宕機時,將會使用 "Mirror-File" 中的配置數據,提高系統的可用性;

4、Remote層:配置中心遠程客戶端的封裝,用於加載遠程配置、實時監聽配置變更,提高配置時效性;

2.4 快速入門

環境搭建

1,mysql安裝

2,mysql數據庫初始化

3,zookeeper安裝

4,xxl-conf源碼編譯打包(或Docker鏡像方式)

5,xxl-conf調整配置文件配置

6,啟動配置中心,添加配置內容

7,客戶端引入xxl-conf的maven的jar

8,客戶端配置獲取4種方式

9,配置變更監聽

3.代碼模擬演示

1,管理中心操作指南

2,配置獲取3種方式

3,數據庫配置熱發布

4,操作演示

3.1 管理中心操作指南

環境管理

環境管理(新增|編輯|刪除)

技術分享圖片技術分享圖片?

項目管理

項目管理(新增|編輯|刪除)

技術分享圖片技術分享圖片?

用戶(權限)管理

用戶(新增|編輯|刪除|授權項目)

技術分享圖片技術分享圖片?

配置管理

配置(新增|編輯|刪除|同步)

技術分享圖片技術分享圖片?

3.2 配置獲取3種方式

技術分享圖片技術分享圖片?

1,API方式

String paramByApi = XxlConfClient.get("default.key01", null);

技術分享圖片技術分享圖片?

2,@XxlConf 註解方式

@XxlConf("default.key02")

public String paramByAnno;

技術分享圖片技術分享圖片?

技術分享圖片技術分享圖片?

3,XML占位符方式

<bean id="demoConf" class="com.xxl.conf.sample.demo.DemoConf"> <property name="paramByXml" value="$XxlConf{default.key03}" /> </bean>

技術分享圖片技術分享圖片?

技術分享圖片技術分享圖片?

3.3 數據庫配置熱發布

技術分享圖片技術分享圖片?

技術分享圖片技術分享圖片?

技術分享圖片技術分享圖片?

3.4 操作演示

1,添加環境

2,添加項目

3,授權項目

4,添加配置

5,編寫客戶端代碼

6,演示3種取值方式

7,動態數據源動態更新配置熱生效配置

8,動態數據源動代碼閱讀

感謝大家觀看!

如有錯誤請指出互相交流,讓小弟也學習學習,謝謝!

分布式配置中心201902