etcd是一個高可用的鍵值存儲系統,主要用于共享配置和服務發現。etcd是由CoreOS開發并維護的,靈感來自于 ZooKeeper 和 Doozer,它使用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更適合作為集群配置服務器,用來存儲集群中的大量數據。方便的REST接口也可以讓集群中的任意一個節點在使用key value服務時獲取方便。zookeeper則更加的適合于提供分布式協調服務,他在實現分布式鎖模型方面較etcd要簡單的多。所以在實際使用中應該根據自身使用情況來選擇相應的服務。目前有很多支持etcd的庫和工具,比如命令行客戶端工具etcdctl、Go客戶端go-etcd、Java客戶端jetcd。關于etcd的使用和安裝讀者可以參考官方文檔。
https://github.com/jordansjones/Draft
文章列表