etcd raft library

https://github.com/coreos/etcd/tree/master/raftgit

import "github.com/coreos/etcd/raft"github

---------------------------------------------------------------------------算法

raft是一個協議,一個節點集羣能夠維護一個複製狀態機。狀態機經過使用複製日誌保持同步。有關Raft的更多詳細信息,請參閱Diego Ongaro和John Ousterhout的「尋找可理解的一致性算法」(https://ramcloud.stanford.edu/raft.pdf)。

這個raft庫是穩定和功能齊全。截至2016年,它是生產中使用最普遍的raft庫,天天服務數萬個集羣。它支持分佈式系統,如etcd,Kubernetes,Docker Swarm,Cloud Foundry Diego,CockroachDB,TiDB,Project Calico,Flannel等等。

大多數Raft實現具備單片設計,包括存儲處理,消息序列化和網絡傳輸。這個庫只是經過實現核心筏算法來遵循簡約的設計理念。這種極簡主義得到了靈活性,肯定性和性能。

爲了保持代碼庫的小並且靈活,庫只實現了Raft算法;網絡和磁盤IO都留給用戶。庫用戶必須實現他們本身的傳輸層,以便經過電報在Raft對端之間傳遞消息。一樣,用戶必須實現本身的存儲層來堅持木筏日誌和狀態。

爲了方便測試Raft庫,其行爲應該是肯定性的。爲了實現這個決定論,庫將raft做爲一個狀態機來模擬。狀態機將消息做爲輸入。消息能夠是本地定時器更新,也能夠是遠程對等體發送的網絡消息。狀態機的輸出是一個三元組{{Messages,[] LogEntries,NextState},它由一系列消息,日誌條目和raft狀態變化組成。對於狀態相同的狀態機,相同的狀態機輸入應始終生成相同的狀態機輸出。

一個簡單的示例應用程序raftexample也能夠幫助說明如何在實踐中使用這個包:https://github.com/coreos/etcd/tree/master/contrib/raftexample
數據庫

 

Feature安全

這個raft實現是Raft協議的一個全功能實現。功能包括:

    領導選舉
    日誌複製
    日誌壓縮
    會員變動
    領導轉移延期
    由領導者和追隨者提供高效的線性化只讀查詢
        在處理只讀查詢以前,領導檢查法定人數並繞過Raft日誌
        追隨者要求領導在處理只讀查詢以前得到安全的讀取索引
    更高效的基於租約的可線性化只讀查詢由領導者和追隨者提供服務
        領導者繞過Raft日誌並在本地處理只讀查詢
        追隨者要求領導在處理只讀查詢以前得到安全的讀取索引
        這種方法依賴於筏組中全部機器的時鐘

這個raft執行還包括一些可選的加強功能:

    樂觀流水線減小日誌複製延遲
    日誌複製的流量控制
    批處理Raft消息以減小同步的網絡I / O調用
    批處理日誌條目以減小磁盤同步I / O
    並行寫入領導者的磁盤
    內部提案從追隨者到領導者重定向
    領導失去法定人數時自動減小
網絡

Notable Users

cockroachdb一個可擴展,可生存,高度一致的SQL數據庫
     dgraph可擴展,分佈式,低延遲,高吞吐量圖形數據庫
     etcd一個分佈式可靠的鍵值存儲
     tikv由Rust和Raft提供支持的分佈式事務密鑰值數據庫
     swarmkit用於編排任何規模的分佈式系統的工具包。
     鏈核心軟件,用於運營許可的多資產區塊鏈網絡
分佈式

 

Usage

raft中的主要對象是一個節點。 使用raft.StartNode從頭開始一個節點,或使用raft.RestartNode從某個初始狀態啓動一個節點。工具

啓動一個三節點羣集性能

相關文章
相關標籤/搜索