2011-01-10 10 views
2

私たちは、敷地内のアプリケーションをAzureクラウドに移動させようとしています。社内の企業ユーザは、管理インターフェースを介して当社のウェブサイトにフルサイズの画像を定期的にアップロードします(Azureブロブストレージに送信されます)。サイトでは、要求されたときに正しいイメージサイズを作成する責任があります。だから、今何が起こっているのですか(前提環境で):Azure/CDNに対するプログラミング

1)ユーザーはフルサイズのファイルをアップロードします。

2)GetImage HTTPハンドラ(つまりhttp://www.site.com/GetImage.aspx?imageid=15&height=100&width=100)で小さいバージョンが要求されると、ハンドラは以前にそのサイズの画像を作成しているかどうかを確認します。そうであれば、レスポンスストリームに直接書き込みます。そうでない場合は、サイズを変更して「/ iamges/cache」ディレクトリに保存し、サイズ変更されたイメージをレスポンスストリームに書き込みます。

3)次にそのファイルがそのサイズで要求されると、以前に作成されたイメージが返されます。

は、だから私は、Azureのブロブストレージを用いた機構の同じタイプを実装したいが、私は懸念のカップルがあります:

1)私は単にブロブが存在するかどうかを確認することはできません。最初にBLOBをダウンロードしてから、FetchAttributesを呼び出して例外がスローされるかどうかを確認する必要があります。ただし、これを実行すると実際にイメージがダウンロードされます。それで、イメージの要求数が2倍にならないのです(1つは存在するかどうかを確認し、もう1つはユーザーに表示する)。

2)イメージが必要なサイズでないとします(blob /images/cache/image_15_100_100.jpgは存在しません - id#15,100x100ピクセル)。だから私はCDNへのリクエストを一度ヒットしてそれが存在するかどうかを確認しています。今私は、おそらく5-10 MBのフルサイズのイメージをダウンロードしなければなりません(高速である私たちのオン・プレミス・ファイルシステムから読み込むのとは対照的に)、5-10 MBのイメージをメモリにロードし、サイズを変更してからCDN。これは時間がかかるようです。特に、1回のリクエストでこれらの画像のうち10〜15個を持つことができたときです。

私はAzureが比較的新しいと知っていますが、このタイプのBLOBストレージとのやりとりの「ベストプラクティス」に近いものはありますか?私が検討できる別のアプローチがありますか?これはイメージのサイズ変更のためのオーバヘッドのように思えるので、私は何かを見逃しているか、別の解決策を見落とさなければならないと考えています。

+0

画像サイズの要求は事前に決められているのか、それとも完全に恣意的ですか? – Omar

+0

これは現在はあらかじめ決められていますが、ビジネス要件によって、その場でサイズを変更する必要があることが示されています。私はすでに正しいサイズでそれらをプリロードすることを考えました。 :) – Scott

+0

Azure SQLを使用して、同じネットワーク上の誰かがローカルネットワーク、キャッシュなどを介して取得できるイメージを要求した場合、特定のサイズの最後のイメージダウンロードへの参照を含むBlobおよびメタデータを保存しないのはなぜですか?あなたはまだダウンロードイメージを持っています – Lloyd

答えて

6

OK、ここにはたくさんのことがあると思います。私の答えは、これらの仮定に基づいています。これらのイメージのため

  • 最終使用は に、上記のウェブサイトは、あなたがにCDNを使用したいアズール
  • 上で実行されている あるウェブサイト
  • 上に表示されます画像へ のアクセスを高速化
  • あなたがいる場合の.Netストレージクライアントに ライブラリ

を使用していますこれらの前提のうちyが間違っていると私に知らせてください。私は適切に答えを編集します。

  1. あなたは正しく、ブロブが存在するかどうかを確認することができる.Netクライアントライブラリには組み込みメソッドがありません。しかし、.FetchAttributes()を実行することで実際に画像をダウンロードすることはなく、単にretrieve the header informationにしようとします(コンテナ内のすべてのブロブをリストするのと同じように)、.DownloadX()メソッドの1つを呼び出すまでブロブは実際にはダウンロードされません。

  2. あなたのサーバーサイドコードは、CDN機能のいずれかを使用するように話す必要はありません。彼らは古いブロブのように、ブロブストレージ内のあなたのイメージとちょうど話すべきです。 CDN URLを使用する必要があるのは、表示しているページのイメージへのパスを指定するときだけです。

  3. イメージのストリームを返さなければならない場合は、そのイメージが含まれているCDNのURLをポイントします。 CDNはあなたが作ることができるどのウェブサイトよりも多くの負荷に対処することができます。ウェブサイトは、ブロブが存在するかどうかを確認し、存在する場合はURLを返すだけです。フルイメージをダウンロードしない場合は、イメージのサイズを変更して保存し、URLを返します。ブロブストレージからイメージにアクセスするのは、ローカルディスクから読み取るほど速くはありませんが、それはかなり速いです。特に、あなたが話しているように、ファイル<の場合は特にそうです。

  4. おそらくどこかで誰かがサイトで使用する画像のサイズを指定しています。それをキャプチャして、サイズ変更されたイメージを生成できますか?