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

etcd是一個高可用的鍵值存儲系統,主要用於共享配置和服務發現。etcd是由CoreOS開發並維護的,靈感來自於 ZooKeeperDoozer,它使用Go語言編寫,並經過Raft一致性算法處理日誌複製以保證強一致性。Raft是一個來自Stanford的新的一致性算法,適用於分佈式系統的日誌複製,Raft經過選舉的方式來實現一致性,在Raft中,任何一個節點均可能成爲Leader。Google的容器集羣管理系統Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都普遍使用了etcd。html

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

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

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

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

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

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

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

由於設計思路的不一樣,在原生接口和提供服務方式方面,etcd更適合做爲集羣配置服務器,用來存儲集羣中的大量數據。方便的REST接口也可讓集羣中的任意一個節點在使用key value服務時獲取方便。zookeeper則更加的適合於提供分佈式協調服務,他在實現分佈式鎖模型方面較etcd要簡單的多。因此在實際使用中應該根據自身使用狀況來選擇相應的服務。目前有不少支持etcd的庫和工具,好比命令行客戶端工具etcdctl、Go客戶端go-etcd、Java客戶端jetcd。關於etcd的使用和安裝讀者能夠參考官方文檔安全

 

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

分佈式系統一致性問題和Raft一致性算法網絡

etcd 2.0——etcd的首個主要穩定版本發佈了!

etcd是什麼東西?它和ZooKeeper有什麼區別?

CoreOS 實戰:剖析 etcd

.Net client for etcd

https://github.com/jordansjones/Draft

etcd:Kubernetes和Cloud Foundry之間的那些事

Etcd學習(一)安裝和.NETclient測試

Etcd學習(二)集羣搭建Clustering

Etcd學習(三)集羣搭建Clustering中Leader問題

相關文章
相關標籤/搜索