個(gè)推基于Consul的配置管理-創(chuàng)新互聯(lián)

作者:個(gè)推應(yīng)用平臺(tái)基礎(chǔ)架構(gòu)高級研發(fā)工程師 阿飛
在微服務(wù)架構(gòu)體系中,由于微服務(wù)眾多,服務(wù)之間又有互相調(diào)用關(guān)系,因此,一個(gè)通用的分布式配置管理是必不可少的。一般來說,配置管理需要解決配置集中管理、在系統(tǒng)運(yùn)行期間可實(shí)現(xiàn)動(dòng)態(tài)配置、配置修改后支持自動(dòng)刷新等問題。
在大多數(shù)微服務(wù)體系中,都會(huì)有一個(gè)名為配置文件的功能模塊來提供統(tǒng)一的分布式配置管理。構(gòu)建配置中心,統(tǒng)一對應(yīng)用中各個(gè)微服務(wù)進(jìn)行管理,對微服務(wù)體系的意義重大。

創(chuàng)新互聯(lián)建站長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為大同企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè),大同網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。Consul為什么適合做配置管理

Consul作為輕量級的分布式K/V存儲(chǔ)系統(tǒng),搭建方便,可用性高,并且支持多數(shù)據(jù)中心,提供Web UI進(jìn)行K/V管理。此外Consul還可以結(jié)合Consul-Template或者在代碼中引入Consul Client的相關(guān)依賴創(chuàng)建Watcher來實(shí)時(shí)Watch K/V的變化,是配置管理的不二之選。
個(gè)推基于Consul的配置管理
下圖為個(gè)推微服務(wù)體系基于Consul配置管理的整體設(shè)計(jì)。其中,CCenter就是在Consul的基礎(chǔ)上進(jìn)行二次開發(fā)的配置中心。
個(gè)推基于Consul的配置管理

微服務(wù)體系下配置的分類和組織形式

在實(shí)踐中,不同產(chǎn)品線的配置會(huì)放置在Consul的不同路徑下,實(shí)現(xiàn)不同產(chǎn)品線配置之間的隔離。

按照配置的用途,可將同一產(chǎn)品線下的配置分為三類:
1.API網(wǎng)關(guān)相關(guān)配置;
2.服務(wù)注冊與發(fā)現(xiàn)相關(guān)配置;
3.應(yīng)用相關(guān)配置。
其中,每類配置會(huì)對應(yīng)Consul上的不同目錄。

按照配置的變化特性,可將配置分為兩類:
1.環(huán)境相關(guān)的全局配置
如MySQL等外部依賴相關(guān)的配置和其他與環(huán)境相關(guān)的配置,這類配置在開發(fā)測試生產(chǎn)環(huán)境中存在差異,需要為不同環(huán)境配置不同的值。
2.應(yīng)用本身的配置
一般為不經(jīng)常性發(fā)生變化、可動(dòng)態(tài)調(diào)整、開關(guān)的配置。這類配置比較穩(wěn)定,在初始化后,只有在需要時(shí)才會(huì)改動(dòng),通常會(huì)設(shè)置默認(rèn)值。這兩類配置在Consul上會(huì)放在不同的子目錄下。這樣QA、運(yùn)維只需要關(guān)注環(huán)境差異部分即可。

基于以上對配置的分類,最終Consul上的Key的格式如下:

/ProductLine_Prefix/Usage_Prefix/Environmental_Correlation_Prefix/Config_Item_Path

其中,
ProductLine_Prefix:用來隔離不同產(chǎn)品線的配置;
Usage_Prefix:用來區(qū)分配置的用途;
Environmental_Correlation_Prefix:用來分隔與環(huán)境相關(guān)的配置;
Config_Item_Path:具體的配置項(xiàng)。

配置在Consul上的組織形式有以下兩種:

1.以配置文件的形式組織,Consul上的一個(gè)K/V,對應(yīng)一個(gè)配置文件,如nginx的配置文件。
2.以配置項(xiàng)的形式組織,將配置文件模板化,拆成一個(gè)個(gè)的配置項(xiàng),每個(gè)配置項(xiàng)對應(yīng)Consul上的一個(gè)K/V,多個(gè)配置項(xiàng)對應(yīng)一個(gè)配置文件。大部分配置文件本身都是以K/V的形式組織的,均適合模板化,模板化后即可以按照配置項(xiàng)的特性,在Consul上分成不同的類別進(jìn)行管理。

如何實(shí)現(xiàn)配置更新

Consul上的K/V,要如何生成可加載的應(yīng)用,或可使用的配置呢?
1.用Node和Lua實(shí)現(xiàn)的微服務(wù)的配置更新,使用Consul-Template來實(shí)現(xiàn);
2.用Java實(shí)現(xiàn)的微服務(wù)的配置更新,通過Consul-Template工具(需要重啟應(yīng)用)和在代碼中引入Consul Client的依賴創(chuàng)建Watcher(熱更新)這兩種方式來實(shí)現(xiàn)。

