ZooKeeper与Eureka的区别
生活随笔
收集整理的這篇文章主要介紹了
ZooKeeper与Eureka的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我們來看Zookeeper與Eureka的一個區(qū)別,在這里準備了一個表格,在這里通過對比項,來對比Zookeeper與Eureka的一個區(qū)別,我們先從CAP來看Zookeeper與Eureka的一個區(qū)別,Zookeeper當中是支持CP而放棄了A,而Eureka當中是支持AP,而放棄了C,我們通過這個對比項呢,可以看出來,無論是Zookeeper還是Eureka,他都支持分區(qū)容錯的,只不過Zookeeper是支持數(shù)據(jù)一致性,而放棄了可用性,而Eureka當中呢,是支持了可用性,而放棄了一致性,那么我先來看一下,Zookeeper,Zookeeper為什么會支持數(shù)據(jù)一致性,而放棄了可用性呢,其實原因是Zookeeper技術(shù)的一個特點,天然具備數(shù)據(jù)一致性,2為什么說他天然具備數(shù)據(jù)一致性呢,我們用的Zookeeper的都知道,要想搭建一個Zookeeper集群,無論是有多少個節(jié)點,最終都是一個主從關(guān)系的,其他的都是從節(jié)點,然后我們所有的服務(wù)注冊,是以主節(jié)點為主的,一旦主節(jié)點宕掉了,然后再通過他的一些算法,正因為他每次對于服務(wù)的注冊,都在一個設(shè)備上完成,所以它是具備數(shù)據(jù)一致性的,那么P容錯性,容錯性它是怎么做的呢,這個大家應(yīng)該能知道,其實Leader拿到信息以后,最終它是通過復(fù)制的方式,Leader當中的數(shù)據(jù),同步到從節(jié)點當中,Zookeeper他經(jīng)常要做主從節(jié)點的同步,勢必會影響到他的性能,所以Zookeeper由于他的設(shè)計的原因,所以他只能選擇CP,而放棄A,因為他經(jīng)常要做主從備份,主從同步,那么在同步的過程當中,如果你的數(shù)據(jù)量比較大,幾兆甚至幾十兆,甚至上百兆,在這一段時間范圍內(nèi),同步的過程當中,他的服務(wù)是不可用的,所以他放棄了A,保留了CP,我們再來看Eureka,Eureka跟Zookeeper不同的是,保證了高可用,那么他保證了可用性,保證了可用性的原因是什么呢,Eureka的集群我們自己也搭過,他跟Zookeeper是不一樣的,不具備這種主從關(guān)系,他所有的節(jié)點幾乎都是平等的,我們之前講Eureka的架構(gòu)原理也說過,Eureka當中呢,他的每一個節(jié)點,相互之間都是平等的,不具備主從的問題,當我們要去請求拿Zookeeper服務(wù)的時候,正因為有這樣一個原因,不具備主從關(guān)系,所有集群當中的某一個節(jié)點,所以他就不具備數(shù)據(jù)一致性了,Zookeeper他有一個Leader,所有的操作都是以Leader為主的,所以它是具備數(shù)據(jù)一致性的,那么他就不具備數(shù)據(jù)一致性了,說明他肯定具備服務(wù)的可用性,然后再來看他的key,分區(qū)容錯性,Eureka當中是怎么來實現(xiàn)的呢,跟Zookeeper還是有區(qū)別的,Zookeeper的分區(qū)容錯,采用的是主從復(fù)制的一個方式,Eureka是什么呢,Eureka也是通過主從復(fù)制的方式來完成的,但是他跟Zookeeper不同的是什么呢,他并不是從一個主的復(fù)制到從的,他是這樣的,節(jié)點和節(jié)點之中呢,或者節(jié)點和服務(wù)之間,會發(fā)心跳包,講架構(gòu)原理的時候說過,如果集群當中有一個節(jié)點,在發(fā)心跳包時,某個節(jié)點沒有收到另一個節(jié)點的心跳包,或者某個服務(wù)沒有收到某個服務(wù)的心跳包,那么這個時候,Eureka注冊中心,會將這個服務(wù)做一個服務(wù)的保護,所謂的服務(wù)保護是什么意思呢,他并不是真正的把這個服務(wù)從注冊中心中刪掉,并不是從集群里把這個節(jié)點刪掉,因為他要考慮到,導(dǎo)致心跳包沒有返回的原因,除了服務(wù)或者節(jié)點出現(xiàn)問題以外,還有一種可能是,網(wǎng)絡(luò)阻塞,那么網(wǎng)絡(luò)阻塞時間是不可控的,有的時候可能是幾秒鐘,有的時候可能是幾分鐘,也有可能是幾個小時,那么網(wǎng)絡(luò)故障不代表我服務(wù)不可用,所以Eureka有想到這一點了,會把注冊中心當中的信息,無論是服務(wù)還是其他子節(jié)點的信息,他都做了一個服務(wù)的保護,注冊中心不也是服務(wù)嗎,我們所謂的做Eureka集群,不就是做多個服務(wù)的集群嗎,所以他會將沒有收到心跳包的服務(wù),做一個服務(wù)的保護,他并不是真的從這里刪除掉了,那么他 采用這種方式的原則是什么呢,我并不會從這里去刪除數(shù)據(jù),因為無論什么情況下,你出現(xiàn)問題了,我沒有收到你的心跳包,我也會把你保留著,為什么這么做呢,雖然我沒有收到你的心跳包,但是我總覺得有總比沒有強,未來你的節(jié)點一旦被修復(fù)了,是不是還可以直接來使用,所以他是采用這種機制來做的分區(qū)容錯,這個大家應(yīng)該能夠聽明白吧,Zookeeper采用的是主從同步的關(guān)系,而Eureka是采用節(jié)點與節(jié)點之間的同步,某個節(jié)點出現(xiàn)問題了,并不會真的把這個節(jié)點從服務(wù)中刪除掉,而是開啟一個服務(wù)保護,等著你修復(fù)再加入到集群當中,是這樣的一個道理,這是他們兩個的一個區(qū)別,然后再看Dubbo,對于Dubbo的支持,Zookeeper是支持Dubbo集成的,而Eureka當前來看是不支持Dubbo的,然后SpringCloud集成,Zookeeper也是支持SpringCloud,也就是SpringCloud也是可以支持Zookeeper作為注冊中心,當然SpringCloud也內(nèi)置了Eureka注冊中心,然后kv服務(wù),就是數(shù)據(jù)落地存儲這一塊,Zookeeper是支持的,而Eureka是不支持的,Eureka的數(shù)據(jù)都是在內(nèi)存當中的,是不支持存儲的,而Zookeeper是支持的,然后再來看使用接口,多語言的能力,Zookeeper是以提供客戶端的方式來支持Zookeeper的,我們知道裝完Zookeeper以后,Zkcli這是他的客戶端,也就是Zookeeper到底支持多少種語言,他提供了多少個語言的客戶端,Zookeeper對于多語言支持這一塊還是比較弱的,Eureka對于多語言支持還是比較強的,為什么呢,因為他不是以客戶端方式來訪問Eureka,來訪問注冊中心的,它是以http協(xié)議加restful的風(fēng)格,來訪問的,只要你的語言支持HTTP協(xié)議,都可以支持我們的Eureka,所以對于多語言這一塊呢,Eureka支持的更多一些,然后還有一個就是watch的支持,這個watch是什么呢,我們來看一下,什么是watch支持,客戶端監(jiān)聽服務(wù)端的變化情況,zk就是我們的zookeeper,通過訂閱監(jiān)聽來實現(xiàn),Eureka和zookeeper都是支持watch的,然后再來看集群監(jiān)控,在zookeeper當中呢,它是不支持集群監(jiān)控的,而eureka是通過metrics組件支持監(jiān)控的,也就是運維人員呢可以通過metrics收集并報警這些度量信息達到監(jiān)控目的,所以這也是zookeeper和eureka對于集群監(jiān)控這一塊的區(qū)別,以上我們通過這幾個維度呢,對Zookeeper和Eureka做了一個比較,他們之間不存在好與壞的問題,誰的性能高誰的性能低的問題,只是說在不同的場景下,我們該如何去選擇注冊中心,要基于我們不同的場景和需求來決定,我們通過這幾個對比項就完成了zookeeper和eureka區(qū)別的比較
?
總結(jié)
以上是生活随笔為你收集整理的ZooKeeper与Eureka的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eureka架构图原理
- 下一篇: Eureka的服务自我保护