ETCD是什麼?算法
ETCD是用於共享配置和服務發現的分佈式、一致性的KV存儲系統。安全
( A distributed, reliable key-value store for the most critical data of a distributed system.)網絡
ETCD是CoreOS公司發起的一個開源項目,受權協議爲Apache。運維
ETCD是一個受到ZooKeeper與doozer啓發而催生的項目,除了擁有與之相似的功能外,更專一於如下四點:curl
1.簡單:基於HTTP+JSON的API讓你用curl就能夠輕鬆使用。分佈式
2.安全:可選SSL客戶認證機制。( https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全性高)加密
3.快速:每一個實例每秒支持一千次寫操做。url
4.可信:使用Raft算法充分實現了分佈式。spa
PS:分佈式系統中的數據分爲控制數據和應用數據。.net
ETCD的使用場景默認處理的數據都是控制數據,對於應用數據,只推薦數據量很小,可是更新訪問頻繁的狀況。
Zookeeper,ETCD的比較
基本概念:
•服務註冊—— 一個服務將其位置信息在中心註冊節點註冊的過程。該服務通常會將它的主機IP地址以及端口號進行註冊,有時也會有服務訪問的認證信息,使用協議,版本號,以及關於環境的一些細節信息。
•服務發現—— client端的應用實例查詢中心註冊節點以獲知服務位置的過程。
•
ETCD vs ZK
•一致性與複雜度:ETCD使用[Raft]協議, ZK使用[ZAB](類PAXOS協議),前者容易理解,方便實現;
paxos 和raft的對比: https://blog.csdn.net/colorant/article/details/73887706
•運維方面:ETCD安裝部署與運維簡單,ZK安裝部署複雜,依賴較多,維護相對複雜;
•項目活躍度:ETCD社區與開發活躍,ZK發展緩慢;
•API:ETCD提供HTTP+JSON,跨平臺跨語言,ZK須要使用其客戶端;
•訪問安全方面:ETCD支持HTTPS訪問,ZK在這方面缺失;
•編寫語言:ETCD用go編寫;ZK使用JAVA編寫,偏向於重型應用,有大量依賴。
總而言之,ETCD能夠算得上是後起之秀了。在一致性協議複雜度、運維、安全、項目活躍度等多個角度上,ETCD相比zookeeper都佔據優點。
具體比較分析,詳見:https://blog.csdn.net/shlazww/article/details/38736511
ETCD概念詞彙表
Raft:etcd所採用的保證分佈式系統強一致性的算法。
Node:一個Raft狀態機實例。
Member: 一個etcd實例。它管理着一個Node,而且能夠爲客戶端請求提供服務。
Cluster:由多個Member構成能夠協同工做的etcd集羣。
Peer:對同一個etcd集羣中另一個Member的稱呼。
Client: 向etcd集羣發送HTTP請求的客戶端。
WAL:預寫式日誌,etcd用於持久化存儲的日誌格式。
snapshot:etcd防止WAL文件過多而設置的快照,存儲etcd數據狀態。
Proxy:etcd的一種模式,爲etcd集羣提供反向代理服務。
Leader:Raft算法中經過競選而產生的處理全部數據提交的節點。
Follower:競選失敗的節點做爲Raft中的從屬節點,爲算法提供強一致性保證。
Candidate:當Follower超過必定時間接收不到Leader的心跳時轉變爲Candidate開始競選。
Term:某個節點成爲Leader到下一次競選時間,稱爲一個Term。
Index:數據項編號。Raft中經過Term和Index來定位數據。