日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Nacos配置中心模塊詳解

本文轉(zhuǎn)載自微信公眾號「捉蟲大師」,作者捉蟲大師。轉(zhuǎn)載本文請聯(lián)系捉蟲大師公眾號。   

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供藤縣網(wǎng)站建設(shè)、藤縣做網(wǎng)站、藤縣網(wǎng)站設(shè)計、藤縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、藤縣企業(yè)網(wǎng)站模板建站服務(wù),十載藤縣做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

配置中心

業(yè)務(wù)上的配置,功能開關(guān),服務(wù)治理上對弱依賴的降級,甚至數(shù)據(jù)庫的密碼等,都可能用到動態(tài)配置中心。

在沒有專門的配置中心組件時,我們使用硬編碼、或配置文件、或數(shù)據(jù)庫、緩存等方式來解決問題。

硬編碼修改配置時需要重新編譯打包,配置文件需要重啟應(yīng)用,數(shù)據(jù)庫受限于性能,緩存喪失了及時性。

可能都不完美,但能從中總結(jié)出配置中心的需求,相對來說還是比較明確:

  • 能夠存儲、獲取并監(jiān)聽配置(必須)
  • 配置變更時能及時推送給監(jiān)聽者(必須)
  • 有一個可視化的查看變更配置的控制臺(必須)
  • 配置變更可灰度執(zhí)行(加分)
  • 配置變更可回滾(加分)

目前使用最多的配置中心可能是攜程開源的Apollo,還有Spring Cloud Config、阿里開源的Nacos、百度的Disconf等。

Nacos配置中心

Nacos是Naming and Configuration Service的縮寫,從名字上能看出它重點關(guān)注的兩個領(lǐng)域是Naming即注冊中心和Configuration配置中心。

本文講解nacos的配置中心的架構(gòu)設(shè)計和實現(xiàn)原理,基于2.0.0版本(注:2.0.0版本與1.x版本區(qū)別較大)

Nacos調(diào)試環(huán)境搭建

  • 先從github上clone代碼(網(wǎng)速比較慢,加上--depth=1參數(shù))
 
 
 
 
  1. git clone --depth=1 https://github.com/alibaba/nacos.git 
  • 導入IDE,看代碼,調(diào)試更方便
  • 啟動Server端:運行console模塊下的Nacos.main(),這個類掃描的路徑最廣,能啟動所有的模塊
    • JVM參數(shù)可帶上-Dnacos.standalone=true -Dnacos.functionMode=config,指定單機模式,且只啟動config模塊
    • --spring.config.additional-location=nacos/distribution/conf,程序參數(shù)指定配置文件目錄
    • 正常啟動,console打印出Ncos控制臺地址,進入Nacos控制臺,輸入用戶名密碼(默認均為nacos)即可登錄

使用client進行測試,example模塊下有configExample可進行config的測試,為了不動源代碼,可copy一份configExample進行修改測試

Nacos配置模型

namespace + group + dataId 唯一確定一個配置

  • namespace:與client綁定,一個clinet對應(yīng)到一個namespace,可用來隔離環(huán)境或區(qū)分租戶
  • group:分組,區(qū)分業(yè)務(wù)
  • dataId:配置的id

客戶端啟動流程

參數(shù)準備時,如果配置了nacos服務(wù)端地址,則直接使用;如果配置了endpoint,則從endpoint中獲取nacos服務(wù)端地址,這樣有個好處是服務(wù)端地址變更,擴縮容都無需重啟client,更詳細可參考https://nacos.io/en-us/blog/namespace-endpoint-best-practices.html

在客戶端第一次與服務(wù)端交互時創(chuàng)建GRPC連接,隨機挑選一臺server建立連接,后續(xù)都使用該連接,請求失敗都會有重試,針對請求級別也有限流;重試失敗或者服務(wù)端主動斷開連接,則會重新挑選一臺server進行建鏈

請求模型

從gRPC的proto文件能看出請求與返回的定義比較統(tǒng)一

 
 
 
 
  1. message Metadata { 
  2.   string type = 3; 
  3.   string clientIp = 8; 
  4.   map headers = 7; 
  5.  
  6. message Payload { 
  7.   Metadata metadata = 2; 
  8.   google.protobuf.Any body = 3; 
  9.  
  10. service Request { 
  11.   // Sends a commonRequest 
  12.   rpc request (Payload) returns (Payload) { 
  13.   } 
  • type是請求/返回類的類名
  • clientIp是客戶端ip
  • headers是攜帶的header信息
  • Playload中的body以json格式編碼

在com.alibaba.nacos.api.config.ConfigService中可以找到所有配置中心能使用的接口

重點關(guān)注這幾個接口:

  • getConfig:讀取配置
  • publishConfig:發(fā)布配置
  • publishConfigCas:原子的發(fā)布配置,若有被其他線程變更則發(fā)布失敗,類似java中的CAS
  • removeConfig:刪除配置
  • addListener:監(jiān)聽配置
  • removeListener:移除配置的監(jiān)聽

變更推送

采取推拉結(jié)合的方式,既保證時效性,又保證數(shù)據(jù)一致性

數(shù)據(jù)存儲

Nacos配置中心的數(shù)據(jù)存儲支持內(nèi)嵌的derby數(shù)據(jù)庫,也支持外部數(shù)據(jù)庫mysql,內(nèi)嵌數(shù)據(jù)庫主要是為了單機測試時使用。

其中上文提及的publishConfigCas的實現(xiàn)是利用了數(shù)據(jù)庫update ${table} set ${xx}=${zz} where md5=${old_md5}來實現(xiàn),如果已經(jīng)這條數(shù)據(jù)被變更,則這次publish會失敗。

灰度和回滾

當勾選灰度發(fā)布時可填寫灰度的ip進行推送,不在灰度列表內(nèi)的ip則不會接受到變更推送,并且灰度和正式是區(qū)分開的。

灰度的實現(xiàn)是記錄下了每次的發(fā)布,回滾到指定版本即可。

結(jié)語

本文從背景出發(fā),結(jié)合Nacos配置中心的各個重要模塊進行了一一解釋,能夠從整體上對Nacos的配置中心有一個把握。期望后續(xù)能對Nacos注冊中心進行分析介紹。


標題名稱:Nacos配置中心模塊詳解
分享路徑:http://www.dlmjj.cn/article/djipeep.html