Ticketing
ドキュメント

RPCの種類

フレーム内のtagがRPCの種類を決めます。すべての ペイロードはpostcardでシリアライズされたopenraft型です。

tag名前リクエストペイロードレスポンスペイロード役割
1VoteVoteRequestVoteResponseリーダー選出 — 候補者が他ノードに投票を求める
2AppendEntriesAppendEntriesRequestAppendEntriesResponseログ複製 + ハートビート — リーダーが複製コマンドをフォロワーに伝播する
3FullSnapshot(Vote, SnapshotMeta, snapshot_bytes)のタプルSnapshotResponse遅れたノードにスナップショット全体を送る
  • Vote — リーダーが落ちると、ハートビートが途絶えたノードが候補者になり投票を 要求します。過半数を獲得したノードが新しいリーダーになります。
  • AppendEntries — リーダーがコミット対象のロックコマンドをログエントリとして運びます。 エントリなしのAppendEntriesがそのままハートビートです — 別途のハートビート メッセージはありません。
  • FullSnapshot — ログでは追いつけないほど遅れたノード(または参加したばかりの ノード)に、現在の状態全体を送ります。ストリーミングなしで、1つのフレームに全体を 乗せて送られます。

フロー — リーダーが落ちたとき

ノードA
ノードB
ノードC
リーダーのハートビートが途絶えたことを検知 → 候補者になる
Vote · 投票を要求
Vote · 投票を要求
賛成
自分自身を含む過半数 → 新リーダー
AppendEntries (エントリなし = ハートビート)
AppendEntries (エントリなし = ハートビート)
合意形成RPC(Raft)

新しく選出されたリーダーの最初のハートビートが届いた瞬間、クラスタは通常のサービスに 戻ります — 全体の空白時間は通常0.5〜1秒です。通常運用時のAppendEntries(ログ複製)の 流れは複製コマンドを参照してください。

用語

  • ログ複製 — リーダーが決定したコマンドを順序付きのログに変換し、フォロワーに そのまま記録させること。同じログを同じ順序で適用することで、すべてのノードが 同じ状態に収束します。
  • ハートビート — 定期的に送られる「生きている」という信号。これが途絶えると、 フォロワーはリーダーが落ちたと判断し、選挙を開始します。