KyotoTycoonが以前からすごく気になっていたのですが、
次の開発で導入すべく動作検証してみました。
まずは、KyotoTycoon + KyotoCabinet の気になるところを紹介すると。
- DBがキャッシュ、B+ツリー、ハッシュなど選べる
- ホットバックアップ
- 非同期レプリケーション
- デュアルマスタ
- スナップショット これいいかも。lzo圧縮も効く。リカバリー用にも使える。
- プラグインでmemcachedプロトコルが使える
- lua拡張も使えるので、やろうと思えばなんでもあり。
- noreplyを使うと何倍も速くなるらしい。
- writebackで書き込むと何倍も速くなるらしい。
ブログがとても参考になります。
http://fallabs.com/blog-ja/promenade.cgi
テスト環境(DELL PowerEdge R200改)
CPU | Intel Xeon CPU X3360 2.83GHz (4core) |
メモリ | 8GB |
HDD | 1TB (Hitachi HDT721010SLA360) |
OS | CentOS 6.0 (2.6.32-71.29.1.el6.x86_64) |
KyotoCabinetインストール
yum install lzo-devel lzma-devel xz-devel
cd /usr/local/src
wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.70.tar.gz
tar zxfv kyotocabinet-1.2.70.tar.gz
cd kyotocabinet-1.2.70
./configure --prefix=/usr/local/kyotocabinet --enable-lzo --enable-lzma
make
make install
echo /usr/local/kyotocabinet/lib > /etc/ld.so.conf.d/kyotocabinet.conf
ldconfig
KyotoTycoonインストール
yum install lua-devel.x86_64
cd /usr/local/src
wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.51.tar.gz
tar zxfv kyototycoon-0.9.51.tar.gz
cd kyototycoon-0.9.51
./configure --prefix=/usr/local/kyototycoon --with-kc=/usr/local/kyotocabinet --enable-lua
make
make install
echo /usr/local/kyototycoon/lib > /etc/ld.so.conf.d/kyototycoon.conf
ldconfig
ktserver起動オプション
ktserver \
-port 11311 \
-tout 10 \
-th 16 \
-log /var/kt/log/ktserver.log -ls \
-ulog /var/kt/log/ulog -ulim 256m \
-sid 1 \
-bgs /var/kt/snapshot -bgsi 180 -bgsc lzo \
-pid /var/kt/log/kt.pid \
-cmd /var/kt/bin \
-plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so \
-plex "port=11312#opts=f#tout=10" \
"/var/kt/db/casket.kch#opts=l#bnum=20000000#msiz=8g#dfunit=8"
性能評価は、使い慣れたPerlではなくあえてPHP。
daemontoolsでktserverを起動し、次のバッチを実行した。
PHPソースコード
<?php $data = array( 'name' => 'testname', 'testdata' => array(1,2,3,4,5,6,7,8,9,0,'abcdefghijklmnopqrstuvwxyz', 'userid' => 'testuserid', 'entry' => '2011-10-20 12:00:00' ) ); $mem = new Memcached(); $mem->addServer('localhost',11312); for ($i = 0; $i < 10000000; $i++) { $guid = md5(uniqid(mt_rand(),true)); $guid = substr($guid,0,21); $mem->set($guid, $data); } ※pecl memcached 2.0.0b2 (libmemcached 0.53)を使用。 perlならCache::Memcached::Fastで試しますね。
ベンチマーク結果
- setの結果(1000万件登録)
使用メモリ | 2.0g |
ファイルサイズ | 2.0g |
スナップショット | 227M |
性能 | 12300qps |
- getの結果
性能 | 15000qps |
バッチ実行時はloadavgは常時1以下でかなり快適です。
チューニングの余地があるんでしょうが、
本番環境では常に負荷が低い方がよいこともあり、このままでも十分かも。
また、スナップショットのファイルサイズに感動ですね。
バックアップとか助かります。
0 件のコメント:
コメントを投稿