Amazon Web Services ブログ

Amazon ElastiCache for Valkey version 8.0 による高速なスケーリングとメモリ効率の向上

本記事は 2024 年 11 月 21 日に公開された “Amazon ElastiCache version 8.0 for Valkey brings faster scaling and improved memory efficiency” を翻訳したものです。


2024 年 11 月 21 日、Amazon ElastiCache で Valkey 8.0 のサポートを追加しました。
ElastiCache for Valkey バージョン 8.0 では、ElastiCache Serverless のスケーリングが高速化され、ノードベースのクラスターのメモリ最適化が実現されています。
このブログ記事では、これらの改善点をどのように活用できるかについて説明します。

ご存知ない方に説明しますと、Valkey は、オープンソースのインメモリ型キーバリューデータストアです。Redis OSS の代替として使用できます。
Linux Foundation が管理しており、活発な開発者コミュニティからの貢献により急速に改善が進んでいます。
AWS は Valkey に積極的に貢献しています。AWS の Valkey への貢献について詳しくは、Amazon ElastiCache と Amazon MemoryDB の Valkey サポートを発表 をご覧ください。
先月、価格を改定した ElastiCache バージョン 7.2 for Valkey を 発表 しました。
ElastiCache は、Valkey、Memcached、Redis OSS と互換性のあるフルマネージド型のキャッシングサービスで、99.99% の可用性を備えたモダンアプリケーション向けにリアルタイムでコスト最適化されたパフォーマンスを提供します。
ElastiCache は、マイクロ秒単位の読み取りと書き込みのレスポンスタイムで、1 秒あたり数百万のオペレーションまでスケールし、データベースとアプリケーションのパフォーマンスを向上させます。

ElastiCache Serverless のスケーリング改善

ElastiCache Serverless を使用すると、1 分以内にキャッシュを作成し、アプリケーションのトラフィックパターンに基づいて容量をスケーリングできます。
これまで、キャッシュの適切なサイジングはコストとパフォーマンスのバランスを取る作業でした。
ピーク時に十分なバッファを持った容量をプロビジョニングすることはできましたが、使用していない容量に対しても料金を支払う必要がありました。
あるいは、必要最小限の容量をプロビジョニングし、必要に応じて手動でスケーリングすることもできましたが、予期せぬトラフィックの急増が発生した場合にパフォーマンスのボトルネックに遭遇する可能性がありました。
私たちは、最も要求の厳しいワークロードでも容量計画を必要とせずにキャッシュを運用できるよう、ElastiCache Serverless をリリースしました。
リリース以来、多くのお客様から、バイラル化した(いわゆるバズった)ライブイベントなどに発生する突発的なトラフィックに対して、より迅速にアプリケーションをスケーリングできるようにしてほしいという要望をいただいています。

ElastiCache Serverless version 8.0 for Valkey は、急激な負荷変動や急速にスケールするワークロードへの対応を改善しました。
以前の ElastiCache Serverless では、10-12 分ごとに 1 秒あたりのリクエスト数 (RPS) を 2 倍にすることができました。
Valkey 8.0 では、ElastiCache Serverless は 13 分以内に 0 から 500 万 RPS までスケールでき、2-3 分ごとに対応可能な RPS を 2 倍にすることができます。
これらの改善をどのように実現したのか、そしてベンチマークの結果について見ていきましょう。

Valkey 8.0 では、AWS が新しいマルチスレッドアーキテクチャを通じて 100 万以上の RPS を達成するなど、大幅なパフォーマンス向上を実現しました。
新しい I/O スレッド実装により、メインスレッドと I/O スレッドが並行して動作し、コマンドの読み取りと解析、レスポンスの書き込み、I/O イベントのポーリングなどのタスクをオフロードできます。
この設計により、同期メカニズムを最小限に抑え、Valkey のシンプルさを維持しながらパフォーマンスを向上させています。
オープンソースの Valkey 8.0 における I/O マルチスレッドの具体的な改善点については、Unlock 1 Million RPS: Experience Triple the Speed with Valkey をご覧ください。

