In this paper, we show the surprising result that no completely asynchronous consensus protocol can tolerate even a single unannounced process death.
- Byzantine faultは考慮せず(もっとゆるくCrash faultしか仮定していない)、信頼性のある通信路があって、Exactly-onceのメッセージ配信が可能と仮定しても、ダメ!
- Determinisitc Consensusを仮定している
論文
2. Consensus Protocols
-
Consensus Protocol の定義: 個のプロセスからなるAsynchronous System
- 各プロセスがもつinternal state:
- 1bitの入力レジスタ
- の値を持つwrite-onceな出力レジスタ (初期値は, or が決定状態)
- 無限の容量を持つinternal storage
- program counter
- 各プロセスは状態遷移関数に従い決定論的に作用する
- 他のプロセスとはメッセージングにより通信する
- : メッセージバッファにを置く
- : メッセージバッファからを削除し、を返す。メッセージがなければを返す
- メッセージはEventual Deliveryが保証されている
- Systemのconfiguration : 各プロセスの内部状態から構成される
- step: configurationの遷移
- event によって引き起こされる
- いくつかのプロセスがとなる決定状態になるとき、は決定値を持つ
- step: configurationの遷移
- 各プロセスがもつinternal state:
-
故障モデル
- プロセスは、無限に多くのstepを持つ場合nonfaulty
- それ以外はfaulty
- Crash faultを想定しているということだろう
- 最大で1つのプロセスのみ故障していて、それ以外のnonfaultyプロセスにはメッセージがeventuallyに届けられる
-
Consensus Protocolのcorrectness
- Partially correct
- No accessible configuration has more than one decision value
- どのような遷移可能なConfigurationも、複数の決定値を持たない
- For each , some accessible configuration has decision value v
- 0と1それぞれについて、その値を決定値とする遷移可能なConfigurationが存在する
- No accessible configuration has more than one decision value
- Totally correct
- 1つのfaulty processがいても、partially correctかついくつかのプロセスが決定状態にたどり着ければOK
- Partially correct
-
Lemma 1 (scheduleのcommutativity: あるconfiguration から、schedules がそれぞれconfigurationsを導くとする。とのstepを取るプロセスの集合がdisjointである場合、にを適用し、またにを適用することで同じconfigurationを導くことができる
- disjoint: 2つのscheduleの間で、stepを実行するプロセスの集合に共通部分がない
- まあそりゃ、例えばプロセス群の半分がを受け取って、そのあと残りがを受け取ってになるのと、その逆は、結果が一緒だよね
Main result
- Theorem 1: No consensus protocol is totally correct in spite of one fault
- 高々1つの故障にも関わらず、totally correctなconsensus protocolはない (Asynchronous Systemの場合は)
証明
- 背理法を用い、逆には1つのfaultがあってもtotally correctであると証明しようとしたときに矛盾が生じることでTheorem 1を証明する
- 証明の流れ
- まだ決定されていない初期構成がいくつか存在することを証明する
- システムが特定の決定をするようなステップを回避するadmissible runを組み立てられることを示す
- TODO: 続きを読む