Paxos、Raft演算法當前階段比較穩定的,經過生產環境驗證的開源實現有哪些?

很多項目中都實現了paxos,raft,比如ceph、aerospike、phxpaxos實現了paxos,kudu、rethinkdb、tera等實現了raft,go版本的raft實現更是很多,當前經過生產環境驗證的,比較穩定的,可以復用的有哪些?


我們團隊寫了一個cpp 實現的 raft 的一致性協議庫. Qihoo360/floyd floyd 也已經通過jepsen 的測試.

目前已經用在團隊中的分散式存儲 Qihoo360/zeppelin用於存儲Meta 信息, 目前在公司內部線上有200+ 的機器, 2000+ 節點運行. 在 Qihoo360/pika 的Pika_hub 模塊用於進行leader 的選主.

最大的方便在於是一個庫, 而不是一個服務, 減少了對 zookeeper 的依賴.


補充一下 @張明鋒 的答案。

TiKV 其實是和 etcd share 同一個 raft 實現,只不過一個是 golang 一個是 rust,包括 test cases 基本都是保持一致的,我們和 coreos 一起在互相的 code review 和 design review. 嚴格來說 cockroachdb 的 raft 實現也是早期和 etcd 同源的,不過後來做了很多改動。目前我認為,目前生產環境中驗證過的 raft 實現的事實標準基本就是 etcd 那個實現,它對 paper 里的 raft 做了很多工程上的優化。

另外,tikv 和 cockroachdb 都是 multi-raft 的結構,multi-raft 和 single-raft 還是有很多不一樣的地方,還蠻有意思的。


raft比較著名的實現有etcd, cockrouchDB,tidb


我當時因為 C++ 這邊缺一個 raft 庫,介面乾淨,功能完整,代碼簡潔的那種(練手的不要),就把 etcd/raft 遷移到了 C++,就是 tikv @Ed Huang 他們用的那個,最近補了下文檔。

這是一個狀態機庫,C++ 這邊要在上面做一個高可用日誌複製庫的話比 go 那邊要複雜一些(當然 rust 的情況估計也好不到哪裡去),因為會多考慮底層優化。

代碼在

https://github.com/neverchanje/yaraft

話說其實也有資料庫項目把 kudu 的 raft 完整拆出來的,這個工作量其實不小了,https://github.com/YugaByte/yugabyte-db/tree/master/src/yb/consensus ,當時看到也是蠻震驚的。

所以別看做的人多,覺得 raft 不過如此什麼的,其實一個好用 raft 庫的需求還是很痛的。

另外就是期待一下百度的 braft...


後續準備把騰訊雲的MQ服務,對外開源~ :)

用的是raft協議 https://www.qcloud.com/product/cmq


發個廣告paxosstore:https://github.com/Tencent/paxosstore

一致性協議部分是微信後台存儲目前正在使用的生產代碼 算是經過檢驗了吧


raft 有 java 的 copycat

我們已經用在生產環境了


OceanBase中實現了paxos,但還不能把代碼抽出來複用。


騰訊前一段時間開源了一個PhxPaxos,說他們已經在生產環境上用過,可以看下。


raft官網Raft Consensus Algorithm最後部分有張表格記錄開源項目中raft的實現,至於paxos,微信開源了一個paxos庫tencent-wechat/phxpaxos


推薦閱讀:

CAP理論中的P到底是個什麼意思?
拜占庭將軍問題確保系統正常為什麼需要2k+1個正常節點?
ETH CS Master(全獎) vs UPenn CIS PhD,如何選擇?
TiDB和CockroachDB同為Spanner/F1的開源實現,有哪些重大差異?
分散式資料庫中為什麼要使用 Vector Clock?

TAG:資料庫 | 分散式存儲 | NoSQL | 分散式系統 | 分散式一致性 |