これらの改善点は、ElastiCache Serverless version 8.0 for Valkey で活用され、より高速なバーストスケーリングとスケールアウト操作を処理できるようになりました。
オンデマンドでより多くのコアを有効化し、I/O スレッディングを最適化することで、ElastiCache Serverless は追加のスループットをサポートするために I/O スレッドを動的に割り当てることができます。
さらに、ElastiCache Serverless は、新しいシャードへのデータ移行を含む水平スケーリングを処理するために、追加の I/O スレッドを割り当てることができます。
この強化されたスケーリング機能により、ElastiCache Serverless は高トラフィックのシナリオやトラフィックの急増をより効果的に処理でき、高スループットと最小限のレイテンシーを必要とするアプリケーションに恩恵をもたらします。

ベンチマークデータ

ElastiCache Serverless for Valkey 8.0 でアプリケーションワークロードをどれだけ迅速にスケールできるかを示すために、典型的なキャッシングのユースケースを選びました。
アプリケーションが 512 バイトの値をキャッシュし、読み取りと書き込みのトラフィックの比率がおよそ 80 対 20 であると仮定します。
このテストでは、アプリケーションのリクエストレートが 0 RPS から 500 万 RPS まで増加すると想定しています。

ElastiCache Serverless for Valkey バージョン 7.2

まず、以前のバージョンである ElastiCache Serverless version 7.2 for Valkey で実行されているワークロードを見てみましょう。
以下のグラフは、キャッシュに対するワークロードによって実行された 1 秒あたりのリクエスト数 (RPS) と、p50 および p99 レイテンシーを示しています。

グラフが示すように、ElastiCache Serverless for Valkey バージョン 7.2 は、グラフの紫色の線で示されているように、ピークの 500 万 RPS までスケールするのに約 50 分かかり、10 分ごとに RPS が効果的に 2 倍になっています。
この間、p50 読み取りレイテンシー (青線) は 1 ミリ秒未満を維持していますが、p99 レイテンシー (オレンジ色と赤色の線) は最大 9 ミリ秒まで上昇します。

ElastiCache Serverless for Redis バージョン 8.0

次に、ElastiCache Serverless for Valkyl バージョン 8.0 で実行されている同じワークロードを見てみましょう。

グラフからわかるように、ElastiCache Serverless version 8.0 for Valkey は、はるかに高速なスケーリングを実現し、0 から 500 万回/秒 のピークまで 13 分未満で到達し、実質的に 2 分ごとに対応可能な RPS を 2 倍にしています。
応答時間の特性は一貫しており、読み取り応答時間の 50 パーセンタイル値は 1 ミリ秒未満を維持し、応答時間の 99 パーセンタイル値は 7~8 ミリ秒まで上昇します。

結果の概要

以下の表は、ベンチマーク結果をまとめたものです。

ElastiCache モード ベースラインからピーク RPS に到達するまでの時間 p50 読み取りレイテンシー p99 読み取りレイテンシー
ElastiCache Serverless version 7.2 for Valkey 50 分 800 マイクロ秒未満 8-9 ms
ElastiCache Serverless version 8.0 for Valkey 13 分 800 マイクロ秒未満 7-8 ms

メモリ使用量の改善

Valkey 8.0 では、ワークロードのメモリ使用量とリソース消費を削減するのに役立つ、重要なメモリ効率の改善が導入されています。

まず、この分野で AWS が OSS Valkey に貢献した改善点について見ていきましょう。
OSS Valkey 8.0 の主な機能強化の 1 つは、クラスター構成におけるメモリ管理の最適化です。
以前の Valkey のクラスターモードでは、16,384 個のハッシュスロットにデータを分散させており、特に大規模なデプロイメントでは大量のメタデータのオーバーヘッドが必要でした。
Valkey 8.0 では「スロットごとの辞書」モデルを採用し、スロットごとのメタデータ要件を削減することでメモリ使用量を低減しています。
このアップデートにより、キーあたり 32 バイトのメモリ削減が実現し、ワークロードのキーサイズによっては大幅なメモリ削減につながる可能性があります。
Valkey 8.0 の改善点に関する技術的な詳細については、Storing more with less: Memory Efficiency in Valkey 8 をご覧ください。

