分布式配置中心201902
分布式配置中心
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