Tomorrow Will Be A Better Day

Published

- 3 min read

ElastiCache for Redis のスナップショット機能の検証結果メモ

img of ElastiCache for Redis のスナップショット機能の検証結果メモ

ElastiCache for Redisにスナップショット/リストア機能が追加されたので、
今までEC2でslave作っていた運用フローが不要になった。ありがとうAWS!!

ただ、ブログの最後を見てみると、

パフォーマンスを向上させるために、マスターキャッシュノードではなく、リードレプリカでスナップショットを取ることをお勧めします。

どうもこの文章がひっかかったので、少し検証してみた。

検証環境

検証環境としては、以下の構成で実施した。

用途説明
対象redisインスタンスcache.m2.xlarge(コスパはこのインスタンスタイプがよさげ)
負荷がけ用EC2m1.small
appendonlyYes(Cache Parameter Groupsから変更)
rdbファイルサイズ4.7GB(バックアップしてあるrdbファイルを利用)
レプリカノード1

Redisには、redis-benchmarkというベンチマークツールが付属しているので、
Primary Endpointに対して、EC2インスタンスから負荷がけを行ってみる(redis-benchmarkのオプションはデフォルト)

検証結果

結果は以下の通り。

検証項目通常時MASTERからのスナップショット作成時READ REPLICAからのスナップショット作成時性能劣化具合(MASTERのみ劣化:M,READ REPLICAのみ劣化:R,両方劣化×)
PING_INLINE9515.79212.99082.0×
PING_BULK9496.59599.39304.8R
SET9700.49681.59507.4×
GET9397.78820.49412.5M
INCR9494.48969.49516.0M
LPUSH9446.18916.29580.6M
LPOP9710.19442.09128.0×
SADD9404.19043.78644.0×
SPOP9405.49379.39013.0×
LPUSH (needed to benchmark LRANGE)9544.28997.39329.2×
LRANGE_100 (first 100 elements)7065.86693.36669.9×
LRANGE_300 (first 300 elements)3707.73444.73531.3×
LRANGE_500 (first 450 elements)2810.92893.12772.0R
LRANGE_600 (first 600 elements)2311.72369.32216.0R
MSET (10 keys)9363.14414.28919.5×

(※)単位は3回実施した時の平均requests/second

試行回数が少ない(一部性能が向上した値もある)というのもあるけど、スナップショット作成中はおおむねrequests/secondが劣化した。
特に、MSETの性能劣化がものすごく顕著に出るという結果になった。

まとめ

MSETの性能劣化具合が顕著なので、スナップショット作成時はやっぱりread replicaから実施した方が安全のような気がする。
ただ、利用するデータ量やデータ内容によっても結果は違いそうなので、利用者が実際のrdbファイルを使って確認してみるというのがよいのかなと。

その他メモ

検証で使った4.7GBのrdbファイルのスナップショット作成完了までは45分程度。
EC2上でrdbファイルを出力するのは数分程度だったので、ElastiCache for Redisのスナップショット作成時間は相当長い。