キャッシュの概要

キャッシュは、アプリケーションのパフォーマンスを劇的に高速化し、コストを大幅に削減するのに役立ちます

キャッシュとは

コンピューティングにおいて、キャッシュは、データのサブセットが保存される高速のデータストレージレイヤーで、通常は一時的な性質のものです。これにより、それ以降に同じデータのリクエストが発生した場合、データのプライマリストレージロケーションにアクセスするよりも高速にデータが供給されます。キャッシュにより、以前に取得または計算されたデータを効率的に再利用できるようになります。

キャッシュの仕組みを教えてください。

キャッシュ内のデータは、一般的に RAM (ランダムアクセスメモリ) などの高速にアクセスできるハードウェアに保存され、ソフトウェアコンポーネントとの相関関係にも使用されます。キャッシュの主な目的は、基盤となる低速なストレージレイヤーにアクセスする必要を減らすことによって、データ取得性能を向上することです。

通常、データベース内のデータは完全で耐久性があるのに対して、一般的にキャッシュにはデータのサブセットが一時的に保存され、容量よりも速度が優先されます。

キャッシュの概要

RAM やインメモリエンジンでは高いリクエストレートや IOPS (1 秒あたりの入力/出力オペレーション数) がサポートされているため、キャッシュによってデータ取得性能が向上し、大きな規模でコストを削減できます。従来のデータベースとディスクベースのハードウェアを使用して同一の規模をサポートするには、リソースの追加が必要になります。このようにリソースを追加するとコストが上昇する一方、インメモリキャッシュによる低レイテンシーのパフォーマンスは実現できません。

キャッシュは、オペレーティングシステム、コンテンツ配信ネットワーク (CDN) や DNS などのネットワーキングレイヤー、ウェブアプリケーション、データベースといったテクノロジーのさまざまなレイヤーに応用できます。キャッシュを使用すると、Q&A ポータル、ゲーム、メディア共有、ソーシャルネットワーキングなど、読み込みが多い数多くのアプリケーションワークロードのレイテンシーを大幅に削減し、IOPS を向上させることができます。キャッシュされた情報には、データベースクエリの結果、計算量の多い計算、API リクエスト/応答や、HTML、JavaScript、画像ファイルなどのウェブアーティファクトが含まれます。レコメンデーションエンジンやハイパフォーマンスコンピューティングシミュレーションなど、データセットを操作して大量の演算を行うワークロードでも、キャッシュとして機能するインメモリデータレイヤーの利点を活用できます。これらのアプリケーションでは、数百のノードにまたがる可能性のあるマシンのクラスター全体で、非常に大きなデータセットにリアルタイムでアクセスする必要があります。基盤となるハードウェアの速度により、ディスクベースのストアでこのデータを操作することは、このようなアプリケーションにとって重大なボトルネックになります。

分散コンピューティング環境では、専用のキャッシュレイヤーにより、キャッシュから独立して、システムとアプリケーションを独自のライフサイクルで実行できるようになります。キャッシュに影響を与えるリスクはありません。キャッシュは、独自のライフサイクルとアーキテクチャトポロジを持つ異種システムからアクセスできる中央層として機能します。これは、アプリケーションノードを動的にスケールインおよびスケールアウトできるシステムに特に関係があります。キャッシュがそれを利用するアプリケーションまたはシステムと同じノードに存在する場合、スケーリングはキャッシュの整合性に影響を与える可能性があります。さらに、ローカルキャッシュを使用すると、データを消費するローカルアプリケーションにのみメリットがあります。分散キャッシュ環境では、データは複数のキャッシュサーバーにまたがり、そのデータのすべてのコンシューマーの利益のために一元的に保存できます。

キャッシュレイヤーの実装では、キャッシュされたデータの有効性を把握することが重要です。正常なキャッシュは、高いヒットレートにつながります。つまり、取得される時にデータが存在しているということです。キャッシュミスは、取得されたデータがキャッシュに存在しない場合に発生します。TTL (有効期限) などのコントロールを適用して、必要に応じてデータの有効期限が切れるように設定できます。別の考慮事項は、キャッシュ環境に高可用性が必要かどうかという点です。これを実現するために、Redis などのインメモリエンジンを使用できます。場合によっては、プライマリロケーションからデータをキャッシュするのではなく、インメモリレイヤーをスタンドアロンのデータストレージレイヤーとして使用できます。このシナリオでは、これが適しているかどうかを判断するために、インメモリエンジン内に存在するデータに対して、適切な RTO (停止してから復旧までにかかる時間を表す目標復旧時間) および RPO (復旧でキャプチャされた最後のポイントまたはトランザクションを表す目標復旧時点) を定義することが重要です。さまざまなインメモリエンジンの設計戦略と機能を適用して、大部分の RTO および RPO の要件を満たすことができます。

レイヤー クライアント側 DNS ウェブ アプリ データベース
ユースケース

ウェブサイト (ブラウザまたはデバイス) からのウェブコンテンツの取得を高速化する

ドメインから IP への解決方法 ウェブ/アプリサーバーのウェブコンテンツの取得を高速化します。ウェブセッションの管理 (サーバー側) アプリケーションのパフォーマンスとデータアクセスを加速する データベースクエリリクエストに関連するレイテンシーを削減する
テクノロジー HTTP キャッシュヘッダー、ブラウザ DNS サーバー HTTP キャッシュヘッダー、CDN、リバースプロキシ、ウェブアクセラレーター、key/value ストア key/value データストア、ローカルキャッシュ データベースバッファ、key/value ストア
ソリューション ブラウザ固有 Amazon Route 53 Amazon CloudFrontRedis 用 ElastiCacheMemcached 用 ElastiCacheパートナーソリューション アプリケーションフレームワーク、Redis 用 ElastiCacheMemcached 用 ElastiCacheパートナーソリューション  ElastiCache for RedisElastiCache for Memcached

Amazon ElastiCache を使用したキャッシュ

Amazon ElastiCache は、クラウド内でのインメモリデータストアまたはキャッシュのデプロイ、運用、およびスケールを容易にするウェブサービスです。このサービスは、低速のディスクベースのデータベースに完全に依存せずに、高速の管理されたメモリ内データストアから情報を取得できるようにすることで、ウェブアプリケーションのパフォーマンスを向上させます。効果的なキャッシュ戦略を実装する方法の詳細については、インメモリキャッシュに関するテクニカルホワイトペーパーを参照してください。

図