Consul-Template如何使用?

Consul-Template是一個(gè)后臺(tái)進(jìn)程,它可以根據(jù)Watch Consul上K/V的變化,更新任意數(shù)量的模板,同時(shí)生成對應(yīng)的文件,之后還可以運(yùn)行任意的命令。要使用Consul-Template一般需要定義兩個(gè)文件:
1.模板文件
模板文件一般按照Go Template的格式進(jìn)行編寫,示例如下:
config-tree.ctmpl:

{{ tree /consul/path/to/configFiles | explode | toJSONPretty }}

該模板在/consul/path/to/configFiles路徑下的配置發(fā)生變化時(shí),會(huì)渲染出一個(gè)Json格式的字符串,其中包含了/consul/path/to/configFiles下所有的K/V.
config-kv.ctmpl:

return {
   host='{{ printf "%s/mysql/host" (env "CONSUL_CONFIG_PREFIX") | key }}',
   port={{ keyOrDefault (printf "%s/mysql/port" (env "CON-SUL_CONFIG_PREFIX"))  "3306" }},
   user='{{ printf "%s/mysql/user" (env "CONSUL_CONFIG_PREFIX") | key }}',
   password='{{ printf "%s/mysql/password" (env "CON-SUL_CONFIG_PREFIX") | key }}'
}

該模板是按照配置項(xiàng)來渲染的,在該模板中使用了Consul-Template定義兩個(gè)方法key和keyOrDefault。其中,key會(huì)在Consul上對應(yīng)的K/V創(chuàng)建后,再進(jìn)行渲染模板;keyOrDefault則會(huì)在Consul上沒有對應(yīng)的K/V時(shí),使用默認(rèn)值代替。

模板中還使用了 " CONSUL_CONFIG_PREFIX " 這個(gè)環(huán)境變量,這樣,不同的產(chǎn)品線便可以使用同一個(gè)模板文件,只需要修改" CONSUL_CONFIG_PREFIX "這個(gè)環(huán)境變量的值即可。

2.配置文件
配置文件是按照HashiCorp Configuration Language (HCL)編寫的,示例如下:

template {
 source = "config-tree.ctmpl",
 destination = "config-tree.json",
 command  = "sh updateAndReload.sh config-tree.json”
}

template {
 source = "config-kv.ctmpl",
 destination = "config-kv.lua",
 command  = "sh updateAndReload.sh config-kv.lua”
}

該配置文件的作用是使用" source"指定的兩個(gè)模板文件進(jìn)行渲染,將渲染的結(jié)果分別保存在" destination"指定的文件中,保存成功后,分別運(yùn)行" command"指定的命令來更新并加載配置文件。

配置的更新方式

在個(gè)推的微服務(wù)體系中,配置的更新方式有兩種:

1.替換配置文件,reload服務(wù)
個(gè)推基于Consul的配置管理

2.調(diào)用服務(wù)接口直接更新內(nèi)存中的配置
而在Java實(shí)現(xiàn)的微服務(wù)中,熱更新配置通常是在代碼中引入Consul Client的依賴,在應(yīng)用啟動(dòng)時(shí),會(huì)初始化一個(gè)Watcher來監(jiān)聽Consul上對應(yīng)目錄下K/V的變化,相關(guān)的K/V發(fā)生變化時(shí),Watcher會(huì)負(fù)責(zé)將其拉取下來,然后調(diào)用相關(guān)的代碼進(jìn)行配置的更新。
個(gè)推基于Consul的配置管理

基于Consul的二次開發(fā)-CCenter

配置中心CCenter在Consul上提供了更友好的WEB UI,并且增加版本控制,每次配置的更新都會(huì)生成一個(gè)版本,在應(yīng)用版本后,配置才真正生效,可以更加方便地進(jìn)行配置版本間的差異比較,應(yīng)用任意版本的配置。
個(gè)推基于Consul的配置管理

總結(jié)

以上就是個(gè)推在微服務(wù)實(shí)踐中,基于Consul實(shí)現(xiàn)的一套配置管理的方案,作為輕量級的分布式K/V存儲(chǔ)系統(tǒng), Consul非常適合用于配置管理,可以幫助開發(fā)者們方便、快速地搭建配置中心,結(jié)合Consul-Template則可以方便地實(shí)現(xiàn)配置的實(shí)時(shí)更新,在Consul的基礎(chǔ)上進(jìn)行二次開發(fā),實(shí)現(xiàn)了配置版本的有效控制,對微服務(wù)的配置管理起到了良好的輔助作用。

網(wǎng)站題目:個(gè)推基于Consul的配置管理-創(chuàng)新互聯(lián)
文章位置:http://bm7419.com/article6/cechig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、微信小程序網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站用戶體驗(yàn)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)