Pages

2011/03/21

ネットワーク経由でmembaseとmemcachedを比較

memcachedは便利だがスケールさせるとなるといろいろ考え方がある。

プロダクトもいろいろあるが、memcachedの本家が作っており導入が簡単なmembaseを試してみた。
ネットワーク越しだと割り切ればそれなりだ。



比較用の環境


クライアント×1
memcachedサーバ×1
membaseサーバ×2(クラスタ)

クライアントからmemcachedとmembaseにそれぞれアクセス。
 

動作テスト兼速度比較のシーケンス


この用に動作させて、データの整合性をチェックしつつ回す。


  1. membaseAにsetする


  2. setした値をmembaseBからgetする

  3. setした元値とgetした値を比較する

  4. membaseAからdeleteする

  5. deleteしたはずのキーをmembaseBからgetする

  6. getできたらだめ



というシーケンス、1週当たりmemcacheアクセスは4回。
 


比較の結果


それぞれ10000回をまわしてみて時間をとった。

memcached(TCPでリモート)


# time bundle exec ruby ./memcached-cli2.rb 10000

real 1m23.989s
user 0m10.330s
sys 0m2.840s


ネットをまたぐとそれなりに時間がかかる、1分半。


membase(TCPでリモート)



# time bundle exec ruby ./memcached-cli.rb 10000

real 1m45.161s
user 0m10.290s
sys 0m2.680s


20秒くらいの差。
40000クエリで20秒差が発生と考えると、 1クエリあたり0.5ms程度の性能差があるのかね。
 


参考:ローカル動作memcachedの結果


参考までにローカルのmemcachedに向けて同じテストをしてみた。

# time bundle exec ruby ./memcached-cli2.rb 10000

real 0m5.096s
user 0m3.070s
sys 0m0.950s


同じ処理だと5秒でおわる、だいぶ差はあるね。

そもそもネットワーク越しのmemcached自体がmongodbより遅かったりと微妙な所は多い。
 


まとめ


単純にmemcache互換でクラスタしたかったら構築の楽なmembaseもあり。すでにネット越しでmemcachedを共有しているなら特に。
 

データの永続化を考慮するとkumofsとかokuyamaをちゃんと検討すべきで、ローカルmemcachedの速度を求めるなら設計とかから見直すほうがいいかもね。
 

0 件のコメント:

コメントを投稿