基于zookeeper实现系统配置中心
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
服務(wù)器端:
一、 寫(xiě)作目的
由于目前本公司產(chǎn)品眾多,并且由于業(yè)務(wù)上的需求增加,導(dǎo)致目前公司產(chǎn)品越來(lái)越復(fù)雜,各個(gè)業(yè)務(wù)系統(tǒng)的公共配置以及應(yīng)用自己的配置都存儲(chǔ)與各個(gè)屬性文件管理,給運(yùn)維人員帶來(lái)了極大的工作量。
二、服務(wù)端介紹
1.總體介紹
?sysware配置中心服務(wù)端,采用zookeeper用來(lái)存儲(chǔ)公共以及各業(yè)務(wù)系統(tǒng)的配置屬性。并且提供前端界面進(jìn)行維護(hù)這些屬性配置。采用mysql數(shù)據(jù)進(jìn)行數(shù)據(jù)的持久化。
?
2.各模塊介紹
? 1)? ? zookeeper
?對(duì)于系統(tǒng)中各配置的存儲(chǔ),目前規(guī)劃的存儲(chǔ)結(jié)構(gòu)如下:
| common | 公共配置 |
| p2m | p2m系統(tǒng)私有配置 |
| ke | ke系統(tǒng)私有配置 |
| eap | eap系統(tǒng)私有配置 |
| edm | edm系統(tǒng)私有配置 |
| key | 配置屬性鍵 |
| value | 配置屬性值 |
?
建議:為了能夠區(qū)分各個(gè)業(yè)務(wù)系統(tǒng)的配置,建議規(guī)則為使用:sysware? ?+? ?點(diǎn)? +? ?業(yè)務(wù)系統(tǒng)名稱? + 點(diǎn) +? 服務(wù)名稱 +? ?點(diǎn) +key
? ? ? ? ? 例如:在P2M系統(tǒng)中需要配置rabbitMQ的名稱,即可為:sysware.p2m.rabbitmq.username
? ? ? ? ? ? ? ? ? ? ?公共的配置即將有服務(wù)端portal錄入,規(guī)則為sysware.common開(kāi)頭的key
2)? ? DB
? ? ? 服務(wù)端數(shù)據(jù)庫(kù)采用的mysql數(shù)據(jù),主要用來(lái)防止zookeeper服務(wù)出現(xiàn)異常等不確定因素導(dǎo)致數(shù)據(jù)丟失,所以在mysql數(shù)據(jù)中也存儲(chǔ)了一份作為備份,以備恢復(fù)數(shù)據(jù)。
3)? ?服務(wù)端 portal
? ? ? ?方便運(yùn)維人員進(jìn)行zookeeper上數(shù)據(jù)的管理,提供了服務(wù)端portal界面操作。
4)? ? client
? ? ? ? 提供與各個(gè)業(yè)務(wù)系統(tǒng)的配置中心客戶端,以jar的形式提供,各業(yè)務(wù)系統(tǒng)可以獲取配置中心數(shù)據(jù)。
三、sysware配置中心服務(wù)端使用
服務(wù)端提供了portal對(duì)于zk數(shù)據(jù)進(jìn)行管理。
?1) 登錄
2)首頁(yè)
3)數(shù)據(jù)列表
4)新增數(shù)據(jù)
5)修改,刪除
客戶端:
一、客戶端介紹
?配置中心客戶端是服務(wù)于各個(gè)應(yīng)用系統(tǒng)從而操作配置中心的配置屬性。
客戶端整體模型:
實(shí)現(xiàn)邏輯:
1) 采取數(shù)據(jù)加載到內(nèi)存方式解決高效獲取的問(wèn)題,借助zookeeper的節(jié)點(diǎn)監(jiān)聽(tīng)機(jī)制來(lái)實(shí)現(xiàn)實(shí)時(shí)感知。
2)新增配置,獲取配置,修改配置,?刪除配置邏輯圖
3) 各個(gè)應(yīng)用系統(tǒng)? 獲取配置過(guò)程? 詳細(xì)業(yè)務(wù) 邏輯圖
?
二、客戶端使用
配置中心客戶端是以jar的形式提供于各個(gè)應(yīng)用系統(tǒng)。
準(zhǔn)備工作:
1)如果是非maven項(xiàng)目,需要將jar引入項(xiàng)目。
? ? ?sysware-config.client-1.0-SNAPSHOT.jar(這邊咋就限制文件大小9.77M呢,上傳不上去,jar 13M,需要jar直接聯(lián)系系統(tǒng)集成部楊曉輝)
2)?如果是maven項(xiàng)目,在pom中直接引入以下依賴,(目前還沒(méi)上傳到私服,后續(xù)完成)
<dependency>
<groupId>com.sysware</groupId>
<artifactId>sysware-config.client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3)需要在應(yīng)用系統(tǒng)的classpath目錄下添加config.properties文件,里面需要配置應(yīng)用系統(tǒng)的唯一標(biāo)識(shí)。
配置的key為:sysware.appid? ? value為系統(tǒng)的唯一標(biāo)識(shí)。
例如:sysware.appid=p2m
4)需要在在之前的sysware.properties文件中配置zk的ip
例如:sysware.zookeeper.ip=127.0.0.1:2181
使用方式:
配置中心客戶端對(duì)外提供了增刪改查接口,具體使用如下:
| String getValueByKey(String key) | String | 獲取屬性:根據(jù)鍵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.如果配置中心中獲取不到屬性,則使用應(yīng)用系統(tǒng)配置的屬性,并且需要將應(yīng)用系統(tǒng)該屬性配置項(xiàng)推送至配置中心
*/
SyswareConfigClient scc = SyswareConfigClient.newInstance();
//獲取DRIVER_CLASS_NAME
//方法說(shuō)明:獲取屬性value
String driverClassName = scc.getValueByKey(DBConfig.DRIVER_CLASS_NAME);
if(!SyswareUtil.isEmpty(driverClassName)){
props.setProperty(DBConfig.DRIVER_CLASS_NAME, driverClassName);
}else{
//方法說(shuō)明:addValue("sysId","屬性key","屬性value")
scc.addValue(DBConfig.DRIVER_CLASS_NAME, props.getProperty(DBConfig.DRIVER_CLASS_NAME));
}
三、配置規(guī)則
建議:為了能夠區(qū)分各個(gè)業(yè)務(wù)系統(tǒng)的配置,各個(gè)業(yè)務(wù)系統(tǒng)自己配置的屬性文件中,建議規(guī)則為使用:sysware? ?+? ?點(diǎn)? +? ?業(yè)務(wù)系統(tǒng)名稱? + 點(diǎn) +? 服務(wù)名稱 +? ?點(diǎn) +key
? ? ? ? ? 例如:在P2M系統(tǒng)中需要配置rabbitMQ的名稱,即可為:sysware.p2m.rabbitmq.username
? ? ? ? ? ? ? ? ? ? ?公共的配置即將有服務(wù)端portal錄入,規(guī)則為sysware.common開(kāi)頭的key, 例如:sysware.common.redis.ip
轉(zhuǎn)載于:https://my.oschina.net/u/3845850/blog/3001201
總結(jié)
以上是生活随笔為你收集整理的基于zookeeper实现系统配置中心的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Docker(二)安装及常用命令
- 下一篇: 美国通过热像无人机找到失踪老人