服務發現比較:Consul vs Zookeeper vs Etcd vs Eureka

Feature Consul zookeeper etcd euerka
服務健康檢查 服務狀態,內存,硬盤等 (弱)長連接,keepalive 連接心跳 可配支持
多數據中心 支持
kv存儲服務 支持 支持 支持
一致性 raft paxos raft
cap cp cp cp ap
使用接口(多語言能力) 支持http和dns 客戶端 http/grpc http(sidecar)
watch支持 全量/支持long polling 支持 支持 long polling 支持 long polling/大部分增量
自身監控 metrics metrics metrics
安全 acl /https acl https支持(弱)
spring cloud集成 已支持 已支持 已支持 已支持

Eureka是一個服務發現工具。該體系結構主要是客戶端/服務器,每個數據中心有一組Eureka服務器,通常每個可用區域一個。通常Eureka的客戶使用嵌入式SDK來注冊和發現服務。對于非本地集成的客戶,使用功能區邊框等透過Eureka透明地發現服務。

Eureka提供了一個弱一致的服務視圖,使用盡力而為復制。當客戶端向服務器注冊時,該服務器將嘗試復制到其他服務器,但不提供保證。服務注冊的生存時間(TTL)較短,要求客戶端對服務器進行心跳檢測。不健康的服務或節點將停止心跳,導致它們超時并從注冊表中刪除。發現請求可以路由到任何服務,由于盡力而為的復制,這些服務可能會導致陳舊或丟失數據。這個簡化的模型允許簡單的群集管理和高可擴展性。

CONSUL提供了一套超級功能,包括更豐富的健康檢查,關鍵/價值存儲以及多數據中心意識。Consul需要每個數據中心都有一套服務器,以及每個客戶端的代理,類似于使用像Ribbon這樣的負載均衡。Consul代理允許大多數應用程序成為Consul不知情者,通過配置文件執行服務注冊并通過DNS或負載平衡器sidecars發現。

Consul提供強大的一致性保證,因為服務器使用Raft協議復制狀態 。Consul支持豐富的健康檢查,包括TCP,HTTP,Nagios / Sensu兼容腳本或基于Eureka的TTL。客戶端節點參與基于Gossip的健康檢查,該檢查分發健康檢查工作,而不像集中式心跳檢測那樣成為可擴展性挑戰。發現請求被路由到選舉出來的領事領導,這使他們默認情況下強烈一致。允許陳舊讀取的客戶端使任何服務器都可以處理他們的請求,從而實現像Eureka這樣的線性可伸縮性。

Consul強烈的一致性意味著它可以作為領導選舉和集群協調的鎖定服務。Eureka不提供類似的保證,并且通常需要為需要執行協調或具有更強一致性需求的服務運行ZooKeeper。

Consul提供了支持面向服務的體系結構所需的一系列功能。這包括服務發現,還包括豐富的運行狀況檢查,鎖定,密鑰/值,多數據中心聯合,事件系統和ACL。Consul和consul-template和envconsul等工具生態系統都試圖盡量減少集成所需的應用程序更改,以避免需要通過SDK進行本地集成。Eureka是一個更大的Netflix OSS套件的一部分,該套件預計應用程序相對均勻且緊密集成。因此,Eureka只解決了一小部分問題,希望ZooKeeper等其他工具可以一起使用。

CAP中,Consul使用CP體系結構,有利于實現可用性的一致性。

最大的區別是Eureka保證AP, Consul為CP。

Consul強一致性(C)帶來的是:

  1. 服務注冊相比Eureka會稍慢一些。因為Consul的raft協議要求必須過半數的節點都寫入成功才認為注冊成功
  2. Leader掛掉時,重新選舉期間整個consul不可用。保證了強一致性但犧牲了可用性。

Eureka保證高可用(A)和最終一致性:

  1. 服務注冊相對要快,因為不需要等注冊信息replicate到其他節點,也不保證注冊信息是否replicate成功
  2. 當數據出現不一致時,雖然A, B上的注冊信息不完全相同,但每個Eureka節點依然能夠正常對外提供服務,這會出現查詢服務信息時如果請求A查不到,但請求B就能查到。如此保證了可用性但犧牲了一致性。

其他方面,eureka就是個servlet程序,跑在servlet容器中; Consul則是go編寫而成。

這里就平時經常用到的服務發現的產品進行下特性的對比,首先看下結論:

  • Euraka 使用時需要顯式配置健康檢查支持;Zookeeper,Etcd 則在失去了和服務進程的連接情況下任務不健康,而 Consul 相對更為詳細點,比如內存是否已使用了90%,文件系統的空間是不是快不足了。服務的健康檢查

  • 多數據中心支持

Consul 通過 WAN 的 Gossip 協議,完成跨數據中心的同步;而且其他的產品則需要額外的開發工作來實現;

  • KV 存儲服務

除了 Eureka ,其他幾款都能夠對外支持 k-v 的存儲服務,所以后面會講到這幾款產品追求高一致性的重要原因。而提供存儲服務,也能夠較好的轉化為動態配置服務哦。

  • 產品設計中 CAP 理論的取舍

Eureka 典型的 AP,作為分布式場景下的服務發現的產品較為合適,服務發現場景的可用性優先級較高,一致性并不是特別致命。其次 CP 類型的場景 Consul,也能提供較高的可用性,并能 k-v store 服務保證一致性。 而Zookeeper,Etcd則是CP類型 犧牲可用性,在服務發現場景并沒太大優勢;

  • 多語言能力與對外提供服務的接入協議

Zookeeper的跨語言支持較弱,其他幾款支持 http11 提供接入的可能。Euraka 一般通過 sidecar的方式提供多語言客戶端的接入支持。Etcd 還提供了Grpc的支持。 Consul除了標準的Rest服務api,還提供了DNS的支持。

  • Watch的支持(客戶端觀察到服務提供者變化)

Zookeeper 支持服務器端推送變化,Eureka 2.0(正在開發中)也計劃支持。 Eureka 1,Consul,Etcd則都通過長輪詢的方式來實現變化的感知;

  • 自身集群的監控

除了 Zookeeper ,其他幾款都默認支持 metrics,運維者可以搜集并報警這些度量信息達到監控目的;

  • 安全

Consul,Zookeeper 支持ACL,另外 Consul,Etcd 支持安全通道https.

  • Spring Cloud的集成

目前都有相對應的 boot starter,提供了集成能力。

總的來看,目前Consul 自身功能,和 spring cloud 對其集成的支持都相對較為完善,而且運維的復雜度較為簡單(沒有詳細列出討論),Eureka 設計上比較符合場景,但還需持續的完善。

服務注冊發現一: consul介紹、安裝、及功能介紹
服務注冊發現二: 在Spring Cloud中使用Consul實現服務的注冊和發現
服務發現比較:Consul vs Zookeeper vs Etcd vs Eureka
服務注冊發現四: 基于Consul的KV存儲和分布式信號量實現分布式鎖

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容