掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本文轉(zhuǎn)載自微信公眾號(hào)「捉蟲(chóng)大師」,作者捉蟲(chóng)大師。轉(zhuǎn)載本文請(qǐng)聯(lián)系捉蟲(chóng)大師公眾號(hào)。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供藤縣網(wǎng)站建設(shè)、藤縣做網(wǎng)站、藤縣網(wǎng)站設(shè)計(jì)、藤縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、藤縣企業(yè)網(wǎng)站模板建站服務(wù),十載藤縣做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
業(yè)務(wù)上的配置,功能開(kāi)關(guān),服務(wù)治理上對(duì)弱依賴的降級(jí),甚至數(shù)據(jù)庫(kù)的密碼等,都可能用到動(dòng)態(tài)配置中心。
在沒(méi)有專門的配置中心組件時(shí),我們使用硬編碼、或配置文件、或數(shù)據(jù)庫(kù)、緩存等方式來(lái)解決問(wèn)題。
硬編碼修改配置時(shí)需要重新編譯打包,配置文件需要重啟應(yīng)用,數(shù)據(jù)庫(kù)受限于性能,緩存喪失了及時(shí)性。
可能都不完美,但能從中總結(jié)出配置中心的需求,相對(duì)來(lái)說(shuō)還是比較明確:
目前使用最多的配置中心可能是攜程開(kāi)源的Apollo,還有Spring Cloud Config、阿里開(kāi)源的Nacos、百度的Disconf等。
Nacos是Naming and Configuration Service的縮寫,從名字上能看出它重點(diǎn)關(guān)注的兩個(gè)領(lǐng)域是Naming即注冊(cè)中心和Configuration配置中心。
本文講解nacos的配置中心的架構(gòu)設(shè)計(jì)和實(shí)現(xiàn)原理,基于2.0.0版本(注:2.0.0版本與1.x版本區(qū)別較大)
- git clone --depth=1 https://github.com/alibaba/nacos.git
使用client進(jìn)行測(cè)試,example模塊下有configExample可進(jìn)行config的測(cè)試,為了不動(dòng)源代碼,可copy一份configExample進(jìn)行修改測(cè)試
namespace + group + dataId 唯一確定一個(gè)配置
參數(shù)準(zhǔn)備時(shí),如果配置了nacos服務(wù)端地址,則直接使用;如果配置了endpoint,則從endpoint中獲取nacos服務(wù)端地址,這樣有個(gè)好處是服務(wù)端地址變更,擴(kuò)縮容都無(wú)需重啟client,更詳細(xì)可參考https://nacos.io/en-us/blog/namespace-endpoint-best-practices.html
在客戶端第一次與服務(wù)端交互時(shí)創(chuàng)建GRPC連接,隨機(jī)挑選一臺(tái)server建立連接,后續(xù)都使用該連接,請(qǐng)求失敗都會(huì)有重試,針對(duì)請(qǐng)求級(jí)別也有限流;重試失敗或者服務(wù)端主動(dòng)斷開(kāi)連接,則會(huì)重新挑選一臺(tái)server進(jìn)行建鏈
從gRPC的proto文件能看出請(qǐng)求與返回的定義比較統(tǒng)一
- message Metadata {
- string type = 3;
- string clientIp = 8;
- map
headers = 7; - }
- message Payload {
- Metadata metadata = 2;
- google.protobuf.Any body = 3;
- }
- service Request {
- // Sends a commonRequest
- rpc request (Payload) returns (Payload) {
- }
- }
在com.alibaba.nacos.api.config.ConfigService中可以找到所有配置中心能使用的接口
重點(diǎn)關(guān)注這幾個(gè)接口:
采取推拉結(jié)合的方式,既保證時(shí)效性,又保證數(shù)據(jù)一致性
Nacos配置中心的數(shù)據(jù)存儲(chǔ)支持內(nèi)嵌的derby數(shù)據(jù)庫(kù),也支持外部數(shù)據(jù)庫(kù)mysql,內(nèi)嵌數(shù)據(jù)庫(kù)主要是為了單機(jī)測(cè)試時(shí)使用。
其中上文提及的publishConfigCas的實(shí)現(xiàn)是利用了數(shù)據(jù)庫(kù)update ${table} set ${xx}=${zz} where md5=${old_md5}來(lái)實(shí)現(xiàn),如果已經(jīng)這條數(shù)據(jù)被變更,則這次publish會(huì)失敗。
當(dāng)勾選灰度發(fā)布時(shí)可填寫灰度的ip進(jìn)行推送,不在灰度列表內(nèi)的ip則不會(huì)接受到變更推送,并且灰度和正式是區(qū)分開(kāi)的。
灰度的實(shí)現(xiàn)是記錄下了每次的發(fā)布,回滾到指定版本即可。
本文從背景出發(fā),結(jié)合Nacos配置中心的各個(gè)重要模塊進(jìn)行了一一解釋,能夠從整體上對(duì)Nacos的配置中心有一個(gè)把握。期望后續(xù)能對(duì)Nacos注冊(cè)中心進(jìn)行分析介紹。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流