關(guān)于Nacos和Eureka的區(qū)別及說(shuō)明
Eureka是什么
Eureka 是Spring Cloud 微服務(wù)框架默認(rèn)的也是推薦的服務(wù)注冊(cè)中心
由Netflix公司與2012將其開(kāi)源出來(lái),Eureka基于REST服務(wù)開(kāi)發(fā),主要用于實(shí)現(xiàn)AWS云的中服務(wù)定位,以實(shí)現(xiàn)中間層服務(wù)器的負(fù)載均衡和故障轉(zhuǎn)移,遵循著CAP理論中的A(可用性)P(分區(qū)容錯(cuò)性)
Eureka詳解
一個(gè)Eureka中分為eureka server和eureka clint,其中eurka server是作為服務(wù)的注冊(cè)與發(fā)現(xiàn)中心,eureka client既可以作為服務(wù)的生產(chǎn)者,又可以作為服務(wù)的消費(fèi)者
Eurak2.0之后已經(jīng)停止開(kāi)源
Nacos是什么
Nacos是阿里巴巴最新開(kāi)源的項(xiàng)目,提供了一組簡(jiǎn)單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。
更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái)。
Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn),動(dòng)態(tài)配置服務(wù)(配置中心),動(dòng)態(tài)DNS服務(wù)
Nacos詳解
Provider APP
:服務(wù)提供者Consumer APP
:服務(wù)消費(fèi)者Name Server
:通過(guò)VIP(Virtual IP)或DNS的方式實(shí)現(xiàn)Nacos高可用集群的服務(wù)路由Nacos Server
:Nacos服務(wù)提供者,里面包含的Open API是功能訪問(wèn)入口,Conig Service、Naming Service 是Nacos提供的配置服務(wù)、命名服務(wù)模塊。Consitency Protocol是一致性協(xié)議,用來(lái)實(shí)現(xiàn)Nacos集群節(jié)點(diǎn)的數(shù)據(jù)同步,這里使用的是Raft算法(Etcd、Redis哨兵選舉)Nacos Console
:控制臺(tái)
Nacos的實(shí)現(xiàn)原理
- 1.客戶(hù)端provider向nacos server的open api發(fā)起調(diào)用,把自己的服務(wù)地址鏈接,服務(wù)名稱(chēng)注冊(cè)上去
- 2.nacos server與服務(wù)提供者provider建立心跳機(jī)制,用來(lái)檢測(cè)服務(wù)狀態(tài)
- 3.服務(wù)消費(fèi)者consumer查詢(xún)出提供服務(wù)實(shí)例列表
- 4.并且默認(rèn)10s去nacos server拉取服務(wù)實(shí)例列表
- 5.當(dāng)服務(wù)消費(fèi)者檢測(cè)到服務(wù)異常,基于UDP協(xié)議推送更新
- 6.服務(wù)消費(fèi)者即可調(diào)用了
Nacos和Eureka的區(qū)別
CAP理論
C一致性,A高可用,P分區(qū)容錯(cuò)性
- eureka只支持AP
- nacos支持CP和AP兩種
nacos是根據(jù)配置識(shí)別CP或AP模式,如果注冊(cè)Nacos的client節(jié)點(diǎn)注冊(cè)時(shí)是ephemeral=true即為臨時(shí)節(jié)點(diǎn),那么Naocs集群對(duì)這個(gè)client節(jié)點(diǎn)效果就是AP,反之則是CP,即不是臨時(shí)節(jié)點(diǎn)
#false為永久實(shí)例,true表示臨時(shí)實(shí)例開(kāi)啟,注冊(cè)為臨時(shí)實(shí)例 spring.cloud.nacos.discovery.ephemeral=true
連接方式
- nacs使用的是netty和服務(wù)直接進(jìn)行連接,屬于長(zhǎng)連接
- eureka是使用定時(shí)發(fā)送和服務(wù)進(jìn)行聯(lián)系,屬于短連接 服務(wù)異常剔除
eureka:
Eureka client在默認(rèn)情況每隔30s想Eureka Server發(fā)送一次心跳,當(dāng)Eureka Server在默認(rèn)連續(xù)90s秒的情況下沒(méi)有收到心跳, 會(huì)把Eureka client 從注冊(cè)表中剔除,在由Eureka-Server 60秒的清除間隔,把Eureka client 給下線
EurekaInstanceConfigBean類(lèi)下 private int leaseRenewalIntervalInSeconds = 30; //心跳間隔30s private int leaseExpirationDurationInSeconds = 90; //默認(rèn)90s沒(méi)有收到心跳從注冊(cè)表中剔除 EurekaServerConfigBean 類(lèi)下 private long evictionIntervalTimerInMs = 60000L; //異常服務(wù)剔除下線時(shí)間間隔
也就是在極端情況下Eureka 服務(wù) 從異常到剔除在到完全不接受請(qǐng)求可能需要 30s+90s+60s=3分鐘左右(還是未考慮ribbon緩存情況下)
nacos:
nacos client 通過(guò)心跳上報(bào)方式告訴 nacos注冊(cè)中心健康狀態(tài),默認(rèn)心跳間隔5秒,
nacos會(huì)在超過(guò)15秒未收到心跳后將實(shí)例設(shè)置為不健康狀態(tài),可以正常接收到請(qǐng)求
超過(guò)30秒nacos將實(shí)例刪除,不會(huì)再接收請(qǐng)求
操作實(shí)例方式
- nacos:提供了nacos console可視化控制話界面,可以對(duì)實(shí)例列表進(jìn)行監(jiān)聽(tīng),對(duì)實(shí)例進(jìn)行上下線,權(quán)重的配置,并且config server提供了對(duì)服務(wù)實(shí)例提供配置中心,且可以對(duì)配置進(jìn)行CRUD,版本管理
- eureka:僅提供了實(shí)例列表,實(shí)例的狀態(tài),錯(cuò)誤信息,相比于nacos過(guò)于簡(jiǎn)單
自我保護(hù)機(jī)制
相同點(diǎn)
保護(hù)閾值都是個(gè)比例,0-1 范圍,表示健康的 instance 占全部instance 的比例。
不同點(diǎn)
1)保護(hù)方式不同
- Eureka保護(hù)方式:當(dāng)在短時(shí)間內(nèi),統(tǒng)計(jì)續(xù)約失敗的比例,如果達(dá)到一定閾值,則會(huì)觸發(fā)自我保護(hù)的機(jī)制,在該機(jī)制下,Eureka Server不會(huì)剔除任何的微服務(wù),等到正常后,再退出自我保護(hù)機(jī)制。自我保護(hù)開(kāi)關(guān)(eureka.server.enable-self-preservation: false)
- Nacos保護(hù)方式:當(dāng)域名健康實(shí)例 (Instance) 占總服務(wù)實(shí)例(Instance) 的比例小于閾值時(shí),無(wú)論實(shí)例 (Instance) 是否健康,都會(huì)將這個(gè)實(shí)例 (Instance) 返回給客戶(hù)端。這樣做雖然損失了一部分流量,但是保證了集群的剩余健康實(shí)例 (Instance) 能正常工作。
2)范圍不同
- Nacos 的閾值是針對(duì)某個(gè)具體 Service 的,而不是針對(duì)所有服務(wù)的。但 Eureka的自我保護(hù)閾值是針對(duì)所有服務(wù)的。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Nacos?Discovery服務(wù)治理解決方案
- 關(guān)于IDEA中spring-cloud-starter-alibaba-nacos-discovery 無(wú)法引入問(wèn)題
- 關(guān)于Nacos配置管理的統(tǒng)一配置管理、自動(dòng)刷新詳解
- elasticsearch集群發(fā)現(xiàn)zendiscovery的Ping機(jī)制分析
- elasticsearch集群cluster?discovery可配式模塊示例分析
- elasticsearch的zenDiscovery和master選舉機(jī)制原理分析
- nacos-discovery包名層級(jí)問(wèn)題解決
相關(guān)文章
Spring 使用 feign時(shí)設(shè)置header信息的操作
這篇文章主要介紹了Spring 使用 feign時(shí)設(shè)置header信息的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01MyBatis-Plus數(shù)據(jù)權(quán)限插件的簡(jiǎn)單使用
在MyBatis-Plus中,通過(guò)DataPermissionInterceptor插件實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制,首先需要?jiǎng)?chuàng)建自定義注解和處理類(lèi),利用JSQLParser庫(kù)動(dòng)態(tài)修改SQL,實(shí)現(xiàn)按角色權(quán)限過(guò)濾數(shù)據(jù),配置類(lèi)中注冊(cè)攔截器,確保只有授權(quán)用戶(hù)能訪問(wèn)指定數(shù)據(jù),感興趣的可以了解一下2024-10-10java實(shí)現(xiàn)gif動(dòng)畫(huà)效果(java顯示動(dòng)態(tài)圖片)
這篇文章主要介紹了java實(shí)現(xiàn)gif動(dòng)畫(huà)效果示例(java顯示動(dòng)態(tài)圖片),需要的朋友可以參考下2014-04-04Java常用數(shù)字工具類(lèi) 數(shù)字轉(zhuǎn)漢字(1)
這篇文章主要為大家詳細(xì)介紹了Java常用數(shù)字工具類(lèi),數(shù)字轉(zhuǎn)漢字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Nacos Namespace/Group/DataID三者關(guān)系解讀
本文介紹了Nacos中的命名空間(Namespace)、配置分組(Group)和配置集ID(DataID)的概念,并詳細(xì)說(shuō)明了它們之間的關(guān)系和應(yīng)用場(chǎng)景,同時(shí),還提供了三者在不同環(huán)境下的配置切換方案,包括DataID方案、Group方案和命名空間方案2024-12-12java8列表中通過(guò)stream流根據(jù)對(duì)象屬性去重的三種方式
這篇文章主要介紹了java8列表中通過(guò)stream流根據(jù)對(duì)象屬性去重的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08