etcd:用于服務發現的鍵值存儲系統

jopen 10年前發布 | 22K 次閱讀 etcd

etcd是一個高可用的鍵值存儲系統,主要用于共享配置和服務發現。etcd是由CoreOS開發并維護的,靈感來自于 ZooKeeperDoozer,它使用Go語言編寫,并通過Raft一致性算法處 理日志復制以保證強一致性。Raft是一個來自Stanford的新的一致性算法,適用于分布式系統的日志復制,Raft通過選舉的方式來實現一致性,在 Raft中,任何一個節點都可能成為Leader。Google的容器集群管理系統Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。

在分布式系統中,如何管理節點間的狀態一直是一個難題,etcd像是專門為集群環境的服務發現和注冊而設計,它提供了數據TTL失效、數據改變監 視、多值、目錄監聽、分布式鎖原子操作等功能,可以方便的跟蹤并管理集群節點的狀態。etcd目前的版本是0.4.5,雖然未發布1.0版本(今年會發 布),但其已經使用在多個生產系統中,可見其火熱程度。etcd的特性如下:

  • 簡單: curl可訪問的用戶的API(HTTP+JSON)
  • 安全: 可選的SSL客戶端證書認證
  • 快速: 單實例每秒 1000 次寫操作
  • 可靠: 使用Raft保證一致性

etcd是CoreOS的核心組件,負責節點間的服務發現和配置共享,運行在CoreOS中的應用可以通過etcd讀取或者寫入數據。雖然etcd是為CoreOS而設計,但其可以運行在多個平臺上,包括 OS X、Linux、BSD。

Jason Wilder的一篇博客對分別對常見的服務發現開源項目Zookeeper、Doozer、etcd進行了總結介紹:

Zookeeper是一個用戶維護配置信息、命名、分布式同步以及分組服務的集中式服務框架,它使用Java語言編寫,通過Zab協議來保證節點的一致性。因為Zookeeper是一個CP型系統,所以當網絡分區問題發生時,系統就不能注冊或查找服務。

Doozer是一個一致性的、分布式存儲系統,使用Go語言編寫,通過Paxos來保證強一致性,Doozer項目目前已經停止更新并有將近160個分支。和Zookeeper一樣,Doozer也是一個CP型系統,在網絡分區問題發生時,會有同樣的問題。

etcd是一個用于共享配置和服務發現的高可用的鍵值存儲系統,使用Go語言編寫,通過Raft來保證一致性,有基于HTTP+JSON的API接口。etcd也是一個強一致性系統,但是etcd似乎支持從non-leaders中讀取數據以提高可用性;另外,寫操作仍然需要leader的支持,所以在網絡分區時,寫操作仍可能失敗。

目前有很多支持etcd的庫和工具,比如命令行客戶端工具etcdctl、Go客戶端go-etcd、Java客戶端jetcd。關于etcd的使用和安裝讀者可以參考官方文檔

來自:InfoQ

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!