etcd是一個可靠的的分布式KV存儲,由CoreOS公司開發(fā),其底層使用Raft算法保證一致性,主要用于共享配置和服務(wù)發(fā)現(xiàn)。本書主要從源碼角度深入剖析etcd,首先介紹etcd的背景知識,并介紹如何搭建起源碼環(huán)境以及相關(guān)的命令。然后從基本的Raft協(xié)議開始介紹,幫助讀者了解Raft協(xié)議的背景。接著分析etcd-raft模塊對Raft協(xié)議的實現(xiàn),etcd-raft模塊是etcd的核心模塊之一,該模塊也被很多其他的項目中直接作為Raft協(xié)議的底層實現(xiàn)。然后介紹Http編程基礎(chǔ)以及etcd-rafthttp模塊的工作原理和具體實現(xiàn),介紹etcd中如何處理WAL日志文件以及快照數(shù)據(jù)文件,詳細分析了etcd的底層存儲。最后重點介紹etcd服務(wù)端和etcd客戶端的相關(guān)內(nèi)容。
2015至今,負責(zé)XS云平臺的基礎(chǔ)架構(gòu)設(shè)計及研發(fā)工作,XS云平臺以Kafka為消息總線,收集用戶產(chǎn)生操作日志,為后臺多個數(shù)據(jù)分析平臺提供數(shù)據(jù)源。
目 錄
第1章 etcd入門
1.1 etcd簡介
1.2 數(shù)據(jù)模型
1.3 環(huán)境搭建
1.3.1 環(huán)境變量
1.3.2 代碼結(jié)構(gòu)
1.3.3 運行
本章小結(jié)
第2章 Raft協(xié)議
2.1 Leader選舉
2.2 日志復(fù)制
2.3 網(wǎng)絡(luò)分區(qū)的場景
2.4 日志壓縮與快照
2.5 其他技術(shù)點
2.5.1 linearizable語義
2.5.2 只讀請求
2.5.3 PreVote狀態(tài)
2.5.4 Leader節(jié)點轉(zhuǎn)移
本章小結(jié)
第3章 etcd-raft模塊詳解
3.1 raft結(jié)構(gòu)體
3.1.1 Config結(jié)構(gòu)體
3.1.2 Storage接口及其實現(xiàn)
3.1.3 unstable結(jié)構(gòu)體
3.1.4 raftLog結(jié)構(gòu)體
3.1.5 raft實現(xiàn)
3.2 Node接口
3.2.1 node結(jié)構(gòu)體
3.2.2 初始化
3.2.3 run()方法
3.2.4 Node接口實現(xiàn)
3.3 raftexample示例分析
3.3.1 raftNode
3.3.2 HTTP服務(wù)端
3.3.3 kvstore
本章小結(jié)
第4章 網(wǎng)絡(luò)層
4.1 Go語言網(wǎng)絡(luò)編程基礎(chǔ)
4.1.1 http.Server
4.1.2 RoundTripper
4.2 etcd-rafthttp模塊詳解
4.2.1 rafthttp.Transporter接口
4.2.2 Peer接口
4.2.3 pipeline
4.2.4 streamWriter實例
4.2.5 streamReader實例
4.2.6 snapshotSender
4.3 Handler實例
4.3.1 pipelineHandler
4.3.2 streamHandler
4.3.3 snapshotHandler
本章小結(jié)
第5章 WAL日志與快照
5.1 WAL日志
5.1.1 初始化
5.1.2 打開日志
5.1.3 讀取日志
5.1.4 追加日志
5.1.5 文件切換
5.2 SnapShotter
本章小結(jié)
第6章 storage
6.1 etcd v2版本存儲
6.1.1 node
6.1.2 Event
6.1.3 watcher和watcherHub
6.1.4 store
6.2 etcd v3版本存儲
6.2.1 backend
6.2.2 watcher機制
6.2.3 Lessor
本章小結(jié)
第7章 etcd-server詳解
7.1 raftNode結(jié)構(gòu)體
7.2 RaftCluster
7.3 EtcdServer
7.3.1 初始化
7.3.2 注冊Handler
7.3.3 啟動
7.4 ApplierV2和applierV3
7.4.1 ApplierV2
7.4.2 applierV3
7.5 AlarmStore
本章小結(jié)
第8章 etcd客戶端詳解
8.1 GRPC基礎(chǔ)
8.1.1 定義proto文件
8.1.2 服務(wù)端
8.1.3 創(chuàng)建客戶端
8.2 Client v3
8.2.1 kvServer
8.2.2 EtcdServer
8.2.3 Client
8.3 Client v2
8.3.1 KeysAPI接口
8.3.2 httpClient接口
本章小結(jié)
參考文獻