Raftが提供するもの
❖ 協調して合意を取る枠組み!
❖ リーダー選出!
❖(ログ)レプリケーション!
❖ State machine replication!
❖ 異常系はある程度Raftが面倒を見る!
❖ 合意を取って何をするかは
アプリケーションにお任せ
Raft cluster
全ノードが同じ状態を維持
同じ状態を冗長化して可用性UP
R
R R
R R
4
Leader
Follower
問題1: 全ノードがRaftのノードとして動く
I
I
II
II
II
R
R
R
R
R
R
R
R
❖ 頻繁な1対全の通信!
❖Heartbeat: 数10ms単位!
❖ 合意コスト増
“CPU and networking resources can
quickly be bottlenecked under stress
in a large cluster.”
“It is unlikely that 4 nodes will
simultaneously fail so clusters larger
than 9 nodes are not common.”
15
16.
妄想: 将来の構成
I
I I
II
R
R
R
or
I
I I
I I
部分的にRaftノードとして機能
Raftを別クラスタで運用
タイムアウトがシビアなので!
こっちの方が良さそう。
R
R R
16
17.
問題2: ReadにRaftを使ってない
❖ RaftではLeaderとFollowerでコミットのタイミングが違う!
❖Followerが持っている情報を読んではいけない!
❖ Leaderが持っている情報も、本当は直接読んじゃダメ!
❖ 自分の書いた値を読めないことがある!
❖ 読み込みもRaftのコマンドとして実行することで解決
R
R
R
この状態でLeaderが切り替わった瞬間に!
直readが発生すると、元々コミット済みだった!
情報を読めない。レアだが、実際に起こると!
非常に原因を特定しづらい。殺人事件に発展!
することもあるため注意が必要だ。
未コミットコミット済み 17