Amazon MemoryDB
Redis 互換のインメモリデータベースで、耐久性とマイクロ秒レベルの読み取り性能を両立するサービス
何ができるか
Amazon MemoryDB は、Redis 互換の API を備えたフルマネージドのインメモリデータベースサービスです。マイクロ秒単位の読み取りレイテンシと 1 桁ミリ秒の書き込みレイテンシを実現しながら、マルチ AZ のトランザクションログによりデータの耐久性を保証します。従来のインメモリキャッシュとは異なり、プライマリデータベースとして利用できるため、キャッシュとデータベースを別々に管理する必要がなくなります。
どのような場面で使うか
セッション管理、リアルタイムランキングやリーダーボード、ゲームのプレイヤーデータ管理、金融取引のリアルタイム処理、IoT デバイスからのストリーミングデータの一時保存、マイクロサービス間の共有状態管理など、超低レイテンシと高い耐久性の両方が求められるワークロードで活用されています。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
身近な例え
金庫付きのメモ帳に例えるとわかりやすいでしょう。通常のメモ帳 (インメモリキャッシュ) は素早く読み書きできますが、紛失すると内容が消えます。MemoryDB は書いた内容を即座に金庫 (トランザクションログ) にもコピーするため、メモ帳の速さと金庫の安全性を同時に手に入れられます。
MemoryDB とは
Amazon MemoryDB は、Redis のデータ構造とコマンドをそのまま利用できるインメモリデータベースです。ElastiCache for Redis がキャッシュレイヤーとして設計されているのに対し、MemoryDB はプライマリデータベースとしての利用を前提に設計されています。マルチ AZ にまたがるトランザクションログにデータを永続化するため、ノード障害やプロセス再起動が発生してもデータが失われることはありません。既存の Redis クライアントやライブラリをそのまま使用できるため、移行も容易です。
ElastiCache との違い
ElastiCache for Redis はキャッシュとして設計されており、データの永続性は限定的です。一方、MemoryDB はマルチ AZ のトランザクションログを使用してすべての書き込みを永続化するため、プライマリデータストアとして信頼できます。読み取りレイテンシはどちらもマイクロ秒レベルですが、MemoryDB の書き込みレイテンシはトランザクションログへの書き込みが加わるため、ElastiCache よりわずかに長くなります。用途に応じて、キャッシュ目的なら ElastiCache、プライマリデータベース目的なら MemoryDB を選択するのが適切です。
スケーリングと運用
MemoryDB はクラスター構成をサポートしており、データをシャード (パーティション) に分割して水平スケーリングが可能です。各シャードにはプライマリノードとリードレプリカを配置でき、読み取り負荷の分散と高可用性を実現します。ノードタイプの変更やシャード数の増減はオンラインで実行でき、ダウンタイムなしでスケーリングできます。パッチ適用やバックアップも自動化されており、運用負荷を最小限に抑えられます。
Azure・オンプレミスとの比較
AWS の優位点
- マルチ AZ トランザクションログによりデータの耐久性が保証され、インメモリの速度とデータベースの信頼性を単一サービスで実現できる
- Redis 互換 API をそのまま利用できるため、既存の Redis アプリケーションをコード変更なしで移行でき、学習コストが最小限に抑えられる
- シャーディングとリードレプリカによる水平スケーリングがオンラインで実行でき、ダウンタイムなしで容量と性能を拡張できる
注意点
- ElastiCache for Redis からの移行は Redis 互換 API のため比較的容易だが、トランザクションログによる書き込みレイテンシの増加を事前に検証すること
- プライマリデータベースとして利用する場合は、データ量に応じたノードタイプの選定とシャード数の設計が重要になる
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。