成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Nacos配置中心模塊詳解

開發 前端
業務上的配置,功能開關,服務治理上對弱依賴的降級,甚至數據庫的密碼等,都可能用到動態配置中心。

[[404864]]

本文轉載自微信公眾號「捉蟲大師」,作者捉蟲大師。轉載本文請聯系捉蟲大師公眾號。   

配置中心

業務上的配置,功能開關,服務治理上對弱依賴的降級,甚至數據庫的密碼等,都可能用到動態配置中心。

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

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

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

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

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

Nacos配置中心

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

本文講解nacos的配置中心的架構設計和實現原理,基于2.0.0版本(注:2.0.0版本與1.x版本區別較大)

Nacos調試環境搭建

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

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

Nacos配置模型

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

  • namespace:與client綁定,一個clinet對應到一個namespace,可用來隔離環境或區分租戶
  • group:分組,區分業務
  • dataId:配置的id

客戶端啟動流程

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

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

請求模型

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

  1. message Metadata { 
  2.   string type = 3; 
  3.   string clientIp = 8; 
  4.   map<string, string> 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中可以找到所有配置中心能使用的接口

重點關注這幾個接口:

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

變更推送

采取推拉結合的方式,既保證時效性,又保證數據一致性

數據存儲

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

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

灰度和回滾

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

灰度的實現是記錄下了每次的發布,回滾到指定版本即可。

結語

 

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

 

責任編輯:武曉燕 來源: 捉蟲大師
相關推薦

2021-08-09 07:58:36

Nacos 服務注冊源碼分析

2022-06-13 09:58:06

NacosSpring

2024-12-10 08:27:28

2021-06-29 07:04:38

Nacos服務配置

2022-08-29 06:27:15

Nacos微服務

2022-08-30 22:12:19

Nacos組件服務注冊

2023-08-03 08:51:07

2021-08-02 07:35:19

Nacos配置中心namespace

2021-07-02 22:23:50

Nacos配置模型

2023-11-17 09:02:51

Nacos配置中心

2021-02-10 09:54:15

分布式NacosApollo

2023-03-01 08:15:10

NginxNacos

2021-08-04 11:54:25

Nacos注冊中心設計

2024-12-27 12:10:58

2023-10-30 09:35:01

注冊中心微服務

2024-07-26 10:35:00

2023-02-26 00:00:00

2022-06-15 16:35:02

配置共享Nacos

2021-03-15 06:24:22

Nacos集群搭建微服務

2024-04-10 12:22:19

DubboNacos微服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品久久久久久久久99蜜臂 | 精品欧美一区二区三区久久久 | 六月成人网| 色婷婷亚洲一区二区三区 | 999久久久久久久久6666 | 色男人的天堂 | 精品1区 | 午夜激情影院 | 中文字幕在线观看第一页 | 久久av资源网 | 欧美成人精品一区二区男人看 | 欧美13videosex性极品 | 成人av片在线观看 | 国产一区二区三区四区三区四 | 欧美精品国产精品 | 亚洲欧美激情国产综合久久久 | 自拍偷拍亚洲视频 | 91香蕉视频在线观看 | 成av在线| 日韩淫片免费看 | 日本不卡免费新一二三区 | 综合精品在线 | 国产精品免费一区二区三区四区 | 亚洲精品欧美精品 | 精久久久 | 欧美九九| 中文字幕亚洲视频 | 九九导航 | 99久久国产综合精品麻豆 | 日韩精品在线一区二区 | 老司机免费视频 | 亚洲天堂男人的天堂 | 久久久久久99 | 男女羞羞视频在线观看 | 欧美一区二区精品 | 欧美久久久久久久久 | 亚洲欧美一区二区在线观看 | 久久这里有精品 | 在线精品一区二区三区 | 久草青青| 女同av亚洲女人天堂 |