Nacos 如何實現(xiàn)按實例分批發(fā)布

前言

生產環(huán)境需要使用 K8S 部署方式,并且依賴于 Nacos 發(fā)布云配置酬蹋,但是需要支持按 Pod 分批發(fā)布身笤。目前 Nacos 僅支持兩段式發(fā)布,先發(fā)一部分試點斤彼,剩下的需要全部發(fā)布或者試點的全部回滾分瘦,不滿足于需求,需基于 Nacos 基礎上進行處理琉苇。Nacos 官方對于發(fā)布 Beta 功能的介紹:https://nacos.io/en-us/blog/nacos%201.1.0.html

原功能介紹(基于1.3.0版本)

Nacos 發(fā)布 Beta 功能從下圖來看嘲玫,發(fā)布了 Beta 之后,就無法再修改內容和 Beta 發(fā)布的 IP并扇,只能操作停止 Beta 和發(fā)布兩個按鈕去团,但是我們也可以通過 API 直接調用去更新betaIps參數(shù)

Nacos 配置.png

入口為com.alibaba.nacos.config.server.controller.ConfigController#publishConfig,從下圖可以看出,如果傳了betaIps土陪,調用該方法persistService.insertOrUpdateBeta

源碼.png

該方法具體實現(xiàn)如下


源碼.png

在這里我們關注的是updateConfigInfo4Beta方法具體實現(xiàn)

源碼.png

從實現(xiàn)可看出昼汗,并沒有將betaIps字段進行更新,所以betaIps字段創(chuàng)建了之后就無法再更新了

并且鬼雀,從updateConfigInfo4Beta實現(xiàn)中可以看出顷窒,操作完數(shù)據(jù)后,還會發(fā)出一個事件源哩,該事件會將匹配的dataId調用/nacos/v1/cs/communication/dataChange接口蹋肮,由dataChange接口通知具體匹配的監(jiān)聽該dataId客戶端

源碼.png

postman.png

communication/dataChange接口具體實現(xiàn)如下

源碼.png

dumpService.dump中會執(zhí)行DumpTask#process方法

源碼.png

該方法會從數(shù)據(jù)庫config_info_beat查詢數(shù)據(jù)再調用DumpConfigHandler.configDump,從上圖可以看出build.remove中的參數(shù)如果為 null璧疗,那么event.isRemove就為 true坯辩,但是我們需要更新的必定不會為 null,所以執(zhí)行的是 else 中的邏輯

源碼.png

ConfigCacheService.dumpBeta具體實現(xiàn)崩侠,拿從數(shù)據(jù)庫獲取的配置內容進行 MD5 處理漆魔,再進行updateBetaMd5

源碼.png

updateBetaMd5具體實現(xiàn),獲取內存 MD5 和新生成的 MD5 進行比較却音,如果有變化才會觸發(fā)LocalDataChangeEvent事件

源碼.png

LocalDataChangeEvent事件具體在LongPollingService#onEvent方法中執(zhí)行改抡,通過DataChangeTask進行通知客戶端內容變更

源碼.png

結論

那么如何才能更新betaIps字段?由于接口無法對betaIps字段進行更新系瓢,那我們是否可以直接操作數(shù)據(jù)庫阿纤?從源碼來看,是由communication/dataChange接口去通知客戶端配置內容變更

我們通過實踐發(fā)現(xiàn)夷陋,直接修改config_info_beta表中的betaipscontent字段欠拾,再調用communication/dataChange接口,由于updateBetaMd5方法中判斷 MD5 是否有變化骗绕,有變化的情況下才會觸發(fā)LocalDataChangeEvent事件藐窄,才會通知到客戶端

  • 已驗證過在1.3.0版本和2.0.1版本都有效,雖然大版本差異源碼有所不同酬土,但是大邏輯沒變
  • 調用communication/dataChange接口時荆忍,如果 Nacos 有多個節(jié)點,則需要每個節(jié)點調用一次communication/dataChange接口撤缴,但調用時需每個節(jié)點間間隔一下刹枉,避免同一個客戶端注冊到多個 Nacos 節(jié)點上時,同時通知更新配置導致客戶端出現(xiàn)異常
  • 若需要在已添加的betaips中修改IP屈呕,只變更注釋內容是不生效的微宝,需要變更配置內容
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凉袱,隨后出現(xiàn)的幾起案子芥吟,更是在濱河造成了極大的恐慌侦铜,老刑警劉巖专甩,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钟鸵,死亡現(xiàn)場離奇詭異,居然都是意外死亡涤躲,警方通過查閱死者的電腦和手機棺耍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來种樱,“玉大人蒙袍,你說我怎么就攤上這事∧奂罚” “怎么了害幅?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岂昭。 經常有香客問我以现,道長,這世上最難降的妖魔是什么约啊? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任邑遏,我火速辦了婚禮,結果婚禮上恰矩,老公的妹妹穿的比我還像新娘记盒。我一直安慰自己,他們只是感情好外傅,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布纪吮。 她就那樣靜靜地躺著,像睡著了一般萎胰。 火紅的嫁衣襯著肌膚如雪彬碱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天奥洼,我揣著相機與錄音巷疼,去河邊找鬼。 笑死灵奖,一個胖子當著我的面吹牛嚼沿,可吹牛的內容都是我干的。 我是一名探鬼主播瓷患,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骡尽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了擅编?” 一聲冷哼從身側響起攀细,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤箫踩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谭贪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體境钟,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年俭识,在試婚紗的時候發(fā)現(xiàn)自己被綠了慨削。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡套媚,死狀恐怖缚态,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情堤瘤,我是刑警寧澤玫芦,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站本辐,受9級特大地震影響桥帆,放射性物質發(fā)生泄漏。R本人自食惡果不足惜师郑,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一环葵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宝冕,春花似錦张遭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宝剖,卻和暖如春洁闰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背万细。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工扑眉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赖钞。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓腰素,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雪营。 傳聞我的和親對象是個殘疾皇子弓千,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容