Q&A
Q1:拋磚引玉問一下,swankit 的典型部署是跨數(shù)據(jù)中心部署嗎?如果是的話,raft 的心跳時間你們的經(jīng)驗值是? 在網(wǎng)絡抖動的情況下,如何避免 follower 頻繁發(fā)起新 Term 的選舉?
A1:由于目前我們的項目還沒有大規(guī)模的應用到生產(chǎn)所以心跳和選舉的間隔參考的swarmkit和etcd分別設置的1秒和10秒。目前我們的實現(xiàn)方式是不支持跨數(shù)據(jù)中心的部署的。至于如何避免follower頻繁發(fā)起新的term選舉目前還只有設置選舉間隔這一條了。
Q2:Raft和Multi-Paxos的區(qū)別?
A2:Raft可以說是從Paxos 中發(fā)展出來的,答:簡單來說就是 Raft 在理解和實現(xiàn)都要比 Multi Paxos 要簡單,主要體現(xiàn)在兩階段的限制。Paxos 出現(xiàn)的太早了,嚴格的證明,非常的學術,有興趣的可以去看 Lamport 老的論文,包括最早那篇和 make simple,make live。我也不敢說理解透徹,只是了解到谷歌的 Chubby 是基于Multi Paxos 實現(xiàn)的。至于實踐上的區(qū)別可以參考http://bingotree.cn/?p=614。
Q3:第一張圖里,顯示了3個raft節(jié)點,一個leader,兩個follower,那律師節(jié)點是隨機的么?另外,圖中顯示,心跳是兩兩節(jié)點完成的,而不是用連到一個交換機,這種方式會不會有什么問題?
A3:由于在Raft節(jié)點中任何一個節(jié)點都可以成為候選者向其他節(jié)點請求投票所以需要 兩兩之間互相通信, 所以如果不是連到同一交換機導致節(jié)點之間無法互相通信是有問題的。
Q4:請問這次采用了哪個raft的開源實現(xiàn)?還是自己實現(xiàn)了raft協(xié)議?
A4:用的是 coreos 的 etcd/raft 庫 https://github.com/coreos/etcd/tree/master/raft。