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