在微服務(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)一對(duì)應(yīng)用中各個(gè)微服務(wù)進(jìn)行管理,對(duì)微服務(wù)體系的意義重大。
Consul為什么適合做配置管理
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來實(shí)時(shí)Watch K/V的變化,是配置管理的不二之選。
下圖為個(gè)推微服務(wù)體系基于Consul配置管理的整體設(shè)計(jì)。其中,CCenter就是在Consul的基礎(chǔ)上進(jìn)行二次開發(fā)的配置中心。
微服務(wù)體系下配置的分類和組織形式
在實(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)的配置,這類配置在開發(fā)測(cè)試生產(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)境差異部分即可。
基于以上對(duì)配置的分類,最終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,對(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)行管理。
如何實(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)。
以上關(guān)于consual做微服務(wù)的配置管理只是一種解決方案,有更好更具體的方案請(qǐng)大家留言,再次感謝!






