6

何千もの小さな BLOB を Azure Storage に書き込むときに、最もパフォーマンスの高い方法を見つけようとしています。アプリケーションのシナリオは次のとおりです。

  • Windows Azure VM にインストールされた常時実行中の Windows サービスによって、何千ものファイルが作成または上書きされています。
  • VM で利用可能な一時ストレージへの書き込みにより、サービスは 1 秒あたり 9,000 を超えるファイル作成に達することができます
  • ファイル サイズは 1 KB から 60 KB の範囲です
  • 同じ sw が実行されている他の VM では、他のファイルが同じ速度と基準で作成されています。
  • 中央リポジトリを構築して更新し続ける必要がある場合、各 VM で実行されている別のサービスが、新しく作成されたファイルを一時ストレージから Azure BLOB にコピーします。
  • 他のサーバーは、より新しいバージョンで Azure Blob を読み取る必要があります。

簡潔にするためにリストしていない多くの制約については、一時ファイル システム上のファイルの代わりに BLOB を直接作成するようにメイン サービスを変更することは現在不可能であることに注意してください。...そして、私が現在見ているものからすると、作成速度が遅くなり、元の要件では受け入れられない.

私が 10,000 ファイルのタイト ループでテストしているこのコピー操作は、1 秒あたり 200 個の BLOB 作成に制限されているようです。ここにある「Windows Azure ImportExportBlob」という名前のサンプル コードを微調整した後、この結果に到達できました: http://code.msdn.microsoft.com/windowsazure/Windows-Azure-ImportExportB-9d30ddd5 にある非同期の提案この回答:小さな azure インスタンスで Parallel.Foreach を使用する

私は、8 コアの特大 VM で 1 秒あたり 200 個の blob 作成という明らかな最大値を取得し、それに応じて "maxConcurrentThingsToProcess" セマフォを設定しました。テスト中のネットワーク使用率は、タスク マネージャーに表示される使用可能な 10Gb の最大 1% です。これは、その VM サイズで利用可能な 800 Mb のうち、およそ 100 Mb を意味します。

経過時間中にコピーされた合計サイズは、約 10 MB/秒であることがわかります。

生成できる Azure Storage トラフィックに制限はありますか? または、非常に多くの小さなファイルを書き込む場合は、別のアプローチを使用する必要がありますか?

4

1 に答える 1

2

@breischl スケーラビリティの目標をありがとう。その投稿を読んだ後、Microsoft が用意した可能性のあるターゲット図をさらに検索し始めたところ、4 つの投稿が見つかりました (私の「評判」をここに投稿するには多すぎます。残りの 3 つは同じシリーズのパート 2、3、および 4 です)。

http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/04/windows-azure-benchmarks-part-1-blobs-read-throughput.aspx

最初の投稿には重要なヒントが含まれています。ストレージとの同時接続を 2 つ以上確立するには、複数のスレッドのServicePointManager.DefaultConnectionLimitを増やす必要がある場合があります。」

これを 300 に設定し、テストを再実行したところ、MB/s の重要な増加が見られました。前に書いたように、"多すぎる" スレッドが BLOB を書き込んでいる場合、基盤となる BLOB サービスの限界に達していると考えていました。これは私の懸念の確認です。したがって、セマフォで動作するようにコードに加えたすべての変更を削除し、もう一度 parallel.for に置き換えて、できるだけ多くの BLOB アップロード操作を開始しました。その結果は驚くべきものでした。61 MB/s の書き込み BLOB と 65 MB/s の読み取りです。

スケーラビリティの目標は 60 MB/秒で、最終的にこの結果に満足しています。
回答ありがとうございます。

于 2012-11-05T13:25:27.493 に答える