memcachedというかKVS

先月のSoftwareDesignを読むなどして、理解できないということは無いようになった気がするな。

SoftwareDesignの最初の概要がわかりやすくて、KVSというのは、Key が Value で Store なだけではなくて、弱い一貫性のことまで含めることが多いらしい…よーするに、「memcachedみたいなのでどうやって一貫性保証するんだ」という僕の心配は根本から間違っていて、「一貫性が必要無いからmemcachedみたいな構成がとれる」というのが正しかった、というわけだ。
これはどういうことかというと、「書き込みが反映されるまで時間がかかる場合があります」と書いて、許されるでしょうか?という問題で、まあ、そういうメッセージを見たことあるサービスは、一貫性がいらないと判断されたサービスだというようなそういう。

僕の疑問は大体解決されたと思う。

  • ネットワークが速いとかおかしいだろ → HDDよりもずっと速い
  • あんなので一貫性が保証できんのか? → そういうもんです
  • あとキャッシュとかはDBのシステムで対応しろよ → DBは検索とかを横断的にやらないといけないのでKVSほどスケールしない

memcachedの重要な点は、「ネットワーク上のメモリをキャッシュに使ったら速くなりました」という点ではなくて、「弱い一貫性と単純なクエリだけでも現実のサービスでは十分な場合が多いよ」というのと、「弱い一貫性と単純なクエリでよければスケールする実装が作れるよ」ことを示した点なのだ、と、すれば、気持ち悪い点は無くて、ぐっすりと眠れると思う。

もうちょっと発展して考えると、KVSを使ってたときに、あとから「やっぱりトランザクション要りました。テヘッ。」みたいな状況になった場合とか、RDBを使ってたときに、「やっぱりこれじゃ全然スケールしねぇですよ」とかみたいになった時に、それをシームレスに繋ぐことは可能かとかあたりか。まあ考えないけど…