Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper實現參數的集中式管理「面試+工作」

面試

前言

應用項目中都會有一些參數,一般的做法通常可以選擇將其存儲在本地配置文件或者內存變量中;對於集群機器規模不大、配置變更不是特別頻繁的情況下,這兩種方式都能很好的解決;但是一旦集群機器規模變大,且配置信息越來越頻繁,依靠這兩種方式就越來越困難;我們希望能夠快速的做到全局參數的變更,因此需要一種參數的集中式管理,下面利用Zookeeper的一些特性來實現簡單的參數管理。

準備

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

Maven引入

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

目標

1.可以同時配置監聽多個節點如/app1,/app2;

2.希望只需要配置如/app1,就能夠監聽其子節點如/app1/modual1以及子節點的子節點如/app1/modual1/xxx/…;

3.服務器啟動能獲取當前指定父節點下的所有子節點數據;

4.在添加節點或者在更新節點數據的時候能夠動態通知,這樣代碼中就能夠實時獲取最新的數據;

5.spring配置中可以從Zookeeper中讀取參數進行初始化。

實現

提供ZKWatcher類主要用來和Zookeeper建立連接,監聽節點,初始化節點數據,更新節點數據,存儲節點數據等

1.同時配置監聽多個節點

提供一個字符串數組給用戶用來添加需要監聽的節點:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

2.能夠監聽其子節點以及子節點的子節點

使用遞歸的方式用來獲取指定監聽節點的子節點:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

3.服務器啟動初始化節點數據

上面已經遞歸獲取了所有的節點,所有可以遍歷獲取所有節點數據,並且存儲在Map中:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

4.監聽節點數據的變更

使用PathChildrenCache用來監聽子節點的CHILD_ADDED,CHILD_UPDATED,CHILD_REMOVED事件:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

5.spring配置中可以從Zookeeper中讀取參數進行初始化

實現自定義的PropertyPlaceholderConfigurer類ZKPropPlaceholderConfigurer:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

通過以上的處理,可以使用如下簡單的配置來達到目標:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

詳細代碼svn地址:http://code.taobao.org/svn/temp-pj/DynamicConf

測試

1.首先啟動Zookeeper

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

2.初始化需要使用的節點

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

創建需要的節點方便ZKWatcher來監聽,這裡根據以上的配置,分別初始化/a3/m1/v2/t2和/a2/m1/v1/t1

3.啟動Main,分別驗證配置文件中的初始化以及代碼動態獲取參數

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

4.觀察日誌同時更新參數:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

部分日誌如下:

Zookeeper實現參數的集中式管理「面試+工作」

Zookeeper

總結

通過Zookeeper實現了一個簡單的參數化平臺,當然想在生產中使用還有很多需要優化的地方,本文在於提供一個思路;當然除了Zookeeper還可以使用MQ,分佈式緩存等來實現參數化平臺。加Java架構師進階交流群獲取Java工程化、高性能及分佈式、高性能、深入淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的直播免費學習權限 都是大牛帶飛 讓你少走很多的彎路的 群號是:883922439 對了 小白勿進 最好是有開發經驗

注:加群要求

1、具有工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5.阿里Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!


分享到:


相關文章: