為什么需要注冊(cè)中心?是用 Eureka 還是 Nacos?
為什么要使用注冊(cè)中心
有使用過ip:port地址直接調(diào)用服務(wù)的開發(fā)經(jīng)歷么?該段痛苦的經(jīng)歷在此處省略500字......,該種方式的缺點(diǎn):
需要手動(dòng)的維護(hù)所有的服務(wù)訪問ip地址列表。 單個(gè)服務(wù)實(shí)現(xiàn)負(fù)載均衡需要自己搭建,例如使用nginx負(fù)載均衡策略,或者基于容器化多實(shí)例部署單個(gè)服務(wù),在實(shí)例之間做負(fù)載均衡。
服務(wù)提供者:向注冊(cè)中心根據(jù)服務(wù)名稱提供服務(wù)訪問的ip:port以及其他信息。 注冊(cè)中心:根據(jù)服務(wù)名稱,存儲(chǔ)對(duì)應(yīng)的ip:port以及其他信息。 服務(wù)消費(fèi)者:根據(jù)服務(wù)名向注冊(cè)中心獲取調(diào)用服務(wù)的ip:port以及其他相關(guān)的信息集合,然后根據(jù)負(fù)載均衡策略獲取最終的服務(wù)器ip:port訪問地址。 使用springcloud時(shí),常用的是eureka和nacos作為注冊(cè)中心,如何選擇呢?
Eureka注冊(cè)中心
架構(gòu)原理圖如下:
服務(wù)提供者
主動(dòng)向注冊(cè)中心注冊(cè),續(xù)約,下線,獲取注冊(cè)表。服務(wù)注冊(cè)成功后,定時(shí)向注冊(cè)中心發(fā)送心跳,保證服務(wù)不被剔除。
注冊(cè)中心
講述一次慘痛的上線經(jīng)歷,錯(cuò)誤描述如下:
后續(xù)的解決方法是,設(shè)置 enableSelfPreservation=false關(guān)閉自我保護(hù)機(jī)制,把renewalPercentThreshold 比例降低,在Eureka Server端,如果出現(xiàn)無效的服務(wù)就會(huì)將該服務(wù)剔除。nacos注冊(cè)中心
nacos是springcloud的擴(kuò)展,注冊(cè)中心功能通過NacosDiscoveryClient 繼承DiscoveryClient,在springcloud中,與Eureka可以無侵入的切換。注冊(cè)中心可以手動(dòng)剔除服務(wù)實(shí)例,通過消息通知客戶端更新緩存的實(shí)例信息,完整調(diào)用鏈路示例如下:另外,關(guān)注互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理的 架構(gòu)系列面試題和答案,非常齊全。
在spring cloud中引入nacos時(shí),參考官網(wǎng)匹配具體的版本,如圖:
nacos重點(diǎn)需要了解下其領(lǐng)域模型Nacos 數(shù)據(jù)模型 Key 由三元組唯一確定, Namespace命名空間,分組group,service服務(wù)。詳情可以參考官網(wǎng)Nacos 架構(gòu)。 Nacos與Eureka相比優(yōu)勢(shì)如下:
nacos在自動(dòng)或手動(dòng)下線服務(wù),使用消息機(jī)制通知客戶端,服務(wù)實(shí)例的修改很快響應(yīng);Eureka只能通過任務(wù)定時(shí)剔除無效的服務(wù)。 nacos可以根據(jù)namespace命名空間,DataId,Group分組,來區(qū)分不同環(huán)境(dev,test,prod),不同項(xiàng)目的配置。 原文鏈接:https://blog.csdn.net/new_com/article/details/112633748
相關(guān)閱讀:2T架構(gòu)師學(xué)習(xí)資料干貨分享
全棧架構(gòu)社區(qū)交流群
?「全棧架構(gòu)社區(qū)」建立了讀者架構(gòu)師交流群,大家可以添加小編微信進(jìn)行加群。歡迎有想法、樂于分享的朋友們一起交流學(xué)習(xí)。
看完本文有收獲?請(qǐng)轉(zhuǎn)發(fā)分享給更多人
往期資源:




