ElastiCacheでValkeyがサポートされたけど何が良いのか検証してみた

メディア統括本部 サービスリライアビリティグループ(SRG)の鬼海雄太(@fat47)です。
#SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。
本記事は、Amazon ElastiCacheでValkeyがサポートされたが、性能面とコスト面で嬉しいことがあるよということを書いています。
なにかの役に立てば幸いです。
 

ElastiCacheでValkeyがサポート!


2024/10/9(JST)にAmazonのブログでElastiCacheとMemoryDBにてValkeyがサポートされたことが発表されました。

Valkeyって何者


ValkeyはRedisをフォークしたOSSプロダクトです。
 
Redisのライセンス改定により、Redis7.4からホスティングサービスでRedisを提供するには、Redis社との契約が必要になりました。
 
改定をうけ、AWSやGoogle Cloudなどパブリッククラウド提供各社は、Valkeyを提供することを発表しています。

Valkey と Redisで性能比較してみた(ついでにr6gとr7gでも比較)


簡単に、memtier_benchmarkを用いてElastiCache RedisとValkeyで性能比較をしてみました。
ElastiCacheの前提条件として、シングルAZでクラスターモードは無効で作成しています。

負荷をかける環境

AMI: amazon/al2023-ami-2023.6.20241010.0-kernel-6.1-x86_64
インスタンスサイズ: m7a.xlarge
 
memtier_banchmark導入
 
memtier_banchmark実行コマンドとオプション
クライアント数は50,スレッドは4、リクエスト数は100000
ratioで読み込みと書き込みを5対5にしています。
key-patternはランダムで、keyの最大を5000に絞ることでGETのキャッシュミスが少なくなるようにしています。
総リクエスト数はクライアント数50 * スレッド数4 * リクエスト数100000 = 2000万リクエスト
になります。
 
この負荷をかけるコマンドを各環境で3回ずつ実行し、その平均値を記録しています。

負荷をうける環境

A環境:redis-cache.6g.large(エンジンバージョン 7.1)
B環境:valkey-cache.6g.large(エンジンバージョン 7.2)
C環境:redis-cache.7g.large(エンジンバージョン 7.1)
D環境:valkey-cache.7g.large(エンジンバージョン 7.2)

比較結果

環境平均実行完了時間(sec)平均スループット(ops/sec)平均レイテンシ(msec)A環境とのスループット比較
A環境:redis-cache.r6g.large49s402034 49.73ms0%
B環境:valkey-cache.r6g.large43s456866 43.78ms12.00%
C環境:redis-cache.r7g.large34s583910 34.35ms31.15%
D環境:valkey-cache.r7g.large31s631888 31.65ms36.68%
 
平均スループットをグラフ化したものがこちら。
r6g同士のredisとvalkeyを比べると12%性能が向上した結果となりました。
r6gのredisをr7gにタイプ変更すると、31.1%の性能が向上しました。
さらに、r6gのredisをr7gにタイプ変更したうえでvalkeyに変更すると、36.68%の性能向上となりました。
 
平均レイテンシも早くなっています。
 
提供予定のValkey8.0の性能向上も楽しみですね。

ValkeyとRedisの費用面の比較


Redisと比べてValkeyは費用が安くなるようです。
サーバーレスで33%、ノードベースでも20%安いようです。
 
先に紹介したAmazonの公式ブログの内容から一部翻訳して引用します。
ElastiCache Serverless for Valkeyの価格は、ElastiCache Serverless for Redis OSSよりも33%低く、 ノードベースのElastiCache for Valkeyの価格は、他のノードベースのElastiCacheエンジンよりも20%低い
 
Valkeyの料金は料金表からも確認できます。
 
以下は料金表の情報から一部抜粋したものです。(東京リージョン)
※RI料金は全額1年前払いしたものを時間料金換算した価格です。
インスタンスタイプオンデマンド時間料金RI1年全額前払いの時間料金valkey RI時間料金
cache.r6g.largeUSD 0.2470USD 0.157USD 0.125
cache.r6g.xlargeUSD 0.4930USD 0.313USD 0.251
cache.r6g.2xlargeUSD 0.9850USD 0.627USD 0.502
cache.r7g.largeUSD 0.2630USD 0.168USD 0.135
cache.r7g.xlargeUSD 0.5240USD 0.335USD 0.268
cache.r7g.2xlargeUSD 1.0470USD 0.670USD 0.536
cache.m6g.2xlargeUSD 0.7640USD 0.487USD 0.389
cache.m7g.2xlargeUSD 0.8100USD 0.518USD 0.415
まずは、cache.r6g.large同士でRI全額前払いの料金(USD 0.157)と、ValkeyのRI全額前払い料金(USD 0.125)を比較してみると、公式ブログ通り約20%安くなっていることがわかります。
 
つづいて、cache.r6g.largeとcache.r7g.largeを比較してみます。
RI全額前払いはcache.r6g.largeではUSD 0.157で、cache.r7g.largeはUSD 0.168で約7%高いです。
しかし、cache.r7g.largeではValkeyを使うようにするとどうでしょう。
cache.r7g.large のValkeyのRI全額前払い時間料金はUSD 0.135ですので、Redisのr6g.largeと比べても約14%安くなっていることがわかります。
 
また、2024年10月1日に、ElastiCacheのリザーブドインスタンスにサイズ柔軟性が適用されることとなりました。
RDSやEC2と同様、RI購入後に稼働しているインスタンスタイプを変更しても、同じファミリー内であれば、購入済みサイズ分のRIを適用してくれます。これでRI購入が選択しやすくなりました。
 

まとめ


負荷試験によって、Valkeyにすることで多少性能向上がありそうだということがわかりました。
また、費用面でもValkey利用は安くなります。
r6g.largeで稼働していたElasticCache Redisを、r7g.largeのElastiCache Valkeyに移行した場合、
性能面では約36%性能向上することに加え、費用面でも約14%安くなります
 
ElastiCache Redis からValkeyへの移行はダウンタイムなしでオンラインで移行可能なようです。
注意点はValkeyはエンジンバージョン7.2からの提供となるので、事前に既存環境のElastiCache Redisのエンジンバージョンを7系まで上げて動作確認しておく必要があることです。
 
今回はノードベースのRI購入前提でのRedisとValkeyを比較してみましたが、サーバーレスも33%安くなるみたいですので、RIとサーバレスどちらがより最適かどうかを検討していきたいと思います。
 
SRG では一緒に働く仲間を募集しています。 ご興味ありましたらぜひこちらからご連絡ください。
 
このエントリーをはてなブックマークに追加