1. 程式人生 > >基於zookeeper,spring設計的引數中心繫統

基於zookeeper,spring設計的引數中心繫統

一、設計背景

在系統構建過程中以及業務系統執行過程中,涉及到很多可能隨時變化的動態引數,在JavaWeb相關係統內,引數配置存在有很多種方式,對現有的引數配置方式進行分析參見表1-1:

表1-1 引數配置方式分析

配置方式 存在問題 備註
程式碼內字元竄字面量配置 每次引數的修改都需要重新編譯
properties配置檔案/xml配置檔案 普通用法雖然將引數從程式碼內抽離出來,但是無法隨時更新生效 spring提供的ReloadableResourceBundleMessageSource工具類可以實現熱載入Properties檔案,將引數配置檔案從程式碼分離可以做到不停機不重啟做引數維護,並被程式載入,但是仍需系統重新從檔案資源內獲取新的引數值
JMX引數配置 標準MBEAN是有侵入性的,他要管理的物件是符合JAVA BEAN規範的物件。但是要作為標準MBEAN而被管理,就需要實現一個介面。這個介面的名稱必須是類名加上MBean。 Spring支援將普通Bean通過配置MBeanExporter生成MBean

基於上述分析,設計實現一個低侵入的便捷引數配置中心。

二、功能模組圖

引數中心繫統主要為實現多系統、多模式、安全、動態維護的引數配置;支援方便快捷的引數匯入匯出功能;支援個性化話引數配置(普通字元竄,JSON字元竄,陣列竄)

經過分析系統功能模組設計如下圖2-1展示;

                                                  圖2-1 引數中心繫統功能模組圖

三、技術需求分析

  • 多系統多模式引數儲存
  • 支援安全驗證
  • 引數變更通知
  • 高可用
  • 低侵入

根據上述技術需求分析發現spring,zookeeper具備有這些特性,多系統多模式的引數儲存與zookeeper的目錄型儲存方式相似,檢視圖3-1;支援安全驗證與zookeeper的ACL安全配置吻合;引數變更通知與zookeeper的Watcher機制吻合;高可用與zookeeper叢集部署方式相吻合;低侵入與spring的設計原則相吻合,結合spring的BeanFactoryPostProcessor擴充套件點實現與${}類似的便捷引數配置。

圖3-1 基於zookeeper的引數儲存

 四、設計實現

技術組合:ZooKeeper叢集 + ZooKeeper Java客戶端 + Spring BeanFactoryPostProcessor擴充套件點 + JSON字元竄解析 + Spring SpEL表示式。

參考Spring的PropertyPlaceholderConfiguer實現與${}類似的配置方式zk{}配置,通過JSON解析提供多樣化的引數配置,結合ZooKeeper Watcher機制與SpEL實現引數的實時維護,通過ZooKeeper ACL控制引數安全性。

 五、使用方式

  六、說明

本人技術有限,上述有錯誤的理解歡迎指出,共同交流學習。