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

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

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

ずっと試すつもりでいたけど出来なかったことです。
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を用いる。
以下のようなコマンドを実施

-h IP  -p PORT -q script load "redis.call('hget','TEST1','field1')" -c 100 -n 5000
-p:ポート
-q:qpsだけ
-c:クライアント数
-n:トータルリクエスト数

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

【スクリプトからのhget】

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

    pip install redis
    pip install redis-py-cluster

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

    start = time.time()
    loop = 100000
    for num in range(0, loop):
        rc.hget("TEST", "field10000")
    print(loop/int(time.time() - start))

※rcはredisのコネクション

【結果】

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

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

まとめ

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

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

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

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