阿里技術大講堂OceanBase專場中曾有專門一場講座介紹OB自己實現的分布式選舉算法:《分布式選舉-破解數據庫高可用性難題》
這里簡單列一下這個選舉算法和raft論文中提到的選舉算法的區別。
如下都是以OB的立場說的:
1)OB使用的選舉算法,選舉開始點靠timer對齊,保證網絡中的參與者都是“同時”發起選舉的;而Raft是一個非同步發起的選舉,往往是先開始選舉的candidate贏得選舉;
2)OB選舉算法有一個預投票階段,可以保證根據特定業務邏輯選主;Raft無法實現特定選主;
3)OB每個選舉周期內的投票不持久化,通過實例啟動后第一個lease周期內不投票的方式,保證任何一個實例在一個lease周期內都不會重復投票;而Raft每輪的投票是持久化的;
4)OB由於選舉起始點需要靠timer對齊,因此對機房的時鍾誤差有要求;基本假設是最大偏差不超過100ms;Raft論文中明確提出其對timing無依賴;
5)OB允許有主狀態下根據指令進行改選,便於運維;
感覺最主要的區別就是如上幾點。