CDP:Direct Hostingパターン
From AWS-CloudDesignPattern
Revision as of 01:35, 15 April 2012 by KenTamagawa (Talk | contribs)
Contents |
解決したい課題
クラウドを利用することでサーバの増減が容易に行えるようになり、システムに対する負荷(特にWebシステムにおけるアクセス負荷)が高くなっても、即時にスケールアップ/アウトすることで対応することができる。しかし、ごく短期間で急激にアクセスが増加した場合、サーバ数増加だけでは対応しきれない場合がある。
これに対応するために、アクセス増を見越してサーバ台数を増やしておく方法が考えられるが、無駄にサーバを増やしておくことは、コスト面で問題がある。
クラウドでの解決/パターンの説明
この課題を解決する一つの方法として、クラウドが提供する高い可用性と耐久性を持ったインターネットストレージから、直接データを配信する方法がある。
インターネットストレージに保存したオブジェクトを公開設定にすることで、インターネットストレージ上のデータに直接アクセスさせることができる。
インターネットストレージは元々共有ストレージとして使用される前提で設計されており、非常に多くのキャパシティを持っている。このため、あるサービスのアクセスが急激に増加しても、インターネットストレージ全体では問題なく処理できる。
ユーザーが負荷対策を行う必要は無くなるため、コスト的なメリットも大きい。
実装
- Amazon S3上に、インターネットに公開したい静的なコンテンツ(HTML/CSS/JavaScript/画像/動画/...)をアップロードする。
- S3バケットに、コンテンツを公開する設定を行う。バケットポリシーに、バケットのコンテンツを公開するパーミッションを設定する。
- S3のWebサイトホスティング機能をOnにし、インデックスページやエラーページを設定する。
なお、自分のドメイン名を使用したい場合は、使用したいドメイン名のS3バケットを作成し、Amazon Route53などのDNSサーバに、もともとS3バケットに割り振られるDNS名をCNAMEとして登録する。
構造
利点
- 静的コンテンツへのアクセスをS3に任せることで、Webシステムの可用性と耐久性を容易に高めることができる
注意
- S3上ではサーバサイドのプログラムを動かすことはできないため、例えばログインユーザーごとに異なるページを出すというような事はできない
- S3から配信したコンテンツからJavaScriptの非同期通信などで動的にデータを取りたい場合、データ取得先のAPIサーバとはDNS名が異なってしまうため、JavaScriptのクロスドメイン通信の制約によりAPIサーバとはJSONPで通信する必要がある。
その他
- S3には署名付きURLを発行する機能もあるため、限定利用者にのみアクセスを許すために署名付きURLを発行することもできる。またその署名付きURLに有効期限を設定することもできる。Private Distributionパターンを参照すること。
- S3ではバケットポリシーというアクセス認証を行う仕組みも用意されているため、特定の利用者からのみのアクセスを行ったり、HTTPSのみのアクセスに限る、などといった設定も可能である。
- S3には2012年3月時点で、9000億以上のオブジェクト(ファイル)が保存されており、ピーク時に70万以上/秒のリクエストをさばいている。