# Azure CosmosDB
[[Microsoft Azure]] のプラネットスケール分散 Key-Value ストア。複数リージョンにわたってデータを保存し、Amazon DynamoDB・Google Firestore と同様の用途を想定する。クライアントはキーとバリューのマッピングを読み書きし、内部ではレプリカセット間のコンセンサスによって整合性を管理する。
## 整合性レベル(5 段階)
クライアントが整合性の強さを選択できる 5 段階を提供する。上ほど厳密で非効率、下ほど高速で信頼性が低い。
| レベル | クライアントから見た動作 |
|---|---|
| Strong Consistency | グローバル順序。常に最新バージョンを参照できる |
| Bounded Staleness | 限定された時間内に古い値が見える可能性がある |
| Session Consistency | トークンを共有するクライアント間でのみ同期(ドキュメント推奨・扱いが難しい) |
| Consistent Prefix | Eventual Consistency に概ね類似 |
| Eventual Consistency | 最終的に古い値が表示されなくなる |
**Session Consistency の落とし穴**: セッショントークンを共有しないクライアント間では整合性が保証されない。Work Dispatcher がメタデータを書き込んだ直後に別クライアント(Worker)がトークンなしで読み取ると、「キーが見つからない」というエラーが発生する可能性がある。この挙動が 28 日間インシデントの根本原因([[@2023__SREcon23Americas__Turning an Incident Report into a Design Issue with TLA+]])。
## TLA+ モデル
[[Joshua Rowe]] が中心となり、開発者の協力のもと 3 ヶ月で構築した再利用可能な TLA+ モデルが公開されている。5 段階すべての整合性レベルでの並行 Key-Value 読み書きをシミュレートする。
- GitHub: https://github.com/tlaplus/azure-cosmos-tla/tree/master/simple-model
- Microsoft Azure 公式ドキュメント(整合性レベル)にもリンクあり