Amazon MemoryDB for Redis - 耐久性を備えたインメモリデータベースの設計と活用
MemoryDB の Multi-AZ 耐久性、ElastiCache との使い分け、プライマリデータベースとしての活用パターンを解説します。
MemoryDB と ElastiCache の違い
MemoryDB for Redis は Redis 互換のインメモリデータベースで、ElastiCache との最大の違いはデータの耐久性です。ElastiCache はキャッシュとして設計されており、ノード障害時にデータが失われる可能性があります。MemoryDB はトランザクションログを複数の AZ に同期的に複製するため、ノード障害やプロセス再起動後もデータが保持されます。この耐久性により、MemoryDB はキャッシュではなくプライマリデータベースとして使用できます。セッションストア、ユーザープロファイル、リーダーボード、ショッピングカートなど、データの永続性が必要でかつ低レイテンシが求められるワークロードに最適です。
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
アーキテクチャとパフォーマンス
MemoryDB のクラスタはシャードで構成され、各シャードにプライマリノードとリードレプリカが配置されます。書き込みはプライマリノードが処理し、トランザクションログが Multi-AZ で同期複製された後にクライアントに応答を返します。読み取りはリードレプリカに分散でき、マイクロ秒のレイテンシを実現します。書き込みレイテンシはトランザクションログの同期複製のため ElastiCache より若干高く、1 桁ミリ秒程度です。シャード数を増やすことで書き込みスループットを水平にスケールでき、最大 500 ノードのクラスタで数百テラバイトのデータを格納できます。
プライマリデータベースとしての活用
MemoryDB をプライマリデータベースとして使用すると、従来の RDB + ElastiCache の 2 層構成を MemoryDB の 1 層に統合できます。キャッシュの無効化ロジック、キャッシュとデータベースの整合性管理、2 つのサービスの運用管理が不要になります。ただし、MemoryDB はリレーショナルクエリ (JOIN、集計) をサポートしないため、データモデルが Redis のデータ構造で表現可能なワークロードに限定されます。複雑なクエリが必要な場合は、MemoryDB をリアルタイムアクセス層として使用し、分析用途には Redshift や Athena にデータを同期する構成が有効です。
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。
まとめ
MemoryDB は Redis の低レイテンシとデータの耐久性を両立するインメモリデータベースです。キャッシュではなくプライマリデータベースとして使用でき、RDB + キャッシュの 2 層構成を簡素化できます。データモデルが Redis のデータ構造に適合するワークロードで、低レイテンシと耐久性の両方が求められる場合に最適な選択肢です。
AWS の優位点
- トランザクションログを複数の AZ に同期的に複製し、Redis 互換でありながらデータの耐久性を保証する
- ElastiCache がキャッシュレイヤーに特化しているのに対し、MemoryDB はプライマリデータベースとして使用できる
- マイクロ秒の読み取りレイテンシと 1 桁ミリ秒の書き込みレイテンシで、毎秒数百万リクエストを処理できる
- 最大 500 ノードのクラスタで数百テラバイトのデータを格納し、シャーディングで水平スケールする
- Redis のデータ構造 (String、Hash、List、Set、Sorted Set、Stream) とコマンドに完全互換