おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

SAA学習-キャッシュの活用-ElastiCacheの概要

今回のテーマ:ElastiCache

主要サービスの公式資料

Amazon ElastiCache

docs.aws.amazon.com

概要

AWSの5つの設計原則と11のベストプラクティスに対しElastiCacheを活用する範囲は、以下のようにオレンジ色の範囲となります。

f:id:In-houseSE:20210829083418p:plain

キャッシュの利用

繰り返し取り出すデータやコンテンツについてはキャッシュを利用する構成を活用します。
AWSで使用する関連サービスは以下となります。

  • CloudFront
  • ElastiCache
  • S3

インメモリキャッシュ

インメモリキャッシュは「メモリ+キャッシュ」の構造を取りElastiCacheで採用されます。

メモリとは

データを保存するHWであり、メモリ型DBを採用することでRead/Writeなどの処理を高速化します。

データを保存するHW

PCなどの機器でデータを保存するためHWはメモリとHDDに保管します。

メモリ型DB

メモリ型DBは、データをメモリ上で動作させるとディスク上で動作する場合を比較し、大幅に高速処理が可能です。
ElastiCacheはメモリ型DBを採用してます。

キャッシュとは

一度アクセスしたデータを保存し、次回アクセス時に高速でアクセスできるようにする仕組みとなります。
データが保管された領域から取得する場合、レイテンシーが増大しDB自身のHW使用量が増加するため、キャッシュを採用します。
動作イメージは以下のようなものになります。

f:id:In-houseSE:20210829085821p:plain

インメモリキャッシュとは

メモリを活用し高速にキャッシュへのアクセスを可能にしたデータベースの仕組みとなります。

f:id:In-houseSE:20210829090049p:plain

ElastiCache

分散インメモリキャッシュサービスの構築・管理及びスケーリングを容易に実施することができるサービスとなります。
要点は以下のようになります。

  • キャッシュクラスタを数クリックで起動
  • フルマネージド型でモニタリング、自動障害検出、復旧、拡張、パッチ適用、バックアップに対応し高可用性を実現
  • 広く利用される2種類のエンジンmemcached/redisから選択可能

Redis/Mencachedの違い

オープンソースのRedisとMemcachedの違いは以下のようになります。
シンプルに利用する場合はMemcachedを採用し、それ以外はRedisを利用することが多いです。
また、RDBへアクセスする際の負荷分散に特化した場合、Memcachedを採用を検討します。

Redis

  • 高速に値をRead/Writeできるインメモリ型DB
  • シングルスレッドで動作するインメモリキャッシュDBで全てのデータ操作は排他的
  • スナップショットが可能
  • データを永続化可能
  • 複雑なデータ型が必要あり
  • インメモリデータセットをソートまたはランク付けが必要あり
  • 読込処理の負荷に対し、リードレプリカにレプリケートが必要あり
  • pub/sub機能が必要あり(メッセージング処理)
  • 自動的なF/Oが必要あり
  • キーストアの永続性が必要あり
  • バックアップと復元の機能が必要あり
  • 複数のデータベースをサポートする必要あり

Menchached

  • 高速に値をRead/Writeできるインメモリキャッシュ型DB
  • マルチスレッドで動作するインメモリキャッシュDB
  • スナップショットは不可
  • データを永続化不可
  • フェイルオーバーや復元は不可
  • シンプルなデータ側が必要あり
  • 複数のコアまたはスレッドを持つ大きなノードを実行する必要あり
  • システムでの需要増減に応じ、スケールイン/アウトする機能が必要あり
  • データベースなどのオブジェクトキャッシュが必要あり
  • キーストアの永続性は必要なし
  • バックアップと復元機能は必要なし
  • 複数のデータベースを利用不可

ElastiCache with Redis

位置情報クエリ/Luaスクリプトによる操作やpub/subモデルを活用可能となります。

Lua(ルア)スクリプト

位置情報クエリ

  • 緯度・経度などの位置情報をクエリ処理することが可能
  • 検索距離や検索範囲の指定可能

pub/subモデルの利用

  • イベントを起こす側:pubとイベント処理を行う側:subを分離するモデル
  • メッセージ処理やイベント処理で活用

ユースケース

データアクセスを高速にしたいケースがあればキャッシュの活用を検討します。
検討項目として下記のようなものが挙げられます。

検討例としては以下のようなものがあります。

f:id:In-houseSE:20210829093511p:plain

また、アプリケーションでデータの即時反映が必要なケースで活用します。
検討項目として下記のようなものが挙げられます。

  • ユーザーのマッチング処理
  • レコメンデーションの結果処理
  • 画像データの高速表示
  • ゲームイベント終了時のランキング表示

ユースケース(基本構成)

ElastiCacheを活用したシンプルなアーキテクチャは以下のようになります。

f:id:In-houseSE:20210829094000p:plain

ユースケース(キャットアプリ)

ElastiCacheのpub/sub機能を活用したキャットアプリを構成する場合は以下のようになります。

f:id:In-houseSE:20210829094247p:plain

今回のテーマは以上です。