原文連接地址:java
這裏就平時常常用到的服務發現的產品進行下特性的對比,首先看下結論:git
Feature | Consul | zookeeper | etcd | euerka |
---|---|---|---|---|
服務健康檢查 | 服務狀態,內存,硬盤等 | (弱)長鏈接,keepalive | 鏈接心跳 | 可配支持 |
多數據中心 | 支持 | — | — | — |
kv存儲服務 | 支持 | 支持 | 支持 | — |
一致性 | raft | paxos | raft | — |
cap | ca | 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集成 | 已支持 | 已支持 | 已支持 | 已支持 |
Euraka 使用時須要顯式配置健康檢查支持;Zookeeper,Etcd 則在失去了和服務進程的鏈接狀況下任務不健康,而 Consul 相對更爲詳細點,好比內存是否已使用了90%,文件系統的空間是否是快不足了。github
Consul 經過 WAN 的 Gossip 協議,完成跨數據中心的同步;並且其餘的產品則須要額外的開發工做來實現;spring
除了 Eureka ,其餘幾款都可以對外支持 k-v 的存儲服務,因此後面會講到這幾款產品追求高一致性的重要緣由。而提供存儲服務,也可以較好的轉化爲動態配置服務哦。數據庫
Eureka 典型的 AP,做爲分佈式場景下的服務發現的產品較爲合適,服務發現場景的可用性優先級較高,一致性並非特別緻命。其次 CA 類型的場景 Consul,也能提供較高的可用性,並能 k-v store 服務保證一致性。 而Zookeeper,Etcd則是CP類型 犧牲可用性,在服務發現場景並沒太大優點;api
Zookeeper的跨語言支持較弱,其餘幾款支持 http11 提供接入的可能。Euraka 通常經過 sidecar的方式提供多語言客戶端的接入支持。Etcd 還提供了Grpc的支持。 Consul除了標準的Rest服務api,還提供了DNS的支持。緩存
Zookeeper 支持服務器端推送變化,Eureka 2.0(正在開發中)也計劃支持。 Eureka 1,Consul,Etcd則都經過長輪詢的方式來實現變化的感知;安全
除了 Zookeeper ,其餘幾款都默認支持 metrics,運維者能夠蒐集並報警這些度量信息達到監控目的;服務器
Consul,Zookeeper 支持ACL,另外 Consul,Etcd 支持安全通道https.架構
目前都有相對應的 boot starter,提供了集成能力。
總的來看,目前Consul 自身功能,和 spring cloud 對其集成的支持都相對較爲完善,並且運維的複雜度較爲簡單(沒有詳細列出討論),Eureka 設計上比較符合場景,但還需持續的完善。
名詞解釋:http://www.jdon.com/37625
補充:http://blog.csdn.NET/chen77716/article/details/30635543