濱田孝治(182)65この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。Strategies上記セッションを受講したので、その様子をおとどけします。全体的にはインフラというよりはアプリケーションよりの話なのですが、4つの層にわたって、キャッシュ利用の戦略をコンパクトに纏めてくれていて、非常に有用なセッションでした。́Jイントロダクションセッション内容このセッションでは、以下の内容について説明する。Cost全てはスピードのため。アプリケーションを高速化するかに我々は尽力してきた。Lessアプリケーション高速化手法には複数あるが、ここでは、一番実施が簡単で効果の高い、キャッシュを使った高速化手法を紹介。キャッシュとは、一度取り込んでおいたものを何回も使いまわすこと。CPUよりも安くて早いメモリーを効率良く使いまわすことにより実現する。本セッションでは、4つの層に分かれて、キャッシュを利用した高速化手法について説明していく。tierDatabaseEdge(エッジ層)Edge層で一番利用されるのは、CloudFront。静的ファイルの配信が主だと思われがちだが、動的コンテンツの配信にも対応している。上記要件のアプリケーションがある。世界中にクライアントがある場合に、マルチリージョンでアプリケーションを構築するか?もしくは、代替手段があるか?マルチリージョンでの構成例。この場合だと、リージョン間で同期をとるリソースが必ず必要となる。クラウドフロントを前段に配置した場合の例。マルチリージョン部分は、世界中にエッジロケーションがあるCloudFrontを利用し、アプリケーション部分は、1リージョンで対応することにより、無駄を省くことができる。Lambda@Edgeも利用が可能。Functionは、CloudFrontをトリガーとして、エンドユーザーとオリジンリソースの双方向の通信をトリガーに起動が可能。ユースケースとして、コンテンツのカスタマイズや認証、A/Bテストなどにも利用できる。tier(Web層)AWSに依存しない、一般的なアプリケーションによるWeb層におけるキャッシング方法は様々ある。これらを検討しておく。Gatewayを利用してのキャッシュも可能。Gatewayには、レスポンスキャッシュ機能があり、実行結果をキャッシュすることが可能。EC2のエンドポイントを指定したり、その他、パブリックな接続可能な任意のエンドポイントを利用可能。tier(アプリケーション層)アプリケーション層でのキャッシュとは、以下を対象とすること。認証テンプレート環境コンフィグ要するに全部。全部を検討対象とすること。あらゆるものが監視対象になりうる。考えうる限りのメトリクスをモニタリングし、そこからキャッシュ戦略を検討。ここで基本的な考え方になるのが、「8対2の法則」。皆さん、聞いたこと有りますよね?これは、アプリケーションのトラフィックにも当てはまります。負荷の8割は処理のうち2割に集中するので、それらのリソースを全てキャッシュさせる覚悟でいきましょう。ElastiCacheを利用しましょう。memcachedやRedisも検討対象になります。アプリケーション層のまとめ全てをモニタリングせよ!80%のトラフィックを持つ20%のアクセス元を見つけよ高頻度アクセスを全て、メモリ上にキャッシングせよElastiCachの利用を検討せよDatabase(データベース層)データベース層のキャッシングの話をしよう。伝統的な手法では、データベースの前に、キャッシュ機構を設置します。キャッシュの無効化には2種類あります。常にキャッシュを同期化するDB更新後、アプリケーション側でその返り値を判定し、キャッシュに書き込む方法もあります。これはアプリケーション側の処理が重たくなりがちで、あまり推奨はできません。そこから、ElastiCache内を更新する方法もある。アプリケーション側から、キャッシュは更新しない。遅延は発生するが、アプリケーション側の負担がへり、更新内容を統一的に処理できるので、こちらをオススメしておきたいです。Accelerator(DAX)の採用も検討しましょう。複数テーブルもDAX1クラスタで対応が可能です。DAXのパフォーマンス例を示します。ネガティブキャッシュも活用することで、キャッシュヒット率を向上させることが可能です。Gatewayの検討あらゆる項目のモニタリング利用トップ20%のユーザーの特定Web層キャッシュの導入検討アプリケーション層キャッシュにElastiCacheの利用検討DAXの利用なんでもかんでもキャッシュせよ!!聴講の感想(濱田目線)4層にわたって、それぞれにおけるキャッシュ利用方法について、簡潔にまとめられたセッションで、非常にわかりやすく聞きやすいセッションでした。個人的には、DB層でのキャッシュ方式、とくに、DB更新をトリガーに、ストアドプロシージャからLambdaをキックしてElastiCacheを更新するしくみなどは、全く新しい知見でした。個々の技術要素としては、それぞれ詳細な検討が必要ですが、アプリケーション全体を通して、キャッシュによるパフォーマンス向上の戦略を俯瞰できたので良かったです。それでは、今日はこのへんで。