Eureka架構圖:
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架構圖:
服務管理:實現服務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) 能正常工作。
2)範圍不同
Nacos 的閾值是針對某個具體 Service 的,而不是針對所有服務的。但 Eureka的自我保護閾值是針對所有服務的。