Cache::Memcached::Fastがmemcached clientのライブラリとして重要な理由

これはConsistent Hashingの実装があるからということに尽きるのではないかと思いいます。

memcachedのサーバーを追加するときには、Capacity Planning上、Capacityが足りなくなるタイミングで行います(追加するときには負荷が上がりすぎているという状況もあるでしょう)。

そうしたときに、memcachedサーバーの追加により極端にキャッシュヒット率が下がってしまっては、極端にサーバーの負荷が高まってしまいます。それでは、memcachedサーバーの追加したときに、極端にシステムがスローダウンする事になります。

それを防ぐために、Consitent Hashingというアルゴリズムがあります。Consistent Hashingについては、tmaesakaさんの記事に詳しく説明が書いてあります。
http://alpha.mixi.co.jp/blog/?p=158

実験結果を見ればわかるように、Consistent Hashingありの場合となしの場合では、キャッシュヒット率に50%程度(4->5台)もの差がでてしまいます。これだけ差がでてしまうと、サーバーの負荷はかなり変わってきますね。

ですから、Consistent Hashingのようなキャッシュを分散させ、サーバーを追加してもキャッシュヒット率を高い状態に保つための技術が重要になります。ですから、そのアルゴリズムを実装しているCache::Memcached::Fastが重要になるということになります。

# id:kazeburoさんの、「memcached in mixi」は、Cache::Memcached::Fastの使い方の細かいtipsまで書いてあり、これもまた素晴らしいドキュメントですね。

  • connectionを維持するために、Cache::Memcached::Fastのインスタンスを保持しておく
  • max_failuresとfailure_timeoutのオプションを使用して、failure_timeoutの時間内にmax_failuresに達したサー バには接続しない

など。

http://alpha.mixi.co.jp/dist/memcached_in_mixi.pdf

# Cache::Memcached::libmemcachedも今はconsistent hashingのサポートをしているというコメントをtokuhiromさんから頂きました。Cache::Memcached::Fast、Cache::Memcached::libmemcachedがConsistent Hashingをサポートしているということになりますね。