Amazon ElastiCache
Redis または Memcached をフルマネージドで提供するインメモリキャッシュサービスで、マイクロ秒単位のレスポンスタイムを実現する
概要
Amazon ElastiCache は、Redis と Memcached の 2 つのオープンソースエンジンに対応したフルマネージドなインメモリキャッシュサービスです。データベースへのクエリ結果やセッション情報をメモリ上にキャッシュすることで、アプリケーションのレスポンスタイムをミリ秒からマイクロ秒に短縮できます。ノードの起動、パッチ適用、バックアップ、フェイルオーバーなどの運用タスクを AWS が自動的に処理します。ElastiCache for Redis はデータの永続化、レプリケーション、Pub/Sub メッセージング、Lua スクリプト、地理空間インデックスなどの高度な機能をサポートし、ElastiCache for Memcached はシンプルなキーバリューキャッシュとして高いスループットを提供します。ElastiCache Serverless を使えば、キャパシティの管理なしにワークロードに応じて自動スケールするキャッシュ環境を構築できます。
Redis と Memcached - データ構造の要否で決まる選択
ElastiCache のエンジン選択は、キャッシュに求めるデータ構造の複雑さで決まります。Redis はソート済みセット、ハッシュ、リスト、ストリームなどの豊富なデータ構造をサポートし、データの永続化 (RDB スナップショット、AOF ログ)、Multi-AZ レプリケーション、自動フェイルオーバーも備えています。セッション管理、リーダーボード、リアルタイム分析、Pub/Sub メッセージングなど、データの永続性や高度な操作が必要な場面に適しています。一方、Memcached はマルチスレッドアーキテクチャにより単一ノードでの並列処理性能が高く、シンプルなキーバリューキャッシュとして大量の読み取りリクエストを処理する場合に向いています。ただし永続化やレプリケーション機能がないため、キャッシュの消失が許容できるワークロードに限定されます。Azure Cache for Redis は Redis エンジンのみをサポートしており、Memcached に相当するマネージドサービスは提供されていません。
Lazy Loading と Write-Through のキャッシュ戦略
キャッシュ戦略の選択はアプリケーションのパフォーマンス特性に直結します。Lazy Loading はキャッシュミス時にデータソースから取得してキャッシュに書き込む方式で、実装がシンプルで不要なデータがキャッシュを圧迫しない利点がありますが、初回アクセス時のレイテンシが高くなります。Write-Through はデータ更新時にキャッシュも同時に更新する方式で、キャッシュの鮮度を常に保てますが、書き込みコストが増加し、読まれないデータもキャッシュされます。実務では両者を組み合わせ、読み取り頻度の高いデータには Write-Through を、それ以外には Lazy Loading を適用するハイブリッド戦略が効果的です。TTL を適切に設定して古いデータの自動削除を行い、メモリ使用率を管理します。キャッシュ設計の関連書籍 (Amazon) では、戦略の使い分けが体系的に解説されています。
クラスターモードと Global Datastore
Redis のクラスターモードを有効にすると、データを複数のシャードに分散してスループットを水平スケールできます。各シャードにはプライマリノードとレプリカノードが配置され、シャード単位でのフェイルオーバーにより高可用性を確保します。シャード数の変更はオンラインで実行でき、データの再分散も自動的に行われます。Global Datastore 機能を使えば、クロスリージョンレプリケーションが可能で、リージョン間のフェイルオーバーを 1 秒未満で実行できます。Azure Cache for Redis にもアクティブ geo レプリケーション機能がありますが、Enterprise 層でのみ利用可能で、Standard / Premium 層ではパッシブ geo レプリケーションに限定されます。ElastiCache Serverless を使えば、キャパシティの管理なしにワークロードに応じて自動スケールするキャッシュ環境を構築でき、トラフィックの予測が難しいアプリケーションに適しています。