Eureka可以很好的應對網絡故障導致部分節點失去聯系的情況,而不會像zk那樣因為選舉導致整個集群不可用
- dubbo + zk
當向注冊中心查詢服務注冊列表時,可以容忍注冊中心返回的是幾分鍾以前的注冊信息,但是不能接受服務直接down掉不可用。服務注冊功能對可用性的要求高於一致性。在zk選舉的時候,整個集群不可用,這樣就導致注冊服務癱瘓,漫長的選舉期間導致整個注冊服務長期不可用
- Eureka 的AP
在設計的時候優先保證可用性。eureka的各個節點都是平等的,幾個節點down掉不會影響其他節點的提供注冊和查詢服務的功能。而Eureka的客戶端在向牧歌Eureka注冊如果鏈接失敗,則會自動切換到其他節點,只要有一台Eureka正常工作,就能保證注冊服務可用,只不過查詢服務的結果可能不是最新的(不保證強一致性)。除此之外,Eureka還有一種自我保護機制,如果在15分鍾內,85%的節點都沒有正常的心跳,那么Eureka就認為客戶端與注冊中心出現了網絡故障,此時會出現以下幾種情況:
- Eureka不再從注冊列表中移除因為長時間沒有收到心跳的而過期的服務;
- Eureka仍然能夠接收新的服務注冊和查詢請求,但不會同步到其他節點(保證當前節點依然可用);
- 當網絡穩定時,當前實例新的注冊信息會同步到其他節點;