2009/9/4 金曜日

[memcached]consistent hashingの動作とマッピングの互換性

あ、どうも、マタノ兄弟商会のマタノです。

んで、ここのところmemcachedでconsistent hashingを実現する方法についてあれこれ調べているのですが、いったん整理しました。

libmemcached
memcacheのクライアントライブラリ

libketama
memcacheのconsistent hashingアルゴリズムライブラリ

◆php_ketama
ketamaに同梱のPHP版ketamaインターフェース(PHP拡張モジュール)

PECL memcached

PHP本家がリリースしているlibmemcachedインターフェース(PHP拡張モジュール)

 
で、それぞれのconsistent hashingの動作とマッピングの互換性を検証してみました。

■consistent hashingについて

▼libmemcached

memcached_behavior_set (hoge, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);

で、consistent hashingが有効に。
詳しくは、

$ man memcached_behavior_set

に。

▼libketama
libketama自体には、memcacheとのやりとり(getやset等)機能はない。
あくまで、与えたkeyに対してconsistentなサーバ名を返すだけ。

▼php_ketama
libketamaと同様。

▼PECL memcached

setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);

で、consistent hashingが有効に。
詳しくは、http://www.php.net/manual/ja/memcached.constants.phpに。

 
■consistent hashingによるマッピングの互換性

 libmemcached  PECL memcached
 libmemcached  libketama
 libketama    PECL memcached
 libketama    php_ketama

というわけで、各ライブラリやモジュールを混在させてアプリケーション開発をするときには、注意が必要です。

それと、PECL memcachedとlibmemcachedのマッピング結果を合わせるには、必ず、サーバ登録に、

 memcached_server_list_append

ではなく、

 memcached_server_list_append_with_weight

を使うようにしてください。
あと、

 memcached_behavior_set (hoge, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);

の指定もです m9っ`・ω・´)


コメントはまだありません »

No comments yet.

HTML convert time: 0.818 sec. Powered by 'WordPress'