Zookeeper和Eureka哪個更好?
Zookeeper和Eureka哪個更好?
1、CAP理論
一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求
C:數(shù)據(jù)一致性:保證所有數(shù)據(jù)都要同步
A:可用性:要保證任何時候請求數(shù)據(jù)都能夠正常響應(yīng)
P:分區(qū)容錯性:當(dāng)網(wǎng)絡(luò)通信發(fā)生故障時,集群仍然可用,不會因為某個節(jié)點掛了或者存在問題,而影響整個系統(tǒng)的正常運(yùn)作
對于分布式系統(tǒng)來說,出現(xiàn)網(wǎng)絡(luò)分區(qū)是不可避免的,因此分區(qū)容錯性是必須要具備的,也就是說,CAP三者,P是必須的
2、Zookeeper保證CP原則
當(dāng)向注冊中心查詢服務(wù)列表時,我們可以容忍注冊中心返回的是幾分鐘以前的注冊信息,但不能接受服務(wù)直接down掉不可用。也就是說,服務(wù)注冊功能對可用性的要求高于一致性。但是zookeeper會出現(xiàn)一種情況,當(dāng)master節(jié)點因為網(wǎng)絡(luò)故障與其他節(jié)點失去聯(lián)系時,剩余節(jié)點會重新進(jìn)行l(wèi)eader選舉。問題在于,選舉leader的時間太長,30~120s,且選舉期間整個zookeeper集群都是不可用的,這就導(dǎo)致在選舉期間服務(wù)癱瘓。在云部署的環(huán)境下,因網(wǎng)絡(luò)問題使得zookeeper集群失去master節(jié)點是較大概率會發(fā)生的事,雖然服務(wù)能夠最終恢復(fù),但是漫長的選舉時間導(dǎo)致的注冊長期不可用是不能容忍的
3、Eureka保證AP原則
Eureka優(yōu)先保證可用性。Eureka各個節(jié)點都是平等的,幾個節(jié)點掛掉不會影響正常節(jié)點的工作,剩余的節(jié)點依然可以提供注冊和查詢服務(wù)。而Eureka的客戶端在向某個Eureka注冊或是如果發(fā)現(xiàn)連接失敗,則會自動切換至其他節(jié)點,只要有一臺Eureka還在,就能保證注冊服務(wù)可用(保證高可用),只不過查詢的信息可能不是最新的(不保證強(qiáng)一致性)。除此之外,Eureka還有一種自我保護(hù)機(jī)制,如果在15分鐘內(nèi)超過85%的節(jié)點都沒有正常的心跳,那么Eureka就認(rèn)為客戶端與注冊中心出現(xiàn)了網(wǎng)絡(luò)故障,此時會出現(xiàn)以下幾種情況:
1.Eureka不再從注冊列表中移除因為長時間沒收到心跳而應(yīng)該過期的服務(wù)
2.Eureka仍然能夠接受新服務(wù)的注冊和查詢請求,但是不會被同步到其他節(jié)點上(即保證當(dāng)前節(jié)點仍然可用)
3.當(dāng)網(wǎng)絡(luò)穩(wěn)定時,當(dāng)前實例新的注冊信息會被同步到其他節(jié)點中
因此,Eureka可以很好的應(yīng)對網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點失去聯(lián)系的情況,而不會像zookeeper那樣使整個注冊服務(wù)癱瘓
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- SpringBoot+Eureka實現(xiàn)微服務(wù)負(fù)載均衡的示例代碼
- SpringCloud Eureka服務(wù)發(fā)現(xiàn)實現(xiàn)過程
- SpringCloud Eureka Provider及Consumer的實現(xiàn)
- springboot2.0和springcloud Finchley版項目搭建(包含eureka,gateWay,F(xiàn)reign,Hystrix)
- Spring-cloud-eureka使用feign調(diào)用服務(wù)接口
- 細(xì)說Springcloud eureka的幾種主動下線服務(wù)的方式
- spring cloud eureka微服務(wù)之間的調(diào)用詳解
- Springcould多模塊搭建Eureka服務(wù)器端口過程詳解
相關(guān)文章
idea打不開雙擊IDEA圖標(biāo)沒反應(yīng)的快速解決方案
這篇文章主要介紹了idea打不開雙擊IDEA圖標(biāo)沒反應(yīng)的快速解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
詳解Java Bellman-Ford算法原理及實現(xiàn)
Bellman-Ford算法與Dijkstra算法類似,都是以松弛操作作為基礎(chǔ),Bellman-Ford算法是對所有邊都進(jìn)行松弛操作,本文將詳解Bellman-Ford算法原理及實現(xiàn),感興趣的可以了解一下2022-07-07
Java 8 動態(tài)類型語言Lambda表達(dá)式實現(xiàn)原理解析
Java 8支持動態(tài)語言,看到了很酷的Lambda表達(dá)式,對一直以靜態(tài)類型語言自居的Java,讓人看到了Java虛擬機(jī)可以支持動態(tài)語言的目標(biāo)。接下來通過本文給大家介紹Java 8 動態(tài)類型語言Lambda表達(dá)式實現(xiàn)原理分析,需要的朋友可以參考下2017-02-02
比較java中Future與FutureTask之間的關(guān)系
在本篇文章里我們給大家分享了java中Future與FutureTask之間的關(guān)系的內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2018-10-10

