天天看點

Nacos和Eureka的差別

Eureka架構圖:

Eureka架構圖

1.服務注冊(register):Eureka Client會通過發送REST請求的方式,向Eureka Server注冊自己的服務。注冊時,提供自身的中繼資料,比如ip位址、端口、運作狀況名額、首頁位址等資訊。Eureka Server接收到注冊請求後,就會把這些中繼資料資訊存儲在一個雙層的Map中。 什麼時候注冊?在啟動微服務的時候。

2.服務續約(renew):在服務注冊後,Eureka Client會維護一個心跳來持續通知Eureka Server,說明服務一直處于可用狀态,防止被剔除。預設每隔30秒eureka.instance.lease-renewal-interval-in-seconds 發送一次心跳來進行服務續約。

3.擷取服務清單(get registry):服務消費者(Eureka Client)在啟動的時候,會發送一個REST請求給Eureka Server,擷取注冊中心的服務清單,并且緩存在用戶端本地。同時,為了性能及安全性考慮,Eureka Server會每隔30秒更新一次緩存中的服務清單。

4.服務調用:服務消費者在擷取到服務清單後,可以根據清單中的服務資訊,查找到該服務的位址,進而進行通路(遠端調用)。

6.服務下線(cancel):當Eureka Client需要關閉或重新開機時,就不希望在這個時間段内再有請求進來,是以,就需要提前先發送REST請求給EurekaServer,告訴Eureka Server自己要下線了,Eureka Server在收到請求後,就會把該服務狀态置為下線(DOWN),并把該下線事件傳播出去。

7.失效剔除(evict):服務執行個體可能會因為網絡故障等原因,導緻不能提供服務,而此時該執行個體也沒有發送請求給Eureka Server來進行服務下線。是以,還需要有服務剔除的機制。Eureka Server在啟動的時候會建立一個定時任務,每隔一段時間(預設60秒),從目前服務清單中把逾時沒有續約(預設90秒eureka.instance.lease-expiration-duration-inseconds)的服務剔除。

Nacos架構圖:

Nacos架構圖

服務管理:實作服務CRUD,域名CRUD,服務健康狀态檢查,服務權重管理等功能

一緻性協定:解決不同資料,不同一緻性要求情況下,不同一緻性機制

OpenAPI:暴露标準Rest風格HTTP接口,簡單易用,友善多語言內建

Console:易用控制台,做服務管理、配置管理等操作

Nacos與Eureka自我保護機制對比

相同點:保護門檻值都是個比例,0-1 範圍,表示健康的 instance 占全部instance 的比例。

不同點:

1)保護方式不同

Eureka保護方式:當在短時間内,統計續約失敗的比例,如果達到一定門檻值,則會觸發自我保護的機制,在該機制下,Eureka Server不會剔除任何的微服務,等到正常後,再退出自我保護機制。自我保護開關(eureka.server.enable-self-preservation: false)

Nacos保護方式:當域名健康執行個體 (Instance) 占總服務執行個體(Instance) 的比例小于門檻值時,無論執行個體 (Instance) 是否健康,都會将這個執行個體 (Instance) 傳回給用戶端。這樣做雖然損失了一部分流量,但是保證了叢集的剩餘健康執行個體 (Instance) 能正常工作。