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