repcachedのmemcached 1.4対応

mdounin(Maxim Dounin)さんが開発しているmemcached、あるいはrepcachedのforkがあるのですが、そこではrepcachedがmemcached 1.4.5に対応しています。

https://github.com/mdounin/memcached/tree/repcached

KLabで開発されていたrepcached(2.2まであります)は、memcached 1.2.8までの対応ですので、モダンなmemcached 1.4系を使うことができなかったわけですが、このmdounin版を使えばレプリ機能を使いつつ、memcached 1.4を使うことができるわけです。(ただ、おそらくマルチスレッドは無効化される。)

mdounin版の最新のものはrepcached 2.3と称していますが、あくまでブランチコードと思われます。なお、この最新版は、repcachedの問題であるところの「CPU使用率100%問題」の修正も入っています。

https://github.com/mdounin/memcached/commit/90ae0dfb122d4a13e3350eb6efd315f431e96772

これを見ると、一時的なネットワーク問題が起きた際の挙動が怪しいのを修正したとか何とか。
テストコードを見ると、以下のようなことをやっています。

  1. ノードBのみ一時停止(suspend)
  2. ノードAに大量更新
  3. ノードAを一時停止・ノードBを再開
  4. ノードBに大量更新
  5. ノードAを再開
  6. 1秒sleep
  7. ノードAからget、ノードBからget

ちょっと試した感じでは、レプリ先プロセスを止めて(ポートは開いたまま)大量の更新を走らせると、CPU使用率が100%になるような…。これが起きなくなるようです。