shirokaned - messagepack rpc + kyotocabinet + AnyEvent + Perl による適当な KVS の実装
http://github.com/tokuhirom/shirokaned
- HTTP でデータを取得できる
- そして、その httpd を外部にみせても大丈夫
- インメモリデータベース
- LRU support
- それなりにはやい
- 同時1000接続程度で5000QPS程度でればいいかなー
- mater-master レプリケーションができる
- 想定しているデータサイズは 4KB 程度で、レコード数は100万程度の LRU で OK
- キャッシュ用途なので、slave と master で一貫性は必要ないし、データの更新も一切ない
- value がなければ、再生成できるかんじ
ってかんじの KVS があったらいいなあとおもった。
のでためしにかいてみた。
要素技術としては
- AnyEvent::MPRPC(AnyEvent を用いた messagepack rpc の perl 実装)
- daemontools(ロガーをつけたり --deamonize オプションをつけない理由づけとして使用)
- KyotoCabinet(LRU を TokyoCabinet でつかう方法がよくわからなかったので KyotoCabinet にしたが、よくみたら TokyoCabinet::ADB->open('*') でできる気がした)
- HTTP のハンドラとして Twiggy を利用
- おもうところあって MouseX::Getopt を利用
といったところ。
まあ、この二年ぐらいでみんなで整備してきた/みんなで勉強してきたライブラリをフル活用してるかんじですね。
性能はこんなかんじ。
% ./setter -p 7000 -c 100 -n 100000 8587.018094 reqs./sec. (100000 in 11.645486 seconds) % ./getter -p 7000 -c 100 -n 100000 8368.477729 reqs./sec. (100003 in 11.949963 seconds)
で、結論としては、こういう構成だったらわりと簡単に KVS をつくれるので、用途をしぼってつくるんならわりとアリじゃないかなーということでした。
(まあ、今回のやつについては TT でほぼ要件をみたしているし、十分です。つくってみたかっただけ。)