CAP定理
ノード間のデータ複製においてCAP全部は満たせないという定理
以下
一貫性 (Consistency)……すべてのデータ読み込みにおいて、最新の書き込みデータもしくはエラーのどちらかを受け取る。
可用性 (Availability)……ノード障害により生存ノードの機能性は損なわれない。つまり、ダウンしていないノードが常に応答を返す。単一障害点が存在しないことが必要。
分断耐性 (Partition-tolerance)……システムは任意の通信障害などによるメッセージ損失に対し、継続して動作を行う。
証明は?
2002年にMITのSeth Gilbertとナンシー・リンチがブリュワーの予想の厳密な証明を提出し、定理として確立した
一般にリレーショナルデータベースでは、一貫性(C)と可用性(A)をできるだけ保証する代わりに、ネットワーク分断への耐性(P)を犠牲にしています。ネットワークが途中で切れたり大きく遅延した場合、動作が保証されなくなってしまうわけです。
一方でNoSQLでは一貫性(C)よりも可用性(A)とネットワーク分断への耐性(P)を優先させるものが多く
NoSQLでCAPの別視点が出たので、CAP定理って言葉も注目され始めたらしい
一貫性とは、どのノードに接続したクライアントに対しても、すべて同時に同じデータが表示されることを意味します。 これを実現するためには、データが1つのノードに書き込まれるたびに、そのデータがシステム内の他のすべてのノードに即時に転送または複製される必要があります。その後で初めて、「正常に」書き込みが実行されたと見なされます。
同期保証性ってことか
sta.icon
普通に三つとも満たせそうだが
Cから始める……が、これCってどういうこと?
レスポンスはデータかエラーかじゃないの?
「受け取る」だから「レスポンスが来ない」ことがないってこと?
同期の保証です
全部複製すればええねんな
Aも追加してみようか
2台以上いればいいだけでは?
3台以上でもいいけど
3台あるとした場合、同期も3台全部に走る
1台死んでも、この数が2になるだけ
Q: 最後の一台が死んだら?
これ考えるときりがないから考えなくていい
Pを追加しようか
あ、ダメやな
Cで「全部同期してからok返す」だから、どっか分断されたらアウト
なるほど、この時点でCAまでしか取れないわけかsta.icon
もっと言えばCPは取れない
CA、APしか取れない?
APは?
いけるのでは?
単にA(常に誰かが動いている)とP(内部でどっか切れてもまだ動ける)を担保すればいいから冗長にすればいい
---
まとめると「CPを同時に満たせないから」で済みそうだが
わかんね
証明するほどのことか?
なんか証明してる(読めんけど)
いや、「CPを同時に満たせない」ってことを数学的に厳密に証明するためにはこれくらい必要ってことなんだろうか?