AamzonWebService(AWS)上での構成について(主に複数Webサーバでの画像ファイル共有)

Events happening in the community are now at Drupal community events on www.drupal.org.
hamako9999's picture

初めまして。濱田と申します。AmazonWebService上での構成について、皆さんのご意見をお伺いしたくこちらのユーザーグループに投稿させていただきました。

現在初めてDrupalで構築したサービスを本番稼働させようとテスト中なのですが、その中でひとつ壁に当たっています。

前提として、全てのHWはAmazon上に構築することとしてます。
当初想定のHW構成は以下のとおりでした。
ロードバランサ、Webサーバ2台、DB(RDS)、画像ファイル格納用のS3

アプリケーション用途は一般的なSNSなので、ユーザによる画像アップロード等が頻繁にあります。

で、まだベータ版のAmazonS3モジュールを利用して画像格納先に利用していたんですが、どうにもこうにもパフォーマンスが出ないためS3の利用をあきらめてしまいました。。。(これはこれで、このモジュールを利用して本番運用されてる方の話は凄く興味があります。)

そこで皆さんに質問なのですが、Drupalで複数Webサーバ構成とするときに、Filesディレクトリ配下をどのような構成で共有されていますでしょうか?

単純にNFSサーバを立てるだけだと今度はそこが単一障害ポイントとなってしまう(元々はS3の高可用性を信頼していた)ので、ディスクミラーリング等が必要になって来て、なんだかややこしい感じがします。。。

あまりDrupal固有の話ではなく、一般的な話題かもしれませんが、Drupalだとこうすることが多いというノウハウがあれば提供いただけると非常にありがたいです。

Comments

すべてをAWS上に構築するのであれば

qchan's picture

S3はスピード重視のサービスではないですし、EC2から直接マウント出来ないので
バックアップ用途に使うほうがしっくり来るような気がします。

濱田さんの目的からすると、ブラウザでの表示パフォーマンスが優先されると思われますので
CDNを使うことを検討されてはどうでしょうか。
AmazonにもCloudFrontというCDNサービスがあります。
EBS+CloudFrontは提案できそうですね。

CloudFrontというのが有りましたね

hamako9999's picture

すっかり忘れていました。そういえばCloudFront有りましたね。
ご指摘ありがとうございます。

料金や仕組み等、まだまだ把握出来ていませんが、まずは調査してみようと思います。

↓こういう記事もありますね。

How to Drupal 7, CDN Module, and Amazon Cloudfront in 10 minutes
http://www.patrickjwaters.com/blog/2011-09-26/how-drupal-7-cdn-module-an...

また、構成が固まってきたら、こちらのスレで報告させて頂きます。

S3でのパフォーマンスについて

hamako9999's picture

AmazonS3でのパフォーマンスについて、冷静にどの程度のパフォーマンス劣化かChromeのデバッグツールを用いて計測してみました。あまり正確な測定ではありませんが、ひとまず共有させて頂きます。

<画面参照時の読み取り速度>
クライアントキャッシュが無い状態で画面を表示した時の画像1枚あたりの平均読み取り速度
・Webサーバにファイルを格納している場合 120ms前後
・S3に画像ファイルを格納している場合 350ms前後

これだけだと、結構な速度差かと思いますが、クライアントからの画像リクエストは基本的に並列で処理されるため、画面全体の読み込み速度は体感的にもほとんど差は感じられません。端的に言うと、見た目あんまり変わりません。

<画像アップロード時、初期画像展開時>
こちらが非常に、比べられないぐらいS3のほうが遅いです。正確に測定したわけではないのですが、体感的には5〜10倍程度遅いです。特にサムネイル画像の作成、展開が遅いと推測されます。
サムネイル画像の作成処理については、自分知識は皆無なのですが、いずれにせよここがボトルネックになってS3では非常に体感的にパフォーマンスが遅く感じられます。

<CloudFrontの使用について>
以上、参照系ではパフォーマンス劣化があまりないため、CloudFrontを入れたとしても正直意味が無さそうです。

もうすこし、突っ込んだ分析ができればいいのですが、時間も正直限られているので、普通にNFSサーバを別のEC2インスタンスで構築し、各WebサーバからNFSマウントして画像ファイル格納領域にあてることにしようと思います。qchan様、ご回答ありがとうございました。

レポートありがとうございます。

qchan's picture

丁寧なレポートありがとうございます。

うまく稼働すると良いですね。

Imagecacheのサムネイル画像の作成、展開は初回ブラウザ表示時に行われますから、
アップロード時には影響しないと思うので別の要因があるかもしれません。

EC2からDrupalのS3モジュールを使って画像アップロードをすると、どうしても
ローカルPC > EC2内Drupal > S3サーバー
と、2回のサーバー間アップロードが入りますので遅くなる原因の一つかと思われます。

また、EC2インスタンスでファイルサーバーの代替をする場合、
データの保全には注意されたほうがよいかと思います。
EC2はインスタンスが止まると全データが消えてしまいます。

前のコメントで提案したEBSはEC2から直接マウントできますのでNFSと同じ感覚で使えます。
CloudFrontは使わず、ファイルサーバーとしてだけEBSを使うのも有効ではないでしょうか。

【AWS】EC2でローカルインスタンスかEBSのどちらを選ぶべきか http://www.playstudy.net/blog/develop/aws_ebs.html

EC2を使われる場合でもS3でのバックアップは必要になるかなと思います。

サービス稼動時には是非ショーケースで紹介してください。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week