Memagentを動かせるようにしたときのことを書く。

memagent
simple but useful proxy program for memcached
とかいうものについて書く。

pixivというイラスト系コミュのシステムで行われている方法。
ネットのどっかにスライドがあった。
pixivのシステムはイカで説明するような感じで、memcached利用からkyototycoon利用に移行したらしい。

高負荷環境の場合、kyotoやtokyoなどのDBMによってデータアクセスを高速化できてもその接続によってDBMへのTCPコネクション数が凄まじい数になる。
それを大幅に軽減する方法の一つ。

magent
http://code.google.com/p/memagent/

memcahcedへの接続をプロキシするデーモンなんだが、こいつをwebサーバに常駐させ、バックエンドのkyotoに繋ぐ。
magent自体はtcpコネクションを受け付けず、unixドメインソケットのみで接続を待ち受けるようにする。

例えばkyotoへ、クライアントからはmemcachedプロトコルでアクセスしているなら、それをmagentのunixドメインソケットによる接続に変えれば、magentの機能でunixドメインソケット→keep aliveされたtcp接続へとプロキシしてくれるので腐るほどtcp接続が使われることがなくなる。
もちろん、若干のオーバーヘッドが発生し速度は低下する。

このmagentソースを持ってきたらconfigureがない・そのままmakeが通らない。
まず

glibc-static
がないのでyumで入れた(これに含まれる
libm.a
(math系?)が必要)。
※ちなみに
libevent
も必要である。

それからお約束のMakefile編集。
Makefile内でCFLAGSに

-lrt
(時刻系のライブラリを使うようにする?指定)を追加しないとmakeできなかったので追加した。
makeできたら、

magent -s 192.168.0.x:1978 -p 0 -f /tmp/magent.sock &

とかしたら起動できる。

phpからMemcachedで使うときは、

$m = new Memcached();
$m->addServer('/tmp/magent.sock', 0);

で良い。
普通に動いた。