Amazon MemoryDB for Redis

出典:AWS Blackbelt

なぜ Amazon MemoryDB for Redis か

最新のアプリケーションでは応答性能の重要性が増している

  • データの爆発的増加
  • マイクロサービスはデータと分析の要件を変える
  • DevOpsがもたらす急速な変化

マイクロサービスではホットデータの重要性が高い

  • ホットデータ :頻繁にアクセスされる
  • ウォームデータ :時々アクセスされる
  • コールドデータ :ほとんどアクセスされない

インメモリデータベースとは

ホットデータのための高速で柔軟なデータベース

  1. 高速
    • 1つのユーザーアクションで多数のマイクロサービスが関与し、それぞれにわずかなレイテンシ猶予しかない
    • 数百万人のユーザーが毎秒すうひゃくまんけんのリクエストを行うスループット
    • ここのサービスがより多くの計算を行い、より多くのデータにアクセスする
  2. 柔軟
    • アプリケーションの速度が速く、開発にはデータベースの俊敏性が必要
    • 予期せぬビジネス要件をサポートするアプリケーションの進化
    • アプリケーションモデルとデータベースモデル間のインピーダンスミスマッチを最小化

セルフマネージド型インメモリデータストアの課題

  • 管理の難しさ
  • 堅牢性の問題
  • スケーラビリティ
  • 高価

AWSインメモリ耐久性選択

ElastiCache for memcached 揮発性 パーシステンスなし
ElastiCache for Redis 半耐久性 スナップショット、非同期レプリケーション
MemoryDB for Redis 耐久性 マルチAZトランザクションログ

MemoeyDB for Redis vs Elasticache

MemoryDB for Redisのユースケース

  • 超高速なパフォーマンスを提供する堅牢なデータベースを必要するアプリケーション
  • RedisのAPIとデータ構造を使用するが、データ損失のリスクを回避するための耐久性を求めるアプリケーション
  • キャッシュとデータベースを使用して低レイテンシーを実現し、アーキテクチャを簡素化してコストを削減したいアプリケーション

Elasticache for Redisのユースケース

  • 既存のプライマリデータベースでデータアクセスを高速化したいワークロードをキャッシュする場合
  • Redisのデータ構造とAPIを使用して、プライマリデータベースまたはデータストアに格納されているデータにアクセスする場合

Amazon MemoryDB for Redis の概要

特長

  • 超高速パフォーマンス
  • Redis互換
  • 耐久性と可用性
  • フルマネージド
  • スケーラビリティ
  • セキュリティと統制

超高速パフォーマンス

書き込み:マルチAZトランザクションログに保存

  • 1桁msという低いレイテンシの書き込み
  • シャードあたり最大10万回/秒の書き込み
  • シャードあたり100MBのスループット/秒

読み取り:すべてのデータをメモリ上に展開

  • マイクロ秒のレイテンシー読み取り
  • ノードあたり最大47万回/秒の読み取り
  • ノードあたり1.3GBのスループット/秒

極限のスケール

  • クラスタあたり500ノード
  • 高可用性構成では105TB
  • 数百万のRPS

Memory DBのユースケース

  • マイクロサービス
  • リアルタイムデータとソーシャルメディア分析
  • 地理空間
  • メディアストリーミング
  • チャットとメッセージング
  • 機械学習とジャネレーティブAI

MemoryDBベクトル検索 (Preview)

ベクター検索(AI関連:類似画像検索、自然言語処理、音声検索、推薦システム、異常検知)機能を利用可能

  • マネージドコンソールで有効化して利用
  • NodeTypes:R7g、R6g、T4g
  • Version:v7.1

Amazon MemoryDB for Redis の技術詳細

基本的なRedisの高可用性構成

  • 3つのシャード、シャードごとに1つのプライマリと2つのレプリカ
  • マルチAZに跨って構成される
  • シャードを追加して読み取り・書き込みをスケーリングし、インメモリ容量を増やす
  • レプリカを追加して読み取りをスケーリングし、可用性を向上

クラスタ化アーキテクチャの特徴

  • リカバリタイム:計画時は200ミリ秒未満、予定外は10秒未満
  • フェイルオーバー影響:書き込みはシャードに関連した場合影響あり、読み取りは問題なし
  • ノードスケール:最大500ノード(83〜500シャード)、シャードごとに1つのプライマリ、0〜5のレプリカ
  • オンラインスケーリング:シャード、プライマリノード。リードレプリカ
  • マイグレーションパス:スナップショットのバックアップ・リストア、サードパーティツール
  • スケラービリティとパフォーマンス:水平スケーリング、水平・垂直スケーリングをサポート
  • スケーリング操作:クラスタサイズ変更、シャード追加による水平スケーリングと、読み取りスケールのためのレプリカ追加

MemoryDBの整合性

  • プライマリからは強い整合性で読み取れる
  • レプリカからは結果整合性で読み取れる(Transaction Logでのレプリケーションが非同期のため)

MemoryDBのフェイルオーバー

  • プライマリ障害時、レプリカはログから全てのトランザクションを読み込むとプライマリに昇格
  • クライアントはすべての書き込みを新しく昇格したプライマリにリダイレクトする
  • フェイルオーバー時のデータ損失はゼロ

オンラインリシャーディング

  • アプリケーションの中断なく可能(リダイレクトは発生)
  • オンラインスケールアウト、オンラインスケールイン:シャード全体で均一なスロット分散

Redis データ構造

Data Type 説明 ユースケース例
String バイトシーケンス キャッシュ
List Stringのリスト スタック
Set ユニークな順序なしコレクション
Sorted Set ユニークな順序ありコレクション リーダーボード
Hash Key-Valueペアのマップ
Streams ログデータストラクチャ メッセージキュー
Geospatial 緯度経度 地図、近接検索
Bitmaps Stringの特殊な用法
HyperLogLogs 近似的カウント
JSON JSONフォーマットの保存とネイティブアクセス

MemoryDB セキュリティ機能

  • 暗号化
    • 転送中の暗号化(パフォーマンス影響あり)
    • 保存中の全データ暗号化
  • 認証
    • RedisACLによるパスワードとアクセス文字列を持つユーザー作成
    • IAMを利用して認証することも可能
    • 転送中の暗号化が有効になっている場合のみ使用可能
  • 認可
    • ACLを使用してコマンドとキーを制限する機能
  • Amazon VPC 統合
    • 承認されたIP、AWSリソースのVPCセキュリティグループ
    • ネットワーク分離のためのVPCサブネットグループ

Redisセキュリティコマンド(acl log)を使用可能

CloudWatchセキュリティメトリクス

  • AuthenticationFailures:Redisへの認証試行の失敗
  • KeyAuthrizationFailures:ユーザーが許可なくキーにアクセス使用して失敗した
  • CommandAuthorizationFailures:ユーザーが許可なくコマンドを実行しようとして失敗した

Amazon MemoryDB for Redis のはじめ方

接続先エンドポイント

  • クラスタエンドポイントを指定するだけでOK
  • ノードのスケールアウト/インに設定で追従する必要なし

Redis on EC2、Elasticache for Redisからの移行:バックアップ/リストア

  • 推奨事項:計画されたメンテナンスウインドウを活用する
  • BGSAVEやSAVEを使用してRedisバックアップ(.RDBファイル)を作成、S3経由でリストアする

Elasticache for Redisからの移行:論理レプリケーション

  • ダウンタイムを最小限に抑えるシナリオ
  • MemoryDBクラスタを作成し、移行元、移行先双方にOSSレプリケーションツールのクライアントが接続できる状況にし、復元