私の Azure クラウド サービスは、.Net ストレージ ライブラリ (1.7) を使用して BLOB の読み取りと書き込みを行います。BLOB は、サービスと同じデータ センターにあります。私の最初のコンテナーでは、操作は高速です (10 ミリ秒のオーダー)。私の 2 番目のコンテナーでは、それらは非常に低速です (通常は約 2 秒または 14 秒で、その間にはほとんどありません)。どちらも CloudBlob.DownloadToStream() を使用してデータを MemoryStream に転送しています。通常、ファイル サイズは 100kB 未満です。
ここで、上記のすべてを実証できる適切なテストをセットアップしていないことを認めます。ログ ファイルを参照しているだけなので、ブロブへのアクセス方法に微妙な違いがある可能性があります。これが事実であることが判明した場合はお詫び申し上げます。
とにかく、これら2つのコンテナの唯一の関連する違いは次のようです:
- 高速のコンテナは頻繁にアクセスされ (1 日あたり数万のリクエスト)、低速のコンテナはほとんどアクセスされません (おそらく 1 日あたり 200 リクエスト)。
- 通常、高速コンテナーには、その後すぐにフェッチされるアイテムが格納されます。遅いコンテナーは、数日前に保存された可能性のあるものをロードしていることがよくあります。
質問:アクセス頻度の低い BLOB のパフォーマンスに影響を与える要因は何ですか? 高速化するにはどうすればよいですか?
(Azure BLOB ストレージがどのように実装されているかはわかりませんが、上記に基づいて、データはストレージ アレイに保存され、動的にスケーリングする VM のコレクションを介してアクセスされると推測します。VM のそれぞれはインメモリを実装します。したがって、Azure が VM をスピンアップする必要があることを検出すると、~14 秒の遅延が発生します.~2 秒の遅延は、VM が利用可能であるが、物理ディスク上のデータを探し出す必要がある場合に発生します (かなり遅いようです)。 10 ミリ秒の遅延は、アイテムがメモリ内キャッシュなどに格納されるときに発生します。)