5

Amazon S3にファイルをアップロードするとき、Instagramのエンジニアリングについての洞察が必要です。私はS3を始めたばかりですが、Instagramは毎日何千もの画像をアップロードするので、フォローするのに適したモデルだと思います。私のアプリはやや似ています。ユーザーは画像をアップロードし、自分の画像を削除でき、すべての画像が公開されます。

私のプロジェクトでは、各ユーザーのアップロードを整理するために、フォルダープレフィックス付きのオブジェクトを作成しています。例えばusername/filename

私のオブジェクトのURLは次のようになります。

https://s3.amazonaws.com/my_bucket/username/28c3d2c6ec098bd077d6b9cb5f13869d.jpg

しかしInstagram:

http://distilleryimage7.s3.amazonaws.com/f4947c1004ca11e2a0c81231380ff428_7.jpg

distilleryimage7それがバケツの名前だと思います。このタイプのURLがどのような利点があるのか​​わかりません。また、Instagramはバケットの「ファイル」を使用せず、すべての画像を1つのバケットに保存していると思います。

S3のベストプラクティスを共有してください。

4

1 に答える 1

5

この URL は、実際には S3 によってデフォルトでサポートされている URL です。米国およびほとんどのバケットでは、次のいずれかを使用できる特別な DNS 解決を行うことができます。

http://my_bucket.my_domain.com

あなた自身の記録にいくつかの変更を加えるか、または:

http://my_bucket.s3.amazonaws.com

A レコードを変更したくない場合 (簡単な入門書: http://docs.amazonwebservices.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs )。

このタイプの URL の利点はもちろん、特定のアセットにサブドメインを使用してブラウザーでの読み込みを高速化するという一般的な考え方です。

もちろんこれは修正です。Facebook、Twitter、Youtube などの他のサイトで使用されているのは、この種のものにまったく異なるドメインを使用することです。これは、これらのアセット用に特別に設計された削除されたドメインであるため、役立ちます (これらのドメインにも Cookie は存在しないはずです)。

したがって、これは実際には S3 のベストプラクティスではありませんが、より一般的な Web 開発のベスト プラクティスであり、本番環境でサイトをプログラミングおよびレイアウトする方法について、より広い視野をカバーしています。

はい、Instagramはすべてのファイルを巨大な単一のバケットに格納します。これはおそらくこれを行う最も健全な方法であり、大きくなると、バケットの一部を複製し、需要に応じてリージョンとサブリージョンに分割するか、pingを実行しますVimeoのようにクラウドフロントに。

編集

これをさらに読んだ後、Instagramはすべてを1つのバケツに収めていないことにも気付きました. 特にバケットは、他の人のアカウントを含む S3 全体で一意に名前を付ける必要があるため、少し奇妙です。そのため、バケット名がまだ使用されていない限り、おそらくユーザー名を直接使用することはありません。

ただし、これを行うことには大きな利点があります。ユーザーごとのレプリケーションやユーザーごとのクラウドフロントと同様ですが、欠点もあります。

  • 多くのユーザーの画像が表示されると、多くの個別の http リクエストが表示されます。すべてが S3 ドメインに対して十分に公平ですが、SEO とブラウザーがそれを利用するために許可されているサブドメインの数がわかりません (IE6 では 6 だと思います)。

  • 単一のバケットではなくユーザーごとに行う必要があるため、バックアップとレプリケーションは困難になる可能性があります。

  • バケットを cdn などに移動すると、ユーザーごとに移動する必要があるため、問題が発生する可能性があります。

  • S3 でバケットの最大制限を見たことを覚えていると思うので、これがどのように効果的にスケーリングされるかはわかりません。

于 2012-09-22T20:55:32.630 に答える