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);
で良い。
普通に動いた。