概要

特徴

  • Linear View Change: O(n)のメッセージ複雑性View changeができる (カスケード障害時)
  • Optimistic Responsiveness: リーダーは、個の応答を待つだけで良い

システムモデル

プロトコル

  • Viewごと1リーダーがいる
  • 各レプリカにはローカルデータ構造として、保留コマンドのTreeがある
    • Tree: 各ノードにコマンド・メタデータ・親リンクが含まれる
    • 枝が単調に(分岐せずという意味?)伸びていく
  • Treeがコミットされる
    • ViewのリーダーがTreeを提案する
    • PREPARE・PRE-COMMIT・COMMITの3フェーズで、レプリカから票を集める
    • Quorum Certificate (QC)を集める。これ閾値署名で実現している

データ構造

  • Message m:
    • m.viewNumber: View number
    • m.type: NEW-VIEW, PREPARE, PRE-COMMIT, COMMIT, DECIDE
    • m.node: 提案された葉ノード
    • m.justify: 必要に応じてQCが格納される
    • m.partialSig: メッセージの部分署名
  • Quorum Certificates

PREPARE phase

  • (n - f)のレプリカから、New viewメッセージを受け取ることで自身がリーダーとしてスタートする
  • レプリカが受信した最も高いPrepare QC(ない場合は)を運搬

PRE-COMMIT phase

  • リーダーが現在の提案curProposalに対する(n - f)個のPREPARE票を受信すると、それらをprepareQCに結合する
  • リーダーは、PREPAREメッセージでprepareQCをブロードキャストする
  • レプリカは、提案の署名付きダイジェストを持つPRE-COMMIT票でリーダーに応答する

COMMIT phase

  • リーダーは個のPRE-COMMIT票を受信すると、それをprecommitQCに結合し、COMMITメッセージでブロードキャスト
  • レプリカは、COMMIT票で応答
  • (n - f)のCOMMIT表を受け取ったらcommitQCに結合し、DECIDEしておしまい
  • レプリカはView numberをインクリメントし、次のビューを開始する

メモ

参考文献