- [[プログラム一貫性]]
- [[Consistency]]の定義を、操作の順序づけから決定論的なプログラムの結果にシフトする考え方?
- 既存の[[Consistency]]の議論([[Linearizability]]など)では、メモリアクセスの順序を制約することで一貫性を担保していた([[メモリ一貫性]])
- このモデルでは、特定のプログラムの結果の一貫性に、Coordinationが必要かどうかの議論を曖昧にしていた
- 分散システムは非決定性をもたらすので、膨大な状態空間をもたらす
- 我々の興味は、観測可能な動作: プログラムの結果にある
- 「ラインタイムシステムが非決定性をはらんでいるにも関わらず、プログラムは決定的な結果を出力するか?」という問い
- プログラム一貫性の定義: [[Confluence]]: 入力リクエストの集合のどのような非決定的な順序付けやバッチ処理に対しても、同じOutputの集合を生成する場合、単一マシン上の操作は[[Confluent]]といわれる
- (順序を持たない)集合から集合への決定論的な関数とみなせる
- [[Commutative]]な命令列とかはConfluence
- Confluentな操作は、[[Composability]]を持つ
- Confluentな操作の出力が、他のConfluentな操作の入力に使われる場合、その合成関数もConfluent
参考
- [https://cacm.acm.org/research/keeping-calm/](https://cacm.acm.org/research/keeping-calm/)