CDP:Direct Hostingパターン

From AWS-CloudDesignPattern
Revision as of 01:35, 15 April 2012 by KenTamagawa (Talk | contribs)
Jump to: navigation, search

Contents

解決したい課題

クラウドを利用することでサーバの増減が容易に行えるようになり、システムに対する負荷(特にWebシステムにおけるアクセス負荷)が高くなっても、即時にスケールアップ/アウトすることで対応することができる。しかし、ごく短期間で急激にアクセスが増加した場合、サーバ数増加だけでは対応しきれない場合がある。

これに対応するために、アクセス増を見越してサーバ台数を増やしておく方法が考えられるが、無駄にサーバを増やしておくことは、コスト面で問題がある。

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

この課題を解決する一つの方法として、クラウドが提供する高い可用性と耐久性を持ったインターネットストレージから、直接データを配信する方法がある。

インターネットストレージに保存したオブジェクトを公開設定にすることで、インターネットストレージ上のデータに直接アクセスさせることができる。

インターネットストレージは元々共有ストレージとして使用される前提で設計されており、非常に多くのキャパシティを持っている。このため、あるサービスのアクセスが急激に増加しても、インターネットストレージ全体では問題なく処理できる。

ユーザーが負荷対策を行う必要は無くなるため、コスト的なメリットも大きい。

実装

  • Amazon S3上に、インターネットに公開したい静的なコンテンツ(HTML/CSS/JavaScript/画像/動画/...)をアップロードする。
  • S3バケットに、コンテンツを公開する設定を行う。バケットポリシーに、バケットのコンテンツを公開するパーミッションを設定する。
  • S3のWebサイトホスティング機能をOnにし、インデックスページやエラーページを設定する。

なお、自分のドメイン名を使用したい場合は、使用したいドメイン名のS3バケットを作成し、Amazon Route53などのDNSサーバに、もともとS3バケットに割り振られるDNS名をCNAMEとして登録する。

構造

6wNg0ISJczU5Pz1m-55ECE.png

利点

  • 静的コンテンツへのアクセスをS3に任せることで、Webシステムの可用性と耐久性を容易に高めることができる

注意

  • S3上ではサーバサイドのプログラムを動かすことはできないため、例えばログインユーザーごとに異なるページを出すというような事はできない
  • S3から配信したコンテンツからJavaScriptの非同期通信などで動的にデータを取りたい場合、データ取得先のAPIサーバとはDNS名が異なってしまうため、JavaScriptのクロスドメイン通信の制約によりAPIサーバとはJSONPで通信する必要がある。

その他

  • S3には署名付きURLを発行する機能もあるため、限定利用者にのみアクセスを許すために署名付きURLを発行することもできる。またその署名付きURLに有効期限を設定することもできる。Private Distributionパターンを参照すること。
  • S3ではバケットポリシーというアクセス認証を行う仕組みも用意されているため、特定の利用者からのみのアクセスを行ったり、HTTPSのみのアクセスに限る、などといった設定も可能である。
  • S3には2012年3月時点で、9000億以上のオブジェクト(ファイル)が保存されており、ピーク時に70万以上/秒のリクエストをさばいている。

寄贈したアーキテクト

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox