基於zookeeper實現系統配置中心

服務器端:前端

1、 寫做目的

因爲目前本公司產品衆多,而且因爲業務上的需求增長,致使目前公司產品愈來愈複雜,各個業務系統的公共配置以及應用本身的配置都存儲與各個屬性文件管理,給運維人員帶來了極大的工做量。mysql

2、服務端介紹

1.整體介紹

 sysware配置中心服務端,採用zookeeper用來存儲公共以及各業務系統的配置屬性。而且提供前端界面進行維護這些屬性配置。採用mysql數據進行數據的持久化。redis

 

2.各模塊介紹

  1)    zookeepersql

 對於系統中各配置的存儲,目前規劃的存儲結構以下:數據庫

節點說明服務器

描述app

common 公共配置
p2m p2m系統私有配置
ke ke系統私有配置
eap eap系統私有配置
edm edm系統私有配置

節點說明運維

描述maven

key 配置屬性鍵
value 配置屬性值

 

建議:爲了可以區分各個業務系統的配置,建議規則爲使用:sysware   +   點  +   業務系統名稱  + 點 +  服務名稱 +   點 +keyspa

          例如:在P2M系統中須要配置rabbitMQ的名稱,便可爲:sysware.p2m.rabbitmq.username

                     公共的配置即將有服務端portal錄入,規則爲sysware.common開頭的key

2)    DB

      服務端數據庫採用的mysql數據,主要用來防止zookeeper服務出現異常等不肯定因素致使數據丟失,因此在mysql數據中也存儲了一份做爲備份,以備恢復數據。

3)   服務端 portal

       方便運維人員進行zookeeper上數據的管理,提供了服務端portal界面操做。

4)    client

        提供與各個業務系統的配置中心客戶端,以jar的形式提供,各業務系統能夠獲取配置中心數據。

3、sysware配置中心服務端使用

服務端提供了portal對於zk數據進行管理。

 1) 登陸

2)首頁

3)數據列表

4)新增數據

5)修改,刪除

客戶端:

1、客戶端介紹

 配置中心客戶端是服務於各個應用系統從而操做配置中心的配置屬性。

客戶端總體模型:

實現邏輯:

1) 採起數據加載到內存方式解決高效獲取的問題,藉助zookeeper的節點監聽機制來實現實時感知。

2)新增配置,獲取配置,修改配置, 刪除配置邏輯圖

3) 各個應用系統  獲取配置過程  詳細業務 邏輯圖

 

2、客戶端使用

配置中心客戶端是以jar的形式提供於各個應用系統。

準備工做

1)若是是非maven項目,須要將jar引入項目。

     sysware-config.client-1.0-SNAPSHOT.jar(這邊咋就限制文件大小9.77M呢,上傳不上去,jar 13M,須要jar直接聯繫系統集成部楊曉輝)

2) 若是是maven項目,在pom中直接引入如下依賴,(目前還沒上傳到私服,後續完成)

<dependency>
<groupId>com.sysware</groupId>
<artifactId>sysware-config.client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

3)須要在應用系統的classpath目錄下添加config.properties文件,裏面須要配置應用系統的惟一標識。

配置的key爲:sysware.appid    value爲系統的惟一標識。

例如:sysware.appid=p2m

4)須要在在以前的sysware.properties文件中配置zk的ip

例如:sysware.zookeeper.ip=127.0.0.1:2181

使用方式:

配置中心客戶端對外提供了增刪改查接口,具體使用以下:

接口名稱

返回值

接口描述

接口名稱

返回值

接口描述

String getValueByKey(String key)
String 獲取屬性:根據鍵key獲取值value;
void addValue(String key, String value)
void 新增屬性:key爲配置的鍵,value爲配置的值
void updateValueByKey(String key, String value)
void 修改屬性:key爲配置的鍵,value爲配置的值
void deleteValueByKey(String key)
void 刪除屬性:key爲配置的鍵

具體使用demo:

/*
* 從配置中心客戶端獲取屬性信息
* 1.若是從配置中心獲取屬性不爲空,則使用配置中心配置屬性。
* 2.若是配置中心中獲取不到屬性,則使用應用系統配置的屬性,而且須要將應用系統該屬性配置項推送至配置中心
*/
SyswareConfigClient scc = SyswareConfigClient.newInstance();
//獲取DRIVER_CLASS_NAME
//方法說明:獲取屬性value
String driverClassName = scc.getValueByKey(DBConfig.DRIVER_CLASS_NAME);
if(!SyswareUtil.isEmpty(driverClassName)){
props.setProperty(DBConfig.DRIVER_CLASS_NAME, driverClassName);
}else{
//方法說明:addValue("sysId","屬性key","屬性value")
scc.addValue(DBConfig.DRIVER_CLASS_NAME, props.getProperty(DBConfig.DRIVER_CLASS_NAME));
}

3、配置規則

建議:爲了可以區分各個業務系統的配置,各個業務系統本身配置的屬性文件中,建議規則爲使用:sysware   +   點  +   業務系統名稱  + 點 +  服務名稱 +   點 +key

          例如:在P2M系統中須要配置rabbitMQ的名稱,便可爲:sysware.p2m.rabbitmq.username

                     公共的配置即將有服務端portal錄入,規則爲sysware.common開頭的key, 例如:sysware.common.redis.ip

相關文章
相關標籤/搜索