ETCD是什么?
ETCD是用於共享配置和服務發現的分布式、一致性的KV存儲系統。
( A distributed, reliable key-value store for the most critical data of a distributed system.)
ETCD是CoreOS公司發起的一個開源項目,授權協議為Apache。
ETCD是一個受到ZooKeeper與doozer啟發而催生的項目,除了擁有與之類似的功能外,更專注於以下四點:
1.簡單:基於HTTP+JSON的API讓你用curl就可以輕松使用。
2.安全:可選SSL客戶認證機制。( https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全性高)
3.快速:每個實例每秒支持一千次寫操作。
4.可信:使用Raft算法充分實現了分布式。
PS:分布式系統中的數據分為控制數據和應用數據。
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來定位數據。