では、これが Valkey の ElastiCache バージョン 8.0 でどのように実現されているかを見てみましょう。
Valkey 用の ElastiCache Serverless の価格設定では、これらのメモリ最適化を見込んで、潜在的なコスト削減を反映させました。
GB あたりおよび ECPU あたりの価格を引き下げ、ストレージの最小容量を 1 GB から 100 MB に削減し、Valkey 用の ElastiCache Serverless の価格を Redis OSS 版と比べて 33% 低く設定しました。
さらに、Valkey 8.0 では、SET データ構造を使用するユーザーは、SET の要素あたり 24 バイト少なくなり、さらなるコスト削減が可能になります。

クラスターモードで Valkey 8.0 を実行するノードベースのクラスターでは、このメモリ効率化によりあらゆる面でメモリ消費量が削減されます。
ベンチマークでは、16 バイトのキーと 100 バイトの値を使用する文字列のワークロードをテストしました。
同一のデータを Valkey 7.2 を実行するクラスターと Valkey 8.0 を実行するクラスターに格納し、この新しいリリースで実現できるメモリ削減量を明らかにしました。
サーバーレスキャッシュにデータを追加するためには valkey-benchmark ツールを使用しました。

src/valkey-benchmark \ 
 -t set \ 
 -n 10000000 \ 
 -r 10000000 \ 
 -d 100

Valkey 7.2 クラスターのメモリ使用量を確認しました:

Valkey 7.2> DBSIZE 
(integer) 6322820 
 Valkey 7.2> INFO MEMORY 
# Memory 
 used_memory:1491244824 
 used_memory_human:1.39G

次に、Valkey 8.0 クラスターのメモリ使用量を確認しました。

Valkey 8.0> DBSIZE 
(integer) 6319345 
 Valkey 8.0> INFO MEMORY 
# Memory 
 used_memory:1192317904 
 used_memory_human:1.11G

この特定のワークロードでは、ノードベースのクラスターのメモリ使用量が 1.39 GB から 1.11 GB に減少し、メモリ使用量が 20% 削減されました。
このメモリ使用量の削減は、このワークロードの種類に特有のものです。
ワークロードの詳細によって、メモリ使用量の削減量は異なる場合があります。

まとめ

ElastiCache for Valkey バージョン 8.0 が、すべての AWS リージョンで利用可能になりました。
Redis OSS および Valkey 7.2 から Valkey 8.0 へ、ElastiCache Serverless キャッシュとノードベースの ElastiCache クラスターをアップグレードし、パフォーマンスとメモリ使用率の改善を活用することをお勧めします。

スケーリングの改善とメモリ効率の向上に加えて、ElastiCache for Valkey への移行はコスト削減にも役立ちます。
ElastiCache Serverless for Valkey は、他のエンジン向けの ElastiCache Serverless と比べて 33% 低価格で、ノードベースの ElastiCache for Valkey は 20% 低価格です。
ElastiCache Serverless for Valkey は、月額 6 ドルという低価格で始めることができます。

ElastiCache for Valkey のバージョン 8.0 の詳細については、What’s new ページをご覧ください。ElastiCache for Valkey の使用開始方法については、Amazon ElastiCache for Valkeyの開始方法 の詳細な手順をご参照ください。

この記事の翻訳は Solutions Architect の堤 勇人が担当しました。

著者について

Abhay Saxena は、Amazon Web Services のインメモリデータベースチームのプロダクトマネージャーで、ElastiCache Serverless を担当しています。
ElastiCache チームに参加する前は、Amazon で 13 年以上プロダクトマネージャーとして勤務していました。

Rashim Gupta は AWS のシニアマネージャー、製品管理で、Amazon ElastiCache と Amazon MemoryDB の製品責任者を務めています。
AWS で 6 年以上の経験を持ち、コンピュート、ストレージ、データベースの分野でプロダクトマネージャーとして従事してきました。