我在組內(nèi)的Nacos分享

本文已收錄 https://github.com/lkxiaolou/lkxiaolou 歡迎star峦阁。

Nacos簡(jiǎn)介

Nacos : Naming and Configuration Service晴埂,可打包部署配置中心和注冊(cè)中心茂洒,也可獨(dú)立部署其中之一胖缤,配置中心十电、控制臺(tái)依賴(lài)mysql赛糟,由阿里巴巴2018年8月開(kāi)源淤刃,github 19.1k star(截止2021.08.24)

本文只講解服務(wù)發(fā)現(xiàn)部分睁搭。

服務(wù)注冊(cè)發(fā)現(xiàn)模型

  • namespace:環(huán)境隔離赶诊、租戶(hù)隔離笼平;不同namespace服務(wù)無(wú)法相互發(fā)現(xiàn)
  • group:業(yè)務(wù)隔離;解決不同業(yè)務(wù)下serviceName相同的問(wèn)題舔痪;可獲取默認(rèn)或指定group實(shí)例
  • cluster:集群隔離寓调;可定制化路由偏好;可獲取全部或指定集群實(shí)例

臨時(shí)實(shí)例

  • 臨時(shí)實(shí)例:靠client的心跳或連接背耄活夺英,當(dāng)不存活時(shí),直接下線(xiàn)實(shí)例滋捶;適用于主動(dòng)注冊(cè)的服務(wù)痛悯,特別適合K8S下ip漂移的場(chǎng)景

  • 永久實(shí)例:注冊(cè)后不用保活重窟,靠服務(wù)端健康檢查來(lái)判斷實(shí)例是否健康载萌,不健康實(shí)例也不用下線(xiàn);適用于ip不常變化的場(chǎng)景

在Nacos中他們的主要區(qū)別如下:

emphemral true false
名稱(chēng) 臨時(shí)實(shí)例 永久實(shí)例
CAP AP CP
一致性協(xié)議 distro raft
是否持久化
健康檢查方式 心跳/連接 服務(wù)端檢查(TCP亲族、HTTP炒考、MYSQL)

Dubbo適配

  • 使用臨時(shí)實(shí)例
  • 應(yīng)用級(jí):serviceName為應(yīng)用名即可
  • 服務(wù)級(jí)(Dubbo):以provider/consumer:$[service_name]:${version}:${group}為服務(wù)名

路由模式

客戶(hù)端路由模式

客戶(hù)端(SDK)根據(jù)service,指定部分或全部group霎迫、cluster獲取相應(yīng)的實(shí)例斋枢,客戶(hù)端根據(jù)權(quán)重或其他策略進(jìn)行路由

服務(wù)端路由模式

插件式selector實(shí)現(xiàn)自定義路由模式,可對(duì)接第三方CMDB

  1. 與CMDB對(duì)接知给,根據(jù)service瓤帚、ip等信息獲取元數(shù)據(jù)(如機(jī)房位置)

  2. 自定義實(shí)現(xiàn)選擇器selector,根據(jù)手動(dòng)配置規(guī)則表達(dá)式選取相應(yīng)實(shí)例

架構(gòu)設(shè)計(jì)

存儲(chǔ)模型

全量數(shù)據(jù)位于內(nèi)存中涩赢,每個(gè)節(jié)點(diǎn)數(shù)據(jù)保持一致戈次,節(jié)點(diǎn)間采取同步協(xié)議進(jìn)行復(fù)制

數(shù)據(jù)結(jié)構(gòu)

一個(gè)客戶(hù)端連接為一個(gè)client,打包客戶(hù)端的信息與注冊(cè)筒扒、訂閱數(shù)據(jù)

  • 注冊(cè)
    • publisherIndexes => 哪些客戶(hù)端注冊(cè)了哪些服務(wù)
      • serviceName
        • clientid
        • clientid
      • serviceName
        • ...
  • 訂閱
    • subscriberIndexes => 哪些客戶(hù)端訂閱了哪些服務(wù)
      • serviceName
        • clientid
        • clientid
      • serviceName
        • ...

同步協(xié)議

distro

  • 客戶(hù)端心跳/連接鼻有埃活,重連時(shí)有恢復(fù)(注冊(cè)花墩、訂閱)機(jī)制
  • 數(shù)據(jù)同步為異步

raft

  • 半數(shù)以上節(jié)點(diǎn)同步成功才返回給客戶(hù)端

通信協(xié)議

功能/版本 1.x distro 1.x raft 2.x distro 2.x raft
注冊(cè)/注銷(xiāo) http http grpc http
訂閱 http http grpc grpc
心跳/健康檢查 http TCP/http/mysql TCP TCP/http/mysql
推送 udp udp grpc grpc
集群間數(shù)據(jù)同步 http/distro http/自研raft grpc/distro jraft

生態(tài)建設(shè)

  • 客戶(hù)端
    • Java
    • golang
    • Python
    • C#
    • Nodejs
    • C++
  • 插件
    • Dubbo-registry-nacos
    • Rpc-java-registry-nacos
    • Nacos-spring-starter
    • Nacos-sync
    • Nacos-k8s-sync
    • Nacos-client-mse-extension
    • Nacos-coredns-plugin
    • Nacos-istio

Nacos-sync

主要用于注冊(cè)中心遷移以及多數(shù)據(jù)中心數(shù)據(jù)同步

Nacos-coredns-plugin

consumer側(cè)可使用域名方式發(fā)現(xiàn)服務(wù)悬秉,無(wú)需使用Nacos客戶(hù)端


Nacos-istio

支持Nacos數(shù)據(jù)同步至MCP Server


優(yōu)缺點(diǎn)分析

  • 優(yōu)點(diǎn):
    • AP模式,擴(kuò)展性冰蘑、多數(shù)據(jù)中心支持友好
    • 服務(wù)發(fā)現(xiàn)模型設(shè)計(jì)支持邏輯上namespace和泌、group、cluster等的隔離
    • 健康檢查模式支持較多
    • 支持臨時(shí)實(shí)例與持久化實(shí)例祠肥,滿(mǎn)足不同場(chǎng)景
    • 功能多武氓,生態(tài)豐富,支持多語(yǔ)言SDK
    • 2.x版本grpc長(zhǎng)連接性能強(qiáng)
    • 單一進(jìn)程,部署簡(jiǎn)單县恕,且附帶開(kāi)箱即用的控制臺(tái)
    • 基本無(wú)依賴(lài)(除控制臺(tái)依賴(lài)mysql东羹,注冊(cè)中心部分實(shí)際不依賴(lài)任何第三方組件)
  • 缺點(diǎn):
    • 1.x http心跳消耗大,2.x剛發(fā)布不久弱睦,可能存在一些bug
    • 沒(méi)有分層設(shè)計(jì)百姓,沒(méi)辦法針對(duì)性擴(kuò)容,如連接數(shù)太多時(shí)况木,擴(kuò)容能解決垒拢,但也會(huì)增加數(shù)據(jù)同步壓力
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市火惊,隨后出現(xiàn)的幾起案子求类,更是在濱河造成了極大的恐慌,老刑警劉巖屹耐,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尸疆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惶岭,警方通過(guò)查閱死者的電腦和手機(jī)寿弱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)按灶,“玉大人症革,你說(shuō)我怎么就攤上這事⊙炫裕” “怎么了噪矛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)铺罢。 經(jīng)常有香客問(wèn)我艇挨,道長(zhǎng),這世上最難降的妖魔是什么韭赘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任缩滨,我火速辦了婚禮,結(jié)果婚禮上泉瞻,老公的妹妹穿的比我還像新娘楷怒。我一直安慰自己,他們只是感情好瓦灶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著抱完,像睡著了一般贼陶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天碉怔,我揣著相機(jī)與錄音烘贴,去河邊找鬼。 笑死撮胧,一個(gè)胖子當(dāng)著我的面吹牛桨踪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芹啥,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锻离,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了墓怀?” 一聲冷哼從身側(cè)響起汽纠,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎傀履,沒(méi)想到半個(gè)月后虱朵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钓账,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年碴犬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梆暮。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡服协,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惕蹄,到底是詐尸還是另有隱情蚯涮,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布卖陵,位于F島的核電站遭顶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泪蔫。R本人自食惡果不足惜棒旗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撩荣。 院中可真熱鬧铣揉,春花似錦、人聲如沸餐曹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)台猴。三九已至朽合,卻和暖如春俱两,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曹步。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工宪彩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讲婚。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓尿孔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筹麸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子活合,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容