作者:個(gè)推應(yīng)用平臺(tái)基礎(chǔ)架構(gòu)高級(jí)研發(fā)工程師 阿飛
在微服務(wù)架構(gòu)體系中,由于微服務(wù)眾多,服務(wù)之間又有互相調(diào)用關(guān)系,因此,一個(gè)通用的分布式配置管理是必不可少的。一般來(lái)說(shuō),配置管理需要解決配置集中管理、在系統(tǒng)運(yùn)行期間可實(shí)現(xiàn)動(dòng)態(tài)配置、配置修改后支持自動(dòng)刷新等問(wèn)題。
在大多數(shù)微服務(wù)體系中,都會(huì)有一個(gè)名為配置文件的功能模塊來(lái)提供統(tǒng)一的分布式配置管理。構(gòu)建配置中心,統(tǒng)一對(duì)應(yīng)用中各個(gè)微服務(wù)進(jìn)行管理,對(duì)微服務(wù)體系的意義重大。
Consul作為輕量級(jí)的分布式K/V存儲(chǔ)系統(tǒng),搭建方便,可用性高,并且支持多數(shù)據(jù)中心,提供Web UI進(jìn)行K/V管理。此外Consul還可以結(jié)合Consul-Template或者在代碼中引入Consul Client的相關(guān)依賴創(chuàng)建Watcher來(lái)實(shí)時(shí)Watch K/V的變化,是配置管理的不二之選。
下圖為個(gè)推微服務(wù)體系基于Consul配置管理的整體設(shè)計(jì)。其中,CCenter就是在Consul的基礎(chǔ)上進(jìn)行二次開(kāi)發(fā)的配置中心。
在實(shí)踐中,不同產(chǎn)品線的配置會(huì)放置在Consul的不同路徑下,實(shí)現(xiàn)不同產(chǎn)品線配置之間的隔離。
按照配置的用途,可將同一產(chǎn)品線下的配置分為三類:
1.API網(wǎng)關(guān)相關(guān)配置;
2.服務(wù)注冊(cè)與發(fā)現(xiàn)相關(guān)配置;
3.應(yīng)用相關(guān)配置。
其中,每類配置會(huì)對(duì)應(yīng)Consul上的不同目錄。
按照配置的變化特性,可將配置分為兩類:
1.環(huán)境相關(guān)的全局配置
如MySQL等外部依賴相關(guān)的配置和其他與環(huán)境相關(guān)的配置,這類配置在開(kāi)發(fā)測(cè)試生產(chǎn)環(huán)境中存在差異,需要為不同環(huán)境配置不同的值。
2.應(yīng)用本身的配置
一般為不經(jīng)常性發(fā)生變化、可動(dòng)態(tài)調(diào)整、開(kāi)關(guān)的配置。這類配置比較穩(wěn)定,在初始化后,只有在需要時(shí)才會(huì)改動(dòng),通常會(huì)設(shè)置默認(rèn)值。這兩類配置在Consul上會(huì)放在不同的子目錄下。這樣QA、運(yùn)維只需要關(guān)注環(huán)境差異部分即可。
基于以上對(duì)配置的分類,最終Consul上的Key的格式如下:
/ProductLine_Prefix/Usage_Prefix/Environmental_Correlation_Prefix/Config_Item_Path
其中,
ProductLine_Prefix:用來(lái)隔離不同產(chǎn)品線的配置;
Usage_Prefix:用來(lái)區(qū)分配置的用途;
Environmental_Correlation_Prefix:用來(lái)分隔與環(huán)境相關(guān)的配置;
Config_Item_Path:具體的配置項(xiàng)。
1.以配置文件的形式組織,Consul上的一個(gè)K/V,對(duì)應(yīng)一個(gè)配置文件,如nginx的配置文件。
2.以配置項(xiàng)的形式組織,將配置文件模板化,拆成一個(gè)個(gè)的配置項(xiàng),每個(gè)配置項(xiàng)對(duì)應(yīng)Consul上的一個(gè)K/V,多個(gè)配置項(xiàng)對(duì)應(yīng)一個(gè)配置文件。大部分配置文件本身都是以K/V的形式組織的,均適合模板化,模板化后即可以按照配置項(xiàng)的特性,在Consul上分成不同的類別進(jìn)行管理。
Consul上的K/V,要如何生成可加載的應(yīng)用,或可使用的配置呢?
1.用Node和Lua實(shí)現(xiàn)的微服務(wù)的配置更新,使用Consul-Template來(lái)實(shí)現(xiàn);
2.用Java實(shí)現(xiàn)的微服務(wù)的配置更新,通過(guò)Consul-Template工具(需要重啟應(yīng)用)和在代碼中引入Consul Client的依賴創(chuàng)建Watcher(熱更新)這兩種方式來(lái)實(shí)現(xiàn)。
Consul-Template是一個(gè)后臺(tái)進(jìn)程,它可以根據(jù)Watch Consul上K/V的變化,更新任意數(shù)量的模板,同時(shí)生成對(duì)應(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)來(lái)渲染的,在該模板中使用了Consul-Template定義兩個(gè)方法key和keyOrDefault。其中,key會(huì)在Consul上對(duì)應(yīng)的K/V創(chuàng)建后,再進(jìn)行渲染模板;keyOrDefault則會(huì)在Consul上沒(méi)有對(duì)應(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"指定的命令來(lái)更新并加載配置文件。
配置的更新方式在個(gè)推的微服務(wù)體系中,配置的更新方式有兩種:
1.替換配置文件,reload服務(wù)
2.調(diào)用服務(wù)接口直接更新內(nèi)存中的配置
而在Java實(shí)現(xiàn)的微服務(wù)中,熱更新配置通常是在代碼中引入Consul Client的依賴,在應(yīng)用啟動(dòng)時(shí),會(huì)初始化一個(gè)Watcher來(lái)監(jiān)聽(tīng)Consul上對(duì)應(yīng)目錄下K/V的變化,相關(guān)的K/V發(fā)生變化時(shí),Watcher會(huì)負(fù)責(zé)將其拉取下來(lái),然后調(diào)用相關(guān)的代碼進(jìn)行配置的更新。
配置中心CCenter在Consul上提供了更友好的WEB UI,并且增加版本控制,每次配置的更新都會(huì)生成一個(gè)版本,在應(yīng)用版本后,配置才真正生效,可以更加方便地進(jìn)行配置版本間的差異比較,應(yīng)用任意版本的配置。
以上就是個(gè)推在微服務(wù)實(shí)踐中,基于Consul實(shí)現(xiàn)的一套配置管理的方案,作為輕量級(jí)的分布式K/V存儲(chǔ)系統(tǒng), Consul非常適合用于配置管理,可以幫助開(kāi)發(fā)者們方便、快速地搭建配置中心,結(jié)合Consul-Template則可以方便地實(shí)現(xiàn)配置的實(shí)時(shí)更新,在Consul的基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)了配置版本的有效控制,對(duì)微服務(wù)的配置管理起到了良好的輔助作用。
網(wǎng)站題目:個(gè)推基于Consul的配置管理-創(chuàng)新互聯(lián)
文章位置:http://muchs.cn/article6/cechig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、微信小程序、網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站、用戶體驗(yàn)、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)