概要
Program Consisitency : Consistency の定義を、操作の順序づけから決定論的なプログラムの結果にシフトする考え方?
既存のConsistency の議論(Linearizability など)では、メモリアクセスの順序を制約することで一貫性を担保していた
このモデルでは、特定のプログラムの結果の一貫性に、Coordinationが必要かどうかの議論を曖昧にしていた
どのようなProblemであっても、Coordinationを必要としない解があるのか、それとも必要なのかをどうやって知ることができるのか?
アナロジー: 交差点問題。一時停止の信号をどう制御するかに腐心しなくても、片方の道にトンネルを掘れば信号自体をなくすことができる
Coordination-free なComputational Problem: Coordinationを使わずに一貫性のある出力を計算することができる分散実装が存在するComputational problem
どのような問題群はCoordination-freeなのか? そしてどのような問題群はその外に位置するのか?
Coordination-freeな例: Distributed Deadlock detection では、Wait-for graph の全体が見えていなくても部分グラフにサイクルを見つけた時点でそこでデッドロックが発生していることがわかる
Coordination-freeでない例: Distributed GC では、Rootからの参照グラフ全体が見えないとObjectの参照が一切ないことがわからないので、捨てられない。グラフ全体を知るためにCoordinationが必要
Def 1. A problem P is [monotonic if for any input sets S , T where S ⊆ T , P ( S ) ⊆ P ( T ) ]
Theorem 1. Consistency As Logical Monotonicity (CALM): A problem has a consistent, corrdination-free distributed implementation if and only if it is monotonic
monotonicである場合、かつその場合に限り、問題は一貫性のある、Coordination-freeな分散実装を持つ
直感的には、monotonicな問題は、情報(Input)が欠落していても安全であり、協調無しで進めることができる。逆に非monotonicな問題は、新しい情報(Input)に直面したときにある性質の真理が変化することを懸念しなければならない。したがって、すべての情報が到着したことを知るまで先に進めない
monotonicな問題は、inputの到着順序に依存しない。non-monotonicな問題は、入力の順序で出力が変わる
Relational transducer : 形式的な分散計算モデル
分散計算可能性の証明には、何らかの形式的な分散計算モデルが必要なので、amelootらはRelational transducer を用いた
操作: Relational transducerは、イベントループで以下の操作を順番に実行する
Ingest and apply: 順序付けされていないリクエスト(レコード挿入・削除)のバッチを読み込んで、適用する
Query: ローカルの[Relation] をクエリして、計算処理を行う
Send: クエリの結果をローカル・他マシンに送る
Theorem 1のifの証明の概要: monotonicなRelational transducer のネットワークでは、最終的に決定論的な入力を得て、決定論的な出力を生成する。また、実行中の任意の時点において、P ( S ) ⊆ T ( S ) 。
only ifの証明:
メッセージを、Relational transducerのデータフローメッセージと、他のCoordination に使うメッセージを分けて議論を進める。
仮にデータが1箇所にすべて集められているとして、それでも送られるデータってのはCoordination message。だって明らかにデータフロー以外の目的(=Coordination )に使われているから(kekeho)
うーんそうっすけど、でもほんとに? 納得感があまりない(kekeho)
非単調操作が常にCoordination messageを送る必要があることを証明する
ここ具体的にどう証明するんだろう。証明した論文を読まねば(kekeho)
メモ
CALMは、CAP定理 のC,A,Pが同時に満たせる問題のクラスを規定する
Monotonic Problemは、協調が必要ないだけでなく、ネットワークメンバーシップ の知識を必要としない問題でもある
うんちく
PODS 2010で予想が発表されて、amelootらが色々形式化とか証明とかをした
Bloom言語 で活用されている?
参考資料