CDP:URL Rewritingパターン

From AWS-CloudDesignPattern
Jump to: navigation, search
Architect

静的コンテンツの退避

Contents

解決したい課題

Webサービスを仮想サーバで行う場合、アクセスが多くなると仮想サーバの数を増やしたりスペックを上げて、 その負荷に対応する必要がある。しかし、アクセスの大半は静的なコンテンツであることが多く、静的コンテンツのアクセスを どう分散するかも重要な課題となる。

クラウドでの解決/パターンの説明

静的コンテンツのアクセス分散方法として、インターネットストレージを利用する方法がある。 静的コンテンツをインターネットストレージに置き、アクセスを逃がすことで、仮想サーバの増強なく負荷対策を行うことも可能である。 静的コンテンツを仮想サーバに逃した場合は、当然、静的コンテンツにアクセスするURLをインターネットストレージのものに変更する必要があるが、 直接コンテンツを書き換えたり、Webサーバなどのフィルター機能を利用して、容易に実現することが可能である。 また、インターネットストレージの代わりにコンテンツデリバリでコンテンツを配信するパターンもある。

実装

AWSにはS3と呼ばれる非常のパフォーマンスの高いインターネットストレージが利用できる。 また、このS3上に配置したコンテンツをオリジンとして、CloudFrontと呼ばれるコンテンツデリバリを 構築し、世界的に遅延なくコンテンツを配信することも可能である。

  • EC2上の静的コンテンツ(JS/CSS/画像など)の一部をS3にアップロード(同期)する。
  • 必要に応じて静的コンテンツがアップロード(同期)されるS3をオリジンとしたCloudFrontを作成する。(CloudFrontを利用する場合はオリジンサーバをS3ではなく直接EC2にすることも可能)
  • HTMLタグ上の静的コンテンツのURLをS3/CloudFrontのものに書き換える。
  • Apacheのフィルターモジュール(mod_ext_filter)やプロキシーとして用意したNginxなどで動的に書き換えることも可能。

構造

6wNg0ISJczU5Pz1m-570C8.png

利点

  • 静的コンテンツのアクセスをS3/CloudFrontに分散することにより、負荷に強くなり、またEC2リソースに対するコストも削減できる。
  • CloudFrontを利用する場合は、全世界配信に対する距離を起因とするレイテンシー対策にもなる。
  • mod_ext_filterやNginxなどを利用している場合はフィルターをオフにすることで、S3/CloudFrontを使わない形に戻すことも容易にできる。

注意点

  • CloudFrontを利用する場合は、コンテンツがキャッシュされてしまうため、削除や更新の反映が遅れてしまう。
  • CloudFrontのオリジンサーバをEC2にしている場合は、EC2が不安定になるとCloudFrontのキャッシュも不安定になってしまう。

その他

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox