一 為什么使用etcd
與ZooKeeper相比,etcd更簡單,安裝、部署和使用更加容易,并且etcd的某些功能是ZooKeeper所沒有的。因此,在很多場景下,etcd 比ZooKeeper更受用戶的青,具體表現在如下幾個方面:
1 etcd更加穩定可靠,它的唯一目標就是把分布式一致性KV存儲做到極致,所以它更注重穩定性和擴展性。
在服務發現的實現上,etcd使用的是節點租約(Lease),并且支持Group(多key);而ZooKeeper使用的是臨時節點,臨時節點存在不少的問題。
etcd支持穩定的 watch,而不是ZooKeeper一樣簡單的單次觸發( one time trigger )watch。因為在微服務的環境下,通過調度系統的調度,一個服務隨時可能會下線,也可能為應對臨時訪問壓力而增加新的服務節點,而很多調度系統是需要得到完整節點歷史記錄的,在這方面,etcd可以存儲數十萬個歷史變更。
- etcd支持MVCC(多版本并發控制),因為有協同系統需要無鎖操作。
- etcd支持更大的數據規模,支持存儲百萬到千萬級別的key。
- 相比ZooKeeper,etcd 的性能更好。在一個由3臺8核節點組成的云服務器上,etcd v3版本可以做到每秒數萬次的寫操作和數十萬次的讀提作。
二 上圖是etcd基礎架構圖,按照分層模型,etcd可分為
- 客戶端(Client)層、
- API(API)網絡層、
- Raft(Raft)算法層、
- 邏輯層和存儲層? ?功能如下:
客戶端(Client)層:客戶端(Client)層包括客戶端v2和v3兩個大版本API(API)客戶端庫,提供了簡潔易用的API,同時支持負載均衡、節點間故障自動轉移,可極大降低業務使用etcd復雜度,提升開發效率、服務可用性。
·API網絡層:API網絡層主要包括客戶端訪問服務器和服務器節點之間的通信協議。一方面,客戶端訪問etcd服務器的API分為v2和v3兩個大版本。V2API使用HTTP/1.x協議,V3API使用gRPC協議。同時v3通過網關組件也支持HTTP/1.x協議,便于各種語言的服務調用。另一方面,服務器之間通信協議,是指節點間通過(Raft)算法實現數據復制和領導者(Leader)選舉等功能時使用的HTTP協議。
·Ratt(Raft)算法層:Raft(Raft)算法層實現了領導者(Leader)選舉、日志復制、閱讀指數(Readindex)等核心算法特性,用于保障eicd多個節點間的數據一致性、提升服務可用性等,是ejcd的基石和亮點。
功能邏輯層:etcd核心特性實現層,如典型的KVServer模塊、MVCC模塊、Auth鑒權模塊、Lease(Lease)租約模塊、Compater壓縮模塊等,其中MVCC模塊主要由Tree ndex模塊和Boltdb模塊組成。
·存儲層:存儲層包含預寫日志(WAL)模塊、快照(Snapshot)模塊、boltdb模塊。其中WAL可保障etcd崩潰后數據不丟失,boltdb則保存了集群元數據和用戶寫入的數據。