Redisのクラスタ化でパフォーマンスを試す

Redisのクラスタ化でパフォーマンスを試す

ずっと試すつもりでいたけど出来なかったことです。
Redisのクラスタ化自体ではなくそのパフォーマンスの確認ですね。

概要

Redisを使う際にスケールアップだけでなく、スケールアウトも視野に入れておきたいので、おおよそでもパフォーマンスを掴んでおく。
詳細にベンチを取るのではなく、単一の構成とクラスタリングした時とで読み(hget)でどのくらい差がでるのか確認したい。

準備

環境は自宅のPCでメモリが32GBあるのでこれにubuntuをいれて4台VMを立ち上げて試す。

【構成】

単一マスター:
192.168.29.140:6379

クラスタ(オールマスター):
192.168.29.137:7000
192.168.29.138:7001
192.168.29.138:7002
※メモリは各4GB振った

【作成概要】

■単一マスター
これは普通にwgetでredis3.0.6を取得してインストール

■クラスタ
単一マスターと同様だが別途、クラスタ作成で使うスクリプト「redis-trib.rb」を稼働させるため、rubyとredis用のライブラリを別途インストールした

実施

1000万レコードで実施した(Redisのメモリは1.3GB程度だったため)
登録は今回あまり気にしていないが若干クラスタの方が遅いように思えた。

【ベンチマークツール】

redis-benchmarkを用いる。
以下のようなコマンドを実施

これを「単一マスター」と「クラスタ構成」両方で試したが特に大きな違いはなかった。
(約55000qps)
これ多分、クラスタ指定でアクセスしていないためではないかと推測した。

【スクリプトからのhget】

pythonでクラスタ用ライブラリがあったので、通常とクラスタ両方で実施した。

これで以下のような簡単なスクリプトで実施。

※rcはredisのコネクション

【結果】

単一マスター:約9100/qps
クラスタ:約8200/qps

やはりリダイレクトする分遅いのではないかと考えられる。

まとめ

単一とクラスタではパフォーマンスに差が出ると思っていたので、ある程度は想定通り。

あと、気をつけたいのは作成されたデータの肥大化でしょうか。

今回だとハッシュを用いてますが、一度作成されたら物理的にそこに蓄積されるため、単一のハッシュ自体が巨大だと注意が必要だなと思いました。

コメント