CAP定理
分散システムにおいては下の三つのうち二つまでしか同時に保証することはできない。
Consistency 一貫性 - 全ての読み込みは最新の書き込みもしくはエラーを受け取る
Availability 可用性 - 受け取る情報が最新のものだという保証はないが、全てのリクエストはレスポンスを必ず受け取る
Partition Tolerance 分断耐性 - ネットワーク問題によって順不同の分断が起きてもシステムが動作を続ける
ネットワークは信頼できないので、分断耐性は必ず保証しなければならない
ソフトウェアシステムとしてのトレードオフは、一貫性を取るか、可用性を取るかを考えなければならない
選択肢
CP - 一貫性と分断耐性(consistency and partition tolerance)
分断されたノードからのレスポンスを待ち続けているとタイムアウトエラーに陥る可能性がある
CPはのサービスがアトミックな読み書き(不可分操作)を必要とする際には妥当
AP - 可用性と分断耐性(availability and partition tolerance)
レスポンスはノード上にあるデータで最新のものを返す
最新版のデータが返されるとは限らない
分断が解消された後も、書き込みが反映されるのには時間がかかる
結果整合性を求めるサービスの際にはAPを採用するのが妥当
もしくは、外部エラーに関わらずシステムが稼働する必要がある際にも同様
否定
データ指向アプリケーションデザインでは「CAP定理は実用上有益でない」と切り捨てている
打破
GoogleはSpannerをCAであると主張
https://storage.googleapis.com/pub-tools-public-publication-data/pdf/45855.pdf
独自のネットワークインフラを使用しているという条件に基づき、分断がほぼゼロとされる