什么是 ETCD
官方定義為:Distributed reliable key-value store for the most critical data of a distributed system
簡單直直譯對就是:分布式系統(tǒng)中最關(guān)鍵的數(shù)據(jù)進行可靠的鍵值存儲
ETCD 名字含義
/etc 是linux 操作系統(tǒng)的配置存儲目錄, d durtubute 分布式縮寫咆贬,簡單理解為分布式配置數(shù)據(jù)庫。
ETCD 特性和應(yīng)用場景
ETCD主要為了存儲系統(tǒng)關(guān)鍵配置數(shù)據(jù),配置數(shù)據(jù)很少修改仰禀,符合讀多寫少特性峻凫,根據(jù)此特性采用MVCC(MVCC Multi-Version Concurrency Control)進行讀寫沖突控制(鎖機制)來提高讀寫效率蒋搜。
ETCD利用btree實現(xiàn)數(shù)據(jù)索引,提高數(shù)據(jù)讀取效率拴孤。
ETCD帶有版本號,可以訪問舊版本的數(shù)據(jù)甲捏,
ETCD本身提供了事務(wù)機制(類比思考:關(guān)系型數(shù)據(jù)庫事務(wù))
ETCD主要為了解決了分布式場景中最為常見的一致性問題演熟,采用
raft一致性算法機制來實現(xiàn)。
ETCD提供了數(shù)據(jù)和服務(wù)的高可用司顿,也是利用了raft一致性算法芒粹,同步多臺服務(wù)器數(shù)據(jù),部分節(jié)點掛掉不影響服務(wù)提供免猾。
ETCD通過watch機制是辕,實現(xiàn)配置文件自動更新檢測,可以實現(xiàn)服務(wù)的動態(tài)配置猎提。
ETCD 底層實現(xiàn)概述
底層數(shù)據(jù)存儲采用BoltDB 一個簡單的支持事務(wù)的golang寫的kv數(shù)據(jù)庫获三,
基于分布式協(xié)議 Raft來實現(xiàn)選主(Leader Election)、復(fù)制日志(Log Replication)锨苏, 實現(xiàn)數(shù)據(jù)高可用(多服務(wù)器備份)和服務(wù)高可用(允許部分節(jié)點掛掉)疙教。
理解ETCD原理核心是理解raft算法,ETCD實現(xiàn)了一個基于raft擴展算法的庫伞租,是一個很經(jīng)典的實現(xiàn)贞谓。raft算法是Paxos算法的簡化實現(xiàn),方便進行工程化葵诈,目前在分布式系統(tǒng)中應(yīng)用較為廣泛裸弦。 TiDB開始也使用ETCD,后來移植ETCD raft 算法庫作喘,實現(xiàn)了自己的raft一致性算法功能理疙。raft算法本身較為復(fù)雜感興趣的朋友 可以自己看相關(guān)的文章,然后可以細研究下ETCD raft 算法庫泞坦,相信會對分布式系統(tǒng)認識會有大的提升窖贤。