ElastiCacheについて

ElastiCacheの概要

キャッシュの利用 繰り返し取り出すデータやコンテンツについてはキャッシュを利用する構成とする 関連する主要サービス ・CloudFront、ElastiCache、S3

インメモリキャッシュ

ElastiCacheはメモリ+キャッシュというデータベース

データを保持するHW

PCなどの機器でデータを保存するためのHWはメモリとHDDなどのディスクがある

メモリ型DB

データをメモリ上で動作させるとディスク上で動作をさせる場合と比較して大幅に高速に処理が可能 つまりメモリDBをうまく利用することでデータの高速処理を実現できる

キャッシュとは

一度アクセスしたデータを保存して次回アクセス時に酵素きうにアクセスできるようにする仕組み

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

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

ElastCache

分散インメモリキャッシュサービスの構築、管理およびスケーリングを容易に実施することができるサービス

・キャッシュクラスタを数クリックで起動 ・フルマネージド型でモニタリング、自動障害検出、復旧、拡張、パッチ適用、バックアップに対応し高可用性を実現

・広く利用されている2種類のエンジンmemcached、 /redisから選択可能

オープンソースのRedisとMemcachedを利用可能で汎用性あり ◾️Redis  ・高速に値をRead/Writeできるインメモリキャッシュ型DB  ・シングルスレッドで動作するインメモリキャッシュDBで全てのデータ操作は排他的  ・スナップショット機能がある  ・データを永続かできる

◾️Memcached  ・高速に値をRead / Writeできるインメモリキャッシュ型DB  ・マルチスレッドで動作するインメモリキャッシュDB  ・スナップショット機能がない  ・データを永続化できない  ・フェイルオーバーや復元ができない

シンプルに利用する場合はMemcachedを利用するが、それ以外はRedisを利用する場合が多い

◾️Redis  ・複雑なデータ型が必要である  ・インメモリデータセットをソートまたはランクつけする必要がある  ・読み込み処理の負荷に対して、リードレプリカにレプリケートする必要がある  ・pub / sub機能が必要  ・自動的なフェイルオーバーが必要  ・キーストアの永続性が必要  ・バックアップと復元の機能が必要  ・複数のデータベースをサポートする必要がある

◾️Memcached  ・シンプルなデータ型が必要  ・複数のコアまたはスレッドを持つ大きなノードを実行する必要がある  ・システムでの需要の増減に応じてノードを追加または削除するスケールアウトおよびスケールイン機能が必要  ・データベースなどのオブジェクトをキャッシュする必要がある  ・キーストアの永続性は必要ない  ・バックアップ復元の機能が必要でにあ  ・複数のデータベースを利用できない

ElastiCache with Redis

その他に位置情報クエリ / Luaスクリプトによる操作やpub / subモデルを活用可能

◾️Luaスクリプト  ・移植性が高く、高速な実行速度などの特徴を持っているスクリプト言語

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

◾️pub / subモデルの利用  ・イベントを起こす側とイベント処理を行う側を分離するのがpub / subモデル  ・メッセージ処理やイベント処理で活用

ユースケース

データアクセスを高速にしたいケースがあればキャッシュの活用を検討する ・セッション管理 ・IOT処理とストリーム分析 ・メタデータ蓄積 ・ソーシャルメディアのデータ処理 / 分析 ・Pub / Sub処理 ・DBキャッシュ処理

キャッシュすべきデータを特定して、他のDBと合わせて利用するのが標準的な構成方法 ◾️キャッシュ未使用パターン  DBアクセス負荷が増大すると処理能力が低下し可用性が低下する

◾️インメモリキャッシュ利用パターン  アクセス頻度の高いデータをキャッシュに配置して可用性を高める

ユースケース

アプリケーションでデータの即時反映が必要なケースなどに活用する

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

CloudFrontの概要

AWSが提供するCDN(Content Delivery Network)サービス CDNはWEBコンテンツ配信処理を高速化するためのサービス

大規模なアクセスも世界中にエッジのあるキャパシティを活用して効率的かつ高速にコンテンツ配信が可能なサービス

・210以上のエッジロケーションによる高性能な分散配信 ・高いパフォーマンス ・AWS WAF / AWS Certificate Managerとの連携やDDoS対策によるセキュリティ機能 ・オリジンに対してHeader / Cookie / Query Stringsによるフォワード指定で、動的なページ配信が可能

Distribution設定

CloudFrontの配信設定を実施して各ドメインにて利用する

・各配信先となるドメインに割り当てるCloudFrontを設定する ・マネジメントコンソールやAPIより作成する ・WEB DistributionとRTMP Distributionを選択する ・使用量が最大40Gbps / 10万RPS超は上限緩和申請を実施する ・独自ドメインを指定可能

・コンテンツオリジン設定:CloudFrontの配信ファイルの取得先の設定 ・アクセス設定:ファイルアクセスの許可設定 ・セキュリティ設定:アクセスにHTTPSを利用するかの設定 ・Cookieまたはクエリ文字列転送の設定:オリジンへのCookie / クエリ文字列の転送要否を設定 ・地域制限:特定の国のユーザーからアクセス拒否設定 ・アクセスログ設定:アクセスログを作成要否の設定

Adobeメディアを利用する場合は、RTMPディストリビュージョンを利用するが、通常はWEBディストリビュージョンを利用

◾️WEB Distribution  ・通常のHTTPプロトコルを利用したWEB配信をする際に利用  ・HTTP1.0 / HTTP1.1 / HTTP2に対応  ・オリジンはS3バケット / MediaPackageチャネル / HTTPサーバーを設定  ・HTTPやHTTPSを使用した静的および動的なダウンロードコンテンツ配信  ・Apple HTTP Live Streaming(HLS)やMicrosoft Smooth Streamingなど様々な形式のビデオオンデマンド

◾️RTMP Distribution  ・RTMP形式配信の際に利用  ・Adobe Media ServerとAdobe Real-Time Messaging Protocol(RTMP)を使用してメディアファイルをストリーミング  ・S3バケットをオリジン設定  ・クライアントはメディアファイル / メディアプレイヤー(JW Player、Flowplayer、Adobe Flash)を利用

Gzip圧縮機能

エッジ側でコンテンツをGZIP圧縮してより高速に配信可能

キャッシュコントロール機能

キャッシュコントロールによりキャッシュヒット率を上昇させて効果的なキャッシュ活用を可能にする

◾️パラメーター値の完全一致  ・URLとフォワードオプション機能(head / Cookie / Query Strings)のパラメーター値の完全一致でキャッシュが指定される仕組み  ・単一ファイルのキャッシュは最大20GB  ・GET / HEAD / OPTIONリクエストを対象

◾️キャッシュ無効化  ・キャッシュが期限切れになる前に無効化することが可能  ・必要のないキャッシュを無効化することで効果的な利用を可能にする  ・コンテンツごとに最大3000個まで無効化パスを指定できる  ・ワイルドカードを利用して最大15個まで無効化パスリクエストが指定可能

セキュリティ機能

様々なセキュリティ設定によるセキュアなコンテンツ配信

SSL配信書を設定して、コンテンツ配信時のHTTPS対応しており、ビューワーアクセスとオリジン配信時の暗号化通信が可能 ・オリジンカスタムヘッダーによる通信制御が可能 ・AWS WAFによるファイアーウォールと連携し、ディストリビューションに対するウェブリクエストを許可、ブロックが可能  また、Referrer制限によるリンク参照禁止も可能 ・AmazonS3バケットからの配信の際にOAIとCloudFrontを指すカスタムドメインによってアクセス制限 ・AWS ShieldによるDDoS対応 ・著名付きURL / Cookieによる有効期限指定 ・GEOリストリクションによる地域情報でアクセス判定

CloudFrontの利用設計

キャッシュ対象を決定した上で、キャッシュ時間やセキュリティ制御を設計する

◾️キャッシュ対象設定  ・コンテンツ利用データ分析などを実施して静的コンテンツ / 動的コンテンツへのキャッシュ対象URLを設定する

◾️TTLの設定  ・変更が反映されるまでの時間も考慮してキャッシュ時間(TTL)を決定する

◾️その他の設定  ・セキュリティ対応等のその他の設定事項の要否を決定(SSL認証の有無 / HTTPSの有無)