日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

服务发现框架选型,Consul还是Zookeeper还是etcd

發布時間:2025/4/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务发现框架选型,Consul还是Zookeeper还是etcd 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.servercoder.com/2018/03/30/consul-vs-zookeeper-etcd/

背景

本文并不介紹服務發現的基本原理。除了一致性算法之外,其他并沒有太多高深的算法,網上的資料很容易讓大家明白上面是服務發現。
想直接查看結論的同學,請直接跳到文末。
目前,市面上有非常多的服務發現工具,《Open-Source Service Discovery》一文中列舉了如下開源的服務發現工具。

NameTypeAP or CPLanguageDependenciesIntegration
ZookeeperGeneralCPJavaJVMClient Binding
DoozerGeneralCPGo?Client Binding
EtcdGeneralMixed (1)Go?Client Binding/HTTP
SmartStackDedicatedAPRubyhaproxy/ZookeeperSidekick (nerve/synapse)
EurekaDedicatedAPJavaJVMJava Client
NSQ (lookupd)DedicatedAPGo?Client Binding
SerfDedicatedAPGo?Local CLI
Spotify (DNS)DedicatedAPN/ABindDNS Library
SkyDNSDedicatedMixed (2)Go?HTTP/DNS Library

(1) If using the consistent parameter, inconsistent reads are possible
(2) If using a caching DNS client in front of SkyDNS, reads could be inconsistent


上面表格中,前三個是通用的,后面都是各大公司自己造的輪子,應用范圍并不廣,我也就不深入研究了。
此外,這篇文章是14年寫的,當時它并沒有研究Consul,放到表格中,Consul則應該是General、CP、Go、No dependency、Http/DNS Library。
截止到今天,除了容器編排框架k8s、istio/envoy自己實現了服務發現機制(他們也兼容第三方的服務發現工具),似乎也沒有其他的知名的服務發現框架出現了。
下面我就zookeeper、etcd、consul這三款進行下比較。

比較

zookeeper

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of implementing these kinds of services, applications initially usually skimp on them ,which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to management complexity when the applications are deployed.

官網這么介紹zookeeper的,翻譯過來,zookeeper的功能有:

  • 作為配置信息的存儲的中心服務器
  • 命名服務
  • 分布式同步
  • 分組服務
  • 能看出,zookeeper并不只是作為服務發現框架使用的,它非常龐大。
    如果只是打算將zookeeper作為服務發現工具,就需要用到其配置存儲和分布式同步的功能。前者可以理解成具有一致性的kv存儲,后者提供了zookeeper特有的watcher注冊于異步通知機制,zookeeper能將節點的狀態實時異步通知給zookeeper客戶端。

    zookeeper使用

    zookeeper的使用流程如下:

  • 確保有所選語言的sdk,理論上github上第三方的庫有一些,仔細篩選一下應該可以用。
  • 調用zookeeper接口連接zookeeper服務器。
  • 注冊自身服務
  • 通過watcher獲取監聽服務的狀態
  • 服務提供者需自行保持與zookeeper服務器的心跳。
  • 《Zookeeper C API 指南》寫了八篇文章介紹了如何使用zookeeper的c語言api。

    總得來說,zookeeper需要胖客戶端,每個客戶端都需要通過其sdk與zookeeper服務保活,增加了編寫程序的復雜性。此外,還提供api實現服務注冊與發現邏輯,需要服務的消費者實現服務提供者存活的檢測。

    etcd

    etcd是一個采用http協議的分布式鍵值對存儲系統,因其易用,簡單。很多系統都采用或支持etcd作為服務發現的一部分,比如kubernetes。但正事因為其只是一個存儲系統,如果想要提供完整的服務發現功能,必須搭配一些第三方的工具。
    比如配合etcd、Registrator、confd組合,就能搭建一個非常簡單而強大的服務發現框架。但這種搭建操作就稍微麻煩了點,尤其是相對consul來說。所以etcd大部分場景都是被用來做kv存儲,比如kubernetes。

    consul

    相較于etcd、zookeeper,consul最大的特點就是:它整合了用戶服務發現普遍的需求,開箱即用,降低了使用的門檻,并不需要任何第三方的工具。代碼實現上也足夠簡單。

    Consul has multiple components, but as a whole, it is a tool for discovering and configuring services in your infrastructure. It provides several key features:

  • Service Discovery
  • Health Checking
  • KV Store
  • Multi Datacenter
  • 展開了說,consul的功能有:

  • 通過DNS或HTTP,應用能輕易地找到它們依賴的系統
  • 提供了多種健康檢查方式:http返回碼200,內存是否超限,tcp連接是否成功
  • kv存儲,并提供http api
  • 多數據中心,這點是zookeeper所不具備的。
  • consul使用

    相比于zookeeper的服務發現使用,consul并不需要專門的sdk集成到服務中,因此它不限制任何語言的使用。我們看看consul一般是怎么使用的。

  • 每臺服務器上都要安裝一個consul agent。
  • consul agent支持通過配置文件注冊服務,或者在服務中通過http接口來注冊服務。
  • 注冊服務后,consul agent通過指定的健康檢查方式,定期檢查服務是否存活。
  • 如果服務想查詢其他服務的存活狀態,只需要與本機的consul agent發起一次http請求或者dns請求即可。
  • 簡單點說,consul的使用不依賴任何sdk,依靠簡單的http請求就能滿足服務發現的所有邏輯。
    不過,服務每次都從consul agent獲取其他服務的存活狀態,相比于zookeeper的watcher機制,實時性稍差一點,需考慮如何盡可能提高實時性,問題不會很大。

    總結

    名稱優點缺點接口一致性算法
    zookeeper1.功能強大,不僅僅只是服務發現
    2.提供watcher機制能實時獲取服務提供者的狀態
    3.dubbo等框架支持
    1.沒有健康檢查
    2.需在服務中集成sdk,復雜度高
    3.不支持多數據中心
    sdkPaxos
    consul1.簡單易用,不需要集成sdk
    2.自帶健康檢查
    3.支持多數據中心
    4.提供web管理界面
    1.不能實時獲取服務信息的變化通知http/dnsRaft
    etcd1.簡單易用,不需要集成sdk
    2.可配置性強
    1.沒有健康檢查
    2.需配合第三方工具一起完成服務發現
    3.不支持多數據中心
    httpRaft

    為了以后支持多數據中心,同時為了快速支持不同的語言比如nodejs、python服務,我會選擇consul作為我們的服務發現框架,但是實時獲取服務信息變化通知的問題需盡可能減小。

    參考文獻:
    Consul vs. Other Software
    服務發現:Zookeeper vs etcd vs Consul
    Consul vs 其他軟件
    Comparing ZooKeeper and Consul

    轉載于:https://www.cnblogs.com/davidwang456/articles/9219189.html

    總結

    以上是生活随笔為你收集整理的服务发现框架选型,Consul还是Zookeeper还是etcd的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。