現在、さまざまなサイズのディメンションに動的にサイズ変更された製品イメージ(数百万に近い)を提供するCloudFrontを多くのエッジロケーションで使用しています。 Cloudfrontディストリビューションは、オリジナルEC2 PHPスクリプトを使用してS3から元のイメージを取得し、クエリーストリングの基準(幅、高さ、トリミングなど)に基づいて動的に変換し、エッジ位置にキャッシュするCloudfrontにストリームを戻します。Amazon Cloudfrontの複数のエッジロケーションの動的に生成されたイメージをプレキャッシュする
しかし、キャッシュされていない画像を初めてロードするウェブサイト訪問者は、この非常に重い変換によって打たれます。
エンドユーザーが特定のサイズなどで最初にイメージをヒットしないように(各イメージURLを要求するバッチジョブを使用して)イメージを「プリキャッシュ」する機能があります。
残念ながら、プレキャッシングサービスに割り当てられたエッジロケーションにのみイメージがキャッシュされるため、別のエッジロケーションを使用するWebサイト訪問者はキャッシュされたイメージを取得せず、オリジンサーバー上のサイズの大きいスクリプトでヒットします。すべてのエッジ位置が合理的なロード時間以内に画像を取得することができ、我々は持つの来
唯一の解決策は、これです:
我々は原点EC2のPHPスクリプトを指すCloudFrontの分布を持っています。しかし、上記の画像変換を行う代わりに、原点スクリプトはリクエストとクエリーコードのパラメータを別のCloudfrontディストリビューションに転送します。この分布は画像変換を実行する起点EC2 phpスクリプトを持っています。このようにして、画像はEC2インスタンス(アイルランド)の近くのエッジ位置に常にキャッシュされ、画像が別のエッジ位置から要求されたときにさらに別の変換を実行することが回避される。
たとえば、スウェーデンのエッジロケーションがキャッシュしていない/ images/stream/id/12345をヒットしたため、アイルランドのEC2マシンである原点にリクエストが送信されます。 EC2の 'ストリーミング'ページでは、他のCloudfrontディストリビューションから/ image/size/id/12345が読み込まれます。これはキャッシュされていないIrish Edge Locationにも当てはまります。その後、元のEC2マシンと同じサイズのページにリサイズを行います。この後、スウェーデンとアイルランドの両方のエッジロケーションに画像がキャッシュされます。
フランスからの依頼で同じ画像が要求されるようになりました。フレンチエッジロケーションにはキャッシュされていないため、アイルランドのEC2マシンである起源を呼び出します。このマシンは、もう一度irishエッジロケーションに当たる2番目のCFディストリビューションを呼び出します。今回は、画像がキャッシュされ、すぐに返すことができます。フランスのエッジロケーションでは、画像がキャッシュされていますが、「サイズ変更」ページを呼び出す必要はなく、アイルランドでキャッシュされた画像を含む「ストリーミング」ページのみが表示されます。私たちは、それが見えます知っ
これはまた、彼らは私たちのウェブサイトの訪問者によって要求されている前に、当社の「事前キャッシング」バッチサービスアイルランドではアイルランドのエッジ位置とプリキャッシュ画像に対する要求を行うことができますことを意味します。
画像がサイズ変更されている間にエンドユーザーが長い時間待たなければならないという欲望を持っています。
私たちは別の解決策を見落としましたか?上記のコメントはありますか?