Zookeeper保證了CP(C:一致性,P:分區(qū)容錯性),Eureka保證了AP(A:高可用)
(1)當(dāng)向注冊中心查詢服務(wù)列表時,我們可以容忍注冊中心返回的是幾分鐘以前的信息,但不能容忍直接down掉不可用。也就是說,服務(wù)注冊功能對高可用性要求比較高,但zk會出現(xiàn)這樣一種情況,當(dāng)master節(jié)點因為網(wǎng)絡(luò)故障與其他節(jié)點失去聯(lián)系時,剩余節(jié)點會重新選leader。問題在于,選取leader時間過長,30 ~120s,且選取期間zk集群都不可用,這樣就會導(dǎo)致選取期間注冊服務(wù)癱瘓。在云部署的環(huán)境下,因網(wǎng)絡(luò)問題使得zk集群失去master節(jié)點是較大概率會發(fā)生的事,雖然服務(wù)能夠恢復(fù),但是漫長的選取時間導(dǎo)致的注冊長期不可用是不能容忍的。
(2)Eureka保證 用性,Eureka各個節(jié)點是平等的,幾個節(jié)點掛掉不會影響正常節(jié)點的工作,剩余的節(jié)點仍然可以提供注冊和查詢服務(wù)。而Eureka的客戶端向某個Eureka注冊或發(fā)現(xiàn)時發(fā)生連接失敗,則會自動切換到其他節(jié)點,只要有一臺Eureka還在,就能保證注冊服務(wù)可用,只是查到的信息可能不是最新的。除此之外,Eureka還有自我保護機制,如果在15分鐘內(nèi)超過85%的節(jié)點沒有正常的心跳,那么Eureka就認為客戶端與注冊中心發(fā)生了網(wǎng)絡(luò)故障,此時會出現(xiàn)以下幾種情況:
①、Eureka不在從注冊列表中移除因為長時間沒有收到心跳而應(yīng)該過期的服務(wù)。
?、凇ureka仍然能夠接受新服務(wù)的注冊和查詢請求,但是不會被同步到其他節(jié)點上(即保證當(dāng)前節(jié)點仍然可用)
③、當(dāng)網(wǎng)絡(luò)穩(wěn)定時,當(dāng)前實例新的注冊信息會被同步到其他節(jié)點。因此,Eureka可以很好的應(yīng)對因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點失去聯(lián)系的情況,而不會像Zookeeper那樣使整個微服務(wù)癱瘓