etcd是一個可靠的的分布式KV存儲,由CoreOS公司開發,其底層使用Raft算法保證一致性,主要用于共享配置和服務發現。本書主要從源碼角度深入剖析etcd,首先介紹etcd的背景知識,并介紹如何搭建起源碼環境以及相關的命令。然后從基本的Raft協議開始介紹,幫助讀者了解Raft協議的背景。接著分析etcd-raft模塊對Raft協議的實現,etcd-raft模塊是etcd的核心模塊之一,該模塊也被很多其他的項目中直接作為Raft協議的底層實現。然后介紹Http編程基礎以及etcd-rafthttp模塊的工作原理和具體實現,介紹etcd中如何處理WAL日志文件以及快照數據文件,詳細分析了etcd的底層存儲。最后重點介紹etcd服務端和etcd客戶端的相關內容。
2015至今,負責XS云平臺的基礎架構設計及研發工作,XS云平臺以Kafka為消息總線,收集用戶產生操作日志,為后臺多個數據分析平臺提供數據源。
目 錄
第1章 etcd入門
1.1 etcd簡介
1.2 數據模型
1.3 環境搭建
1.3.1 環境變量
1.3.2 代碼結構
1.3.3 運行
本章小結
第2章 Raft協議
2.1 Leader選舉
2.2 日志復制
2.3 網絡分區的場景
2.4 日志壓縮與快照
2.5 其他技術點
2.5.1 linearizable語義
2.5.2 只讀請求
2.5.3 PreVote狀態
2.5.4 Leader節點轉移
本章小結
第3章 etcd-raft模塊詳解
3.1 raft結構體
3.1.1 Config結構體
3.1.2 Storage接口及其實現
3.1.3 unstable結構體
3.1.4 raftLog結構體
3.1.5 raft實現
3.2 Node接口
3.2.1 node結構體
3.2.2 初始化
3.2.3 run()方法
3.2.4 Node接口實現
3.3 raftexample示例分析
3.3.1 raftNode
3.3.2 HTTP服務端
3.3.3 kvstore
本章小結
第4章 網絡層
4.1 Go語言網絡編程基礎
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
本章小結
第5章 WAL日志與快照
5.1 WAL日志
5.1.1 初始化
5.1.2 打開日志
5.1.3 讀取日志
5.1.4 追加日志
5.1.5 文件切換
5.2 SnapShotter
本章小結
第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
本章小結
第7章 etcd-server詳解
7.1 raftNode結構體
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
本章小結
第8章 etcd客戶端詳解
8.1 GRPC基礎
8.1.1 定義proto文件
8.1.2 服務端
8.1.3 創建客戶端
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接口
本章小結
參考文獻