etcd技術(shù)內(nèi)幕豆瓣.pdf
http://www.www.srpcoatings.com
2020年11月27日
![]() |
| 第1頁 |
![]() |
| 第9頁 |
![]() |
| 第18頁 |
![]() |
| 第28頁 |
![]() |
| 第34頁 |
![]() |
| 第292頁 |
參見附件(204280KB,415頁)。
etcd技術(shù)內(nèi)幕主要從源碼角度深入剖析etcd:etcd的背景知識,如何搭建源碼環(huán)境及相關(guān)命令、Raft協(xié)議的背景,如何處理各種異常場景及相關(guān)擴展、etcd-raft模塊對Raft協(xié)議的實現(xiàn),etcd自帶的raftexample示例、HTTP編程基礎(chǔ),etcd-rafthttp模塊的工作原理和具體實現(xiàn)

內(nèi)容簡介
eted是一個可靠的分布式KV存儲產(chǎn)品,由CoreOs公司開發(fā),其底層使用Rat算法保證一致性,主要用于共享配置和服務(wù)發(fā)現(xiàn)。
本書主要從源碼角度深入剖析eted,首先介紹etcd的背景知識,如何搭建源碼環(huán)境及相關(guān)的命令。接著從基本的Raft協(xié)議開始介紹,幫助讀者了解Raft協(xié)議的背景、如何處理各種異常場景及相關(guān)擴展。然后分析etcd-raft模塊對Raft協(xié)議的實現(xiàn),同時介紹etcd自帶的raftexample示例,幫助讀者了解etcd-raft模塊的基本使用方法。本書還介紹HTTP編程基礎(chǔ)和etcd-rafthttp模塊的工作原理及具體實現(xiàn),以及etcd中如何處理WAL日志文件及快照數(shù)據(jù)文件,并且詳細分析eted的底層存儲,對v2版本和v3版本的存儲都做了詳細的介紹。最后重點介紹etcd服務(wù)端和客戶端的相關(guān)內(nèi)容,eted服務(wù)端會組裝并協(xié)調(diào)前面介紹的各個組件,并且在它們的基礎(chǔ)上擴展出了更多的功能,此外還詳細分析v2和v3兩個版本客戶端的具體實現(xiàn)。
本書適合Go語言開發(fā)者,以及對etcd技術(shù)感興趣的讀者閱讀。
如何閱讀本書
由于篇幅限制,本書并沒有詳細介紹Go語言的基礎(chǔ)知識,但為了便于理解讀者理解eted的設(shè)計思想和實現(xiàn)細節(jié),筆者介紹了一些必需且重要的基礎(chǔ)內(nèi)容,例如,Go語言提供的HTTP功能。
本書共8章,主要從源碼角度深入剖析eted的原理和實現(xiàn)。建議讀者先閱讀前兩章,了解Raft協(xié)議之后,再開始學(xué)習(xí)etcd的工作原理和代碼實現(xiàn)。
第1章簡要介紹etcd的背景知識及其基本的數(shù)據(jù)模型,然后介紹如何搭建源碼環(huán)境及相關(guān)的命令。
第2章從基本的Raft協(xié)議開始介紹,幫助讀者了解Raft協(xié)議的背景知識、大致工作原理、如何處理各種異常場景,以及幾個比較重要的擴展點。
第3章著重分析etcd中的raft模塊對Raft協(xié)議的實現(xiàn),etcd-raft模塊是etcd的核心模塊之一,GitHub上很多其他項目直接使用etcd-raft模塊作為其Raft協(xié)議的底層實現(xiàn)。同時,本章也介紹了eted自帶的raftexample示例,幫助讀者了解etcd-raft模塊的基本使用方法,方便讀者在實踐中直接使用etcd-raft模塊。
第4章簡單介紹HTTP編程基礎(chǔ),以及etcd-rafthttp模塊的工作原理和具體實現(xiàn),其中涉及RoundTripper的基本原理、rafthttp.Transporter的實現(xiàn)及多種Handler的實現(xiàn)。
第5章介紹etcd中如何處理WAL日志文件和快照數(shù)據(jù)文件,其中分析了WAL結(jié)構(gòu)體和Snapshotter的具體實現(xiàn)。
第6章詳細分析etcd的底層存儲,對etcd v2和etcd v3兩個版本的存儲都做了詳細的介紹,不僅分析了底層的KV存儲,還分析了watcher機制和Lessor的實現(xiàn)原理第7章重點介紹etcd服務(wù)端的內(nèi)容,etcd服務(wù)端會組裝并協(xié)調(diào)前面介紹的各個組件,并且在它們的基礎(chǔ)上擴展出了更多的功能。
第8章主要介紹etcd客戶端的相關(guān)內(nèi)容,詳細分析了v2和v3兩個版本客戶端的具體實現(xiàn)。
數(shù)據(jù)模型
etcd支持可靠的鍵值對存儲并且提供了可靠的Watcher機制,其中的鍵值對存儲支持多版本,并且具備能夠"Watch"歷史事件的功能。這里簡單介紹多版本存儲的含義,假設(shè)鍵K1對應(yīng)的值為V1,當我們將K1對應(yīng)的值修改成v2時,etcd并不會直接將V1修改成V2,而是同時記錄V1和V2兩個值,并通過不同的版本號進行區(qū)分。另外,Watch歷史事件的含義是,我們可以向一個Key添加Watcher,同時可以指定一個歷史版本,從該版本開始的所有事件都會觸發(fā)該Watcher.
隨著應(yīng)用不斷運行,鍵值對不斷修改,每個Key都在etcd中保存了多個版本,數(shù)據(jù)量也會越來越大。為了緩解壓力,eted會定期進行壓縮,清理過舊的數(shù)據(jù)。
在很多現(xiàn)代數(shù)據(jù)庫系統(tǒng)中,都用了B樹索引加速查詢,etcd也是如此,其存儲中會維護一個字段序的B樹索引。在B樹索引的每個索引項中,都存儲了一個Key值,這樣可以快速定位指定的Key或是進行范圍查詢。而每個Key值對應(yīng)了多個版本號,etcd中維護了一個全局自增的版本號,為每次事務(wù)分配一個全局唯一的版本號(main revision),事務(wù)中的每個操作也有唯一的編號(sub revision),通過這兩部分可以確定一個唯一的Value值。
每個Key會對應(yīng)多個generation,當Key首次創(chuàng)建時,會同時創(chuàng)建一個與之關(guān)聯(lián)的generation實例,當該Key被修改時,會將對應(yīng)的版本記錄到generation中,當Key被刪除時,會向generation中添加tombstone,并創(chuàng)建新的generation,會向新generation中寫入后續(xù)的版本信息。
在查詢時,先在內(nèi)存索引中通過用戶指定的Key值,查找到該Key值對應(yīng)的全部版本號,然后根據(jù)用戶指定的版本號,從底層存儲中查找到具體的Value值。當然,如果指定的版本號已經(jīng)被etcd壓縮刪除,則無法再查詢到該版本的Value值.
在etcd v3版本中,底層存儲使用的是BoltDB,其中的Key是版本信息(main revisiontsub revision),這樣,在查詢時先通過上述B樹索引查找到對應(yīng)的版本信息,然后在BolDB中通過版本信息查找相應(yīng)的Value值。
etcd技術(shù)內(nèi)幕豆瓣截圖



您現(xiàn)在查看是摘要介紹頁, 詳見PDF附件(204280KB,415頁)。
內(nèi)幕豆瓣_1.jpg)
內(nèi)幕豆瓣_2.jpg)
內(nèi)幕豆瓣_3.jpg)
內(nèi)幕豆瓣_4.jpg)
內(nèi)幕豆瓣_5.jpg)
內(nèi)幕豆瓣_6.jpg)