Table of Contents
はじめに
FundastA Inc.の鈴木です。
現在、AWS ソリューションアーキテクトアソシエイト試験合格に向けAWSについて勉強中です。
今回は 「キャッシュの活用」 について勉強したことを備忘録として、記述していきます。
キャッシュとは
1度開いたウェブページのデータを保存しておいて、次に同じページを開くときにサクっと表示してくれる仕組み。
事例
初めにログインページでページにアクセスする際に、ユーザー名とパスワードを入力してサイトにアクセスすると思います。2回目以降アクセスするとユーザー名等を入力しなくてもアクセスしただけで、ページにログインできている状態になっていると思います。このように同じページにアクセスすると前回アクセスした情報を保持してくれることをキャッシュと言います。
ElasticCache
クラウド内の人気オープンソース互換のインメモリデータストアをシームレスにセットアップ、実行、およびスケーリングできるサービス
特徴
インメモリキャッシュ型のキャッシュ
-
キャッシュクラスタを数クリックで起動
-
フルマネージド型でモニタリング、自動障害検出、復旧、拡張、パッチ適用、バックアップに対応し高可用性を実現
-
memcachedかredisから選択可能
利点
- 高いパフォーマンス
- ミリ秒単位の応答時間に対応
- 安全かつ非常に高速なパフォーマンスが実現
- フルマネージド型
- セットアップ、設定作業、モニタリング、障害復旧、バックアップといった管理タスクが不要
- 管理タスクが不要であるため、アプリケーション開発に専念できる。
- スケーラブル
- 変化するアプリケーションニーズに応じて、スケールイン、スケールアウト、スケールアップできる。
ElasticCacheのエンジン
Redis(キー・バリュー型NoSQLデータベース)
-
シングルスレッドで動作するインメモリキャッシュDBで全てのデータ操作は排他的
-
スナップショット機能あり
-
データ永続化できる。
- ユースケース
- ゲームや地理空間サービスなどのリアルタイムアプリでの活用
Memcached(分散型インメモリキャッシュ)
-
マルチスレッドで動作するインメモリキャッシュDB
-
スナップショット機能なし
-
データ永続化できない
-
復元不可能
- ユースケース
- データ集約などに活用
CloudFrontの概要
CloudFrontもキャッシュの機能を持っています。
CloudFrontとは
WEBコンテンツ配信処理を高速化するためのサービス
特徴
-
世界210以上のエッジロケーションによる高性能な分散配信
-
高いパフォーマンス
-
AWSWAFやAWSCertificateManagerとの連携やDDoS対策によるセキュリティ機能
-
オリジンに対してHeader/Cookie/QueryStringsによるフォワード指定で、動的なページ配信が可能
リージョナルエッジキャッシュを用いたキャッシュ
従来のアクセス
- EdgeLocationにデータがあれば、そこからクライアントへ返す。
- 上記に残っていない場合は、オリジンにアクセスして返す。
リージョナルエッジキャッシュを加えた形
- エッジロケーションにキャッシュが残っている場合はそこからクライアントを返す。
- エッジロケーションにデータがない場合は、リージョナルエッジキャッシュからクライアントから返す。
- 上記に残っていない場合は、オリジンにアクセスして返す。
メリット
- パフォーマンス劣化の軽減
- オリジンまで取りに行かずに返却できる。
- EdgeLocationより大きなキャッシュで保存可能
※古いコンテンツの削除
最新のコンテンツを表示したいのに古いコンテンツが表示されてしまう場合があります。
これはCloudFrontに古いコンテンツが残ってしまっている場合に起こります。
対処方法としては、CloudFrontディストリビューションで無効化を実施することでキャッシュに残ったコンテンツを削除することができます。
DAX(DynamoDBAccelerator)
DynamoDBにもキャッシュ機能を備えたものがあります。
DAXとは
-
DynamoDBにおいて高速なインメモリパフォーマンスを可能にする。
-
DynamoDBが1桁ミリ秒以下だが、DAXはマイクロ秒単位での応答が可能
-
DynamoDBの間にDAXクラスターを持たせ、キャッシュする仕組み
DynamoDBとインメモリキャッシュを合体させたものと理解しておけば良いと思います。
ユースケース
-
応答時間が短いことが要求されるアプリケーション
-
同じデータを短い期間に大量に読み込むアプリケーション
主に応答時間を短くしたい場合などに使用します。
メリット
- DynamoDB利用時より、1秒当たりのリクエスト数が数百万件になる場合でもミリセカンドからマイクロセカンドへ向上させることができる。
- 読み取りの多いワークロードや急激に増大するワークロードに使用する。
- スループット強化や読み込みキャパシティユニットを必要以上にプロビジョニングしないように設計することで運用コストの節約になる。
おわりに
今回は「キャッシュの活用」について記載しました。
キャッシュといってもElastiCacheだけでなく、CloudFrontやDynamoDBにも機能として利用されている箇所もあります。
主な機能はリクエストを早くしたり、オリジンの負荷軽減ンなどに使用されているように思います。
SAAの練習問題にもキャッシュの活用は出てくるので、機能として覚えておいた方が良いでしょう!
ご覧いただきありがとうございました。