zk和eureka的區別

2021-10-08 09:35:37 字數 2216 閱讀 8216

cap:c:資料一致性。a:服務可用性。p:分割槽容錯性(服務對網路分割槽故障的容錯性)。

zookeeper保證cp

當向註冊中心查詢服務列表時,我們可以容忍註冊中心返回的是幾分鐘以前的註冊資訊,但不能接受服務直接down掉不可用。也就是說,服務註冊功能對可用性的要求要高於一致性。但是zk會出現這樣一種情況,當master節點因為網路故障與其他節點失去聯絡時,剩餘節點會重新進行leader選舉。問題在於,選舉leader的時間太長,30 ~ 120s, 且選舉期間整個zk集群都是不可用的,這就導致在選舉期間註冊服務癱瘓。在雲部署的環境下,因網路問題使得zk集群失去master節點是較大概率會發生的事,雖然服務能夠最終恢復,但是漫長的選舉時間導致的註冊長期不可用是不能容忍的。

zookeeper工作原理

zookeeper也可以作為註冊中心,用於服務治理(zookeeper還有其他用途,例如:分布式事務鎖等)  

每啟動乙個微服務,就會去zk中註冊乙個臨時子節點,

例如:5臺訂單服務,4臺商品服務

(5臺訂單服務在zk中的訂單目錄下建立的5個臨時節點)

(4臺商品服務在zk中的商品目錄下建立的4個臨時接點)

(zk上有watch,每當有節點更新,都會通知訂閱該服務的微服務更新服務列表)

每當有乙個新的微服務註冊進來,就會在對應的目錄下建立臨時子節點,並通知訂閱該服務的微服務更新服務列表

(zk上有watch,每當有節點更新,都會通知訂閱該服務的微服務更新服務列表)

每個微服務30s向zk獲取新的服務列表

eureka保證ap

eureka各個節點都是平等的,幾個節點掛掉不會影響正常節點的工作,剩餘的節點依然可以提供註冊和查詢服務。而eureka的客戶端在向某個eureka註冊或時如果發現連線失敗,則會自動切換至其它節點,只要有一台eureka還在,就能保證註冊服務可用(保證可用性),只不過查到的資訊可能不是最新的(不保證強一致性)。除此之外,eureka還有一種自我保護機制,如果在15分鐘內超過85%的節點都沒有正常的心跳,那麼eureka就認為客戶端與註冊中心出現了網路故障,此時會出現以下幾種情況:

eureka不再從註冊列表中移除因為長時間沒收到心跳而應該過期的服務

eureka仍然能夠接受新服務的註冊和查詢請求,但是不會被同步到其它節點上(即保證當前節點依然可用)

當網路穩定時,當前例項新的註冊資訊會被同步到其它節點中

因此, eureka可以很好的應對因網路故障導致部分節點失去聯絡的情況,而不會像zookeeper那樣使整個註冊服務癱瘓。

eureka工作原理

每乙個微服務中都有eureka client,用於服務的註冊與發現

(服務的註冊:把自己註冊到eureka server) (服務的發現:從eureka server獲取自己需要的服務列表)

每乙個微服務啟動的時候,都需要去eureka server註冊 當a服務需要呼叫b服務時,

需要從eureka服務端獲取b服務的服務列表,然後把列表快取到本地,然後根據ribbon的客戶端負載均衡規則,

從服務列表中取到乙個b服務,然後去呼叫此b服務

當a服務下次再此呼叫b服務時,如果發現本地已經儲存了b的服務列表,就不需要再從eureka服務端獲取b服務列表,

直接根據ribbon的客戶端負載均衡規則,從服務列表中取到乙個b服務,然後去呼叫b服務 微服務,

預設每30秒,就會從eureka服務端獲取一次最新的服務列表

如果某台微服務down機,或者新增了幾台機器, 此時eureka server會通知訂閱他的客戶端,

並讓客戶端更新服務列表, 而且還會通知其他eureka server更新此資訊 心跳檢測,

微服務每30秒向eureka server傳送心跳, eureka server若90s之內都沒有收到某個客戶端的心跳,

則認為此服務出了問題, 會從註冊的服務列表中將其刪除,並通知訂閱它的客戶端更新服務列表,

而且還會通知其他eureka server更新此資訊

eureka server保護機制,通過打卡開關,可以讓eureka server處於保護狀態,

主要是用於某eureka server由於網路或其他原因,導致接收不到其他微服務的心跳,

此時不能盲目的將其他微服務從服務列表中刪除。

具體規則:如果一段時間內,85%的服務都沒有傳送心跳,則此server進入保護狀態,

此狀態下,可以正常接受註冊,可以正常提供查詢服務,但是不與其他server同步資訊,

也不會通知訂閱它的客戶端,這樣就不會誤殺其他微服務

Zookeeper和Eureka的區別!

著名的cap理論指出,乙個分布式系統不可能同時滿足c 一致性 a 可用性 和p 分割槽容錯性 由於分割槽容錯性p在分布式系統中必須要保證的,因此我們只能在a和c之間進行權衡。因此 zookeeper保證的是cp,eureka則是ap。zoopkeeper保證cp 當向註冊中心查詢服務列表時,我們可以...

ZooKeeper和Eureka的區別

1 cap理論 乙個分布式系統不可能同時滿足c 一致性 a 可用性 和p 分割槽容錯性 zookeeper保證的是cp,而eureka則是ap。2 zookeeper保證cp 當註冊中心查詢服務列表時,我們可以容忍註冊中心返回的是幾分鐘以前的註冊資訊,但是不能接受服務直接down掉不可用。也就是說,...

consul和eureka的區別

consul和eureka為服務註冊中心,它們一般是集群部署的 1.consul提供了cp一致性 分割槽容錯性,對於consul集群來說,consul註冊中心分為leader和fellow,服務註冊和發現會落地到leader去提供,當乙個專案a想要註冊到consul時,leader需要保證a服務註冊...