這篇文章旨在從源碼角度分析ETCD MVCC、Lease、Watch的實現,幫助咱們更好的使用ETCD。git
這是ETCD官網給出的解釋,ETCD是一個KV存儲。如今有太多的KV存儲中間件,咱們爲何要選擇ETCD呢?緣由就是這句話:"distributed", "reliable",ETCD是一個分佈式的、可靠的KV存儲。相比於Redis,ETDC不夠快,但足夠安全,可靠。每個中間件都有本身的特色,我選擇ETCD有兩個緣由:github
在討論以前,咱們先看下ETCD的目錄結構
算法
我認爲,以上這些目錄中,屬於ETCD核心的僅有lease、mvcc、raft、etcdserver,其他都是輔助的功能。其中etcdserver是其餘模塊的整合。segmentfault
另外ETCD之因此是"distributed"、"reliable",依賴於raft的實現。raft是一個共識算法,我以前讀過一篇關於raft的論文(讀的中文版,依然不懂),結合ETCD-raft的代碼,依然有不少模棱兩可的地方,因此這裏不打算討論raft模塊的實現。我一開始寫了一些關於怎麼直接使用ETCD-raft的文章,後來發現了一篇講解更好的,那我就再也不贅述這部分了,這裏直接貼出來。
想了解raft的同窗:安全
以上三者結合着看,我感受是學習raft最直接的方法了數據結構
如何使用ETCD-raft模塊:
https://zhuanlan.zhihu.com/p/...
這篇文章我認爲已經很詳細的說明raft模塊的使用,建議閱讀mvc
那麼此次我想與你們討論的是ETCD中MVCC、Watch、Lease這三者的實現,討論ETCD是如何實現這些功能的。涉及到的數據結構有BTree、ADT(紅黑樹)、優先級隊列。分佈式