URL Rewritingパターン
静的コンテンツの退避
目次[非表示] |
解決したい課題
Webサービスを仮想サーバーで提供する場合、アクセス数が多くなると仮想サーバーの数を増やしたり仮想サーバーのスペックを上げたりして負荷に対応する。 しかし、アクセスの大半は静的なコンテンツへのリクエストであることが多く、静的コンテンツのアクセスをどう分散するかは重要な課題となる。
クラウドでの解決/パターンの説明
静的コンテンツのアクセス分散方法として、インターネットストレージを利用する方法がある。 こうすれば、仮想サーバーを増強することなく負荷対策を行うことが可能になる。 この方法を用いるには、静的コンテンツのURLをインターネットストレージのURLに変更する必要があるが、静的コンテンツを直接修正する方法のほかに、 Webサーバーのフィルター機能を利用して配信時にURLを変更する事ができる。 また、インターネットストレージから配信する代わりに、コンテンツ配信サーバからコンテンツを配信する事もできる。
実装
AWSでは静的コンテンツ配信にS3を利用できる。 また、S3上に配置したコンテンツをオリジナルとし、コンテンツ配信サービスのCloudFrontを利用すれば全世界に遅延なくコンテンツを配信できる。
(手順)
- WebApps/Azure Virtual Machines上の静的コンテンツ(JavaScript/CSS/画像など)の一部をS3にアップロード(同期)する。
- 必要に応じて、静的コンテンツがアップロード(同期)されるS3をオリジナルとしたCloudFrontを作成する(CloudFrontを利用する場合はオリジナルサーバーをS3ではなく直接WebApps/Azure Virtual Machinesにすることも可能)。
- HTMLタグ上の静的コンテンツのURLをS3もしくはCloudFrontのものに書き換える。
- Apacheのフィルターモジュール(mod_ext_filter[関連ブログ 1]/mod_sed[関連ブログ 2])やプロキシーとして用意したNginxなどで動的に書き換えることも可能。
- CloudFrontを用いればHTMLタグを書き換えること無く、指定のパスパターンのみS3から静的コンテンツ取得するように設定できる。
構造
利点
- 静的コンテンツのアクセスをS3/CloudFrontに分散することにより、負荷に強くなり、またWebApps/Azure Virtual Machinesのコストも削減できる。
- CloudFrontを利用する場合は、全世界配信に対する距離を起因とするレイテンシー対策にもなる。
- mod_ext_filter/mod_sedやNginxなどを利用している場合はフィルターを入れることで、元のHTMLファイルに手を入れずにパターンを適用できる。 またフィルターをオフにすることで、CloudFrontを使わない形に戻すことも容易にできる。
注意点
CloudFrontを利用する場合は、コンテンツがキャッシュされてしまうため、削除や更新に時間がかかる場合がある。
その他
- Direct Hosting パターンを参照。
関連ブログ