BRAFT工業(yè)級 Raft 一致性算法實現(xiàn)
BRAFT 是百度開源的基于 BRPC 的 Raft 一致性算法和可復(fù)制狀態(tài)機的工業(yè)級 C++ 實現(xiàn)。最初是為了解決百度各業(yè)務(wù)線上的狀態(tài)服務(wù)單點隱患,后來則幫助百度工程師獨立實現(xiàn)支持高負載和低延遲的分布式系統(tǒng)。
BRAFT 在百度內(nèi)部被廣泛用于構(gòu)建高可用性系統(tǒng),例如:
-
存儲系統(tǒng):Key-Value、Block、Object、File ...
-
SQL 存儲:HA MySQL cluster、distributed transactions、NewSQL systems ...
-
Meta services:Various master modules、Lock services ...
BRAFT 有以下特點:
-
BRAFT 是一個功能完備且經(jīng)過可靠性驗證的 Raft 實現(xiàn),支持 configuration change、prevote、leader transfer 等特性。
-
BRAFT 追求的核心目標(biāo)是高性能,在實現(xiàn)的很多環(huán)節(jié)都進行了精細優(yōu)化,比如無鎖任務(wù)隊列、log 的批量提交和執(zhí)行以及一些邏輯原地執(zhí)行等;
-
接口簡單容易理解,支持自定義擴展其中的 storage,擁有比較完善的錯誤回調(diào)。用簡單的接口實現(xiàn)簡單的概念,BRAFT 配合 BRPC 即使經(jīng)驗不豐富的工程師也可以很容易的快速構(gòu)建出健壯的分布式系統(tǒng)。
在 BRAFT 中,百度主要采用了以下幾點方法來提高性能:
-
數(shù)據(jù)流是全并發(fā)的, leader 寫本地磁盤和向 follower 復(fù)制數(shù)據(jù)是完全同步的。
-
盡可能的提高局部性,充分發(fā)揮不同層面的 cache 的作用。
-
盡可能隔離不同硬件的訪問,通過流水線的形式提高吞吐。
-
盡可能的降低鎖臨界區(qū)大小, 關(guān)鍵路徑上采用 lock-free/wait-free 算法。
