クラウド事業部の原口です。
ある日、ElastiCacheの画面を開くとElastiCacheのメニューにValkeyというものが追加されている事に気づきました。
恥ずかしながらValkeyというものも初めて知ったところでして、アナウンスでは「Redis OSSからValkeyへ変更すると最大33%安くなります」と書かれており、KVSとしてRedisを中心と使っている弊社としてのインパクトはとても大きく、遅ればせながら調査と検証を行いました。
Valkeyとは
ValkeyはオープンソースのインメモリストレージでいわゆるKVSに位置するものであり、Redis が非オープンソースライセンスに移行した事を受けて作られたようです。
Redisをフォークして作られているため、Redisに互換性があります。またAWS、Google、Oracleなどの主要なクラウドベンダーがサポートを表明しており、特にクラウド環境においては今後Redisに変わる存在となると予想します。
Amazon ElastiCache for Valkeyの利点
AWS公式ブログを参考に個人的意見をまじえつつ掲載します
- コスト
Redisに比べて20%の価格の引き下げ、サーバレスにおいては33%の価格引き下げが行われています。また、ElastiCache for Redis OSS から ElastiCache for Valkey に切り替えてもElastiCache for Redis OSSで購入されたRI (リザーブドインスタンス)の割引が維持されるようです。このあたりの対応はAWSからの「valkeyへ移行してほしい」という強いメッセージに感じますね。 - API互換性
Redisに互換性がありコードやアーキテクチャの変更なく移行できます - ダウンタイムゼロの移行
ElastiCache for Redis OSSからダウンタイムゼロでElastiCache for Valkeyに移行できます - 継続的なイノベーション
AWSがvalkeyプロジェクトを支援しており、クラウドで動く事を前提とした最適化や機能追加が実装される事が期待されます
RedisからValkeyに移行する際の注意点は?
我々利用者としてはValkeyへの移行はメリットしか存在しないため、移行を検討するわけですが「トラブルなくいけんのか?」が最大の関心ごとになりますのでこのあたりを深掘りしてみます。
現在のValkeyはredisという文字列がvalkeyに変わっただけ
今回ElastiCacheにて提供されているValkey7ですが、ValkeyのGithubリリースノートを見る限りではRedis7.2.4をフォークしたのちに行われた変更は、redisの文字列をvalkeyへ変えただけであり完全に互換がある事がわかりましたので、Redis7.2.4以降を利用している環境においてはValkeyへの変更においてプログラム修正などの懸念は無いでしょう。
現在利用しているRedisバージョンが何であるかは注意が必要
Valkey7はRedis7.2ですのでそもそもRedisの4系や5系からvalkeyに移行する場合は単純にRedis7系へのアップグレードを行う際と同等の検証や準備が必要でしょう。
R6gdインスタンスからの直接移行はサポートされていない
ElastiCache for Redis OSSがR6gdインスタンスで動いている場合はシームレスな移行はできません。バックアップを取得し、そのバックアップからValkeyにて新規クラスターを作る必要があります。
パフォーマンスは?valkeyにしたら遅くなったとかって無い?
redisの名前をvalkeyにしただけなのでパフォーマンスに懸念もなく、上りもせず下りもせずなんだろうなと思っていましたが、以下のCyberAgent様の記事を見る限り、ElastiCache for Valkey へ切り替える事で明確にパフォーマンス向上が見られるようでした
ElastiCacheでValkeyがサポートされたけど何が良いのか検証してみた (CyberAgent SRG)
https://ca-srg.dev/6d99a5ff263346cbaebec589ee744db1
これはRedisが7.1に対してValkeyが7.2 (=Redis7.2)となっている事に起因してそうに想像します。現状のElastiCache Redis OSSは7.1が最新ですので、利用者的にはElastiCache for Valkeyへの移動でパフォーマンスがあがることに間違いはなさそうです!(嬉しい誤算)
今後のValkeyはRedisとは違う独自実装が行われる
すでにリリースされたValkey8.0.0 ではRedisでは無かったマルチコア機能の強化が見られます。そのRC版公開の際の公式ブログでの処理想定はAWSのr7gインスタンスであったりなど、現在のAWSクラウドで動作する事を前提とした最適化が行われている事がわかります。
現状ではredis-cliコマンドなどでもValkeyを問題なく使えますが、いずれはvalkey-cliへ入れ替えないといけないだろうなと思います。
やってみた
いくつかのバージョンとクラスター有無でRedis OSSのElastiCacheを作り、それらをValkeyへ移行してみました。
まず移行したいインスタンスを選択して変更をクリック
モードの部分でValkeyが選択できるようになっています。
適用します。現行のRedisバージョンが何であってもValkey7.2(= Redis7.2)へアップグレードされる点だけ注意です。
移行が終わると Redis一覧ではなくValkeyの一覧に移動しました。インスタンス名などに変更は無く、redis6という名のvalkey7.2が誕生しました。各種エンドポイントも変更もなく安心。
cloudshellから接続をしてみます。valkey-cliを入れる事なく既存のredis-cliにて接続する事ができました。
1[root@ip-xx-xx-xx-xx ~]# redis-cli -h redis6.xxxxx.ng.0001.apne1.cache.amazonaws.com
2redis6.xxxxx.ng.0001.apne1.cache.amazonaws.com:6379>
3redis6.xxxxx.ng.0001.apne1.cache.amazonaws.com:6379> ping
4PONG
たくさんのバージョンとクラスターの有無を用意してたんですが、いずれも問題なく、そして作業手順に差異もなく移行できました笑
まとめ
- AWS ElastiCacheにおいてはメリットしかないので新規構築の際はValkeyで。既存のインスタンスもなるはやでValkeyへ。