Azure Storage パフォーマンス チェックリスト


このポストは、11 月 18 日に投稿された Azure Storage Performance Checklist の翻訳です。

Azure Storage 利用時のパフォーマンスを最適化する方法については、TechEd や Build での講演、フォーラムのスレッド、ブログ記事、直接お会いしたときなど、これまでにたびたびご説明する機会がありました。アプリケーションのパフォーマンスを最大限に高めようという皆様の熱心な姿に大変心打たれます。

こうした皆様の目標を達成していただけるように、このたびマイクロソフトは Azure Storage パフォーマンス チェックリストを公開しました。このドキュメントにはパフォーマンスに関するガイダンスがまとめられており、ワンクリックで簡単に入手できます。印刷にして約 15 ページのこの短いドキュメントは開発者が 30 分程度で読めるもので、アプリケーションのパフォーマンスを向上させるために役立つ 40 以上の有効なベスト プラクティスの詳細がチェックリスト形式で提示されています。以下にチェックリストの一部を抜粋します。

完了

領域

カテゴリ

質問

 

BLOB

メタデータの使用

各 BLOB を毎回ダウンロードする手間を省くために、頻繁に使用するメタデータを BLOB のメタデータに格納していますか?

 

BLOB

迅速なアップロード

1 つの BLOB を迅速にアップロードするときに、ブロックを並列アップロードしていますか?

 

Table

構成

Table 要求に JSON を使用していますか?

 

Table

返されるデータの限定

不要なプロパティが返されないように、プロジェクションを使用していますか?

 

Queue

更新メッセージ

エラー発生時にメッセージ全体の再処理が必要になる事態を回避するために、UpdateMessage を使用してメッセージ処理中の進捗を格納していますか?

 

Queue

アーキテクチャ

Queue を使用して、クリティカル パスから長期間のワークロードを外し、アプリケーション全体の拡張性を高めて、その後、個別に規模を設定していますか?

このチェックリストは、新しいアプリケーションを設計する場合や、既存の設計を検証する場合に役立ちます。すべてのアプリケーションにすべての推奨事項が該当するわけではありませんが、どの推奨事項も幅広く適用できるベスト プラクティスであるため、これに沿うことによって多くのアプリケーションにメリットがあります。

この他にも有効なベスト プラクティスを見つけしだいこのチェックリストを更新し、Azure Storage の新機能を追加する際にベスト プラクティスを適用していきたいと思います。ここに含まれていない有効なベスト プラクティスをご存知の場合は、ぜひご連絡ください。

シナリオの例

チェックリストに記載された推奨事項の多くは、コードに簡単に実装できます。以下に 3 つの例をご紹介します。いずれも適切なコンテキストで適用することで、アプリケーションのパフォーマンスを大幅に向上させることができます。

シナリオ 1: Queue: 構成

小さな要求のパフォーマンスを上げるために、Nagle をオフにしていますか?

Nagle アルゴリズムは既定で有効に設定されています。Queue のエンドポイントについて無効にするには、以下のコードを使用します。このコードは、Queue のエンドポイントの呼び出しを行う前に実行する必要があります。

var storageAccount = CloudStorageAccount.Parse(connStr);
ServicePoint queueServicePoint =
  ServicePointManager.FindServicePoint(storageAccount.QueueEndpoint);
queueServicePoint.UseNagleAlgorithm = false;
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

シナリオ 2: BLOB: BLOB のコピー

効率的な方法で BLOB をコピーしていますか?

あるストレージ アカウントのコンテナーから別のストレージ アカウントのコンテナーに BLOB データをコピーする場合、以下のように一度ダウンロードしてからアップロードすることができます。

CloudBlockBlob srcBlob = srcBlobContainer.GetBlockBlobReference("srcblob");
srcBlob.DownloadToFile(@"C:\Temp\copyblob.dat",System.IO.FileMode.Create);

CloudBlockBlob destBlob = destBlobContainer.GetBlockBlobReference("destblob");
destBlob.UploadFromFile(@"C:\Temp\copyblob.dat", System.IO.FileMode.Open);

ただし、以下に示すように、StartCopyFromBlob といった BLOB のコピー メソッドを使用すると、コピーを大幅に効率化することができます。

CloudBlockBlob srcBlob = srcBlobContainer.GetBlockBlobReference("srcblob");
CloudBlockBlob destBlob = destBlobContainer.GetBlockBlobReference("destblob");
destBlob.StartCopyFromBlob(GenerateSASUri(srcBlob));

注: この例では、ソース コンテナーのプライベート BLOB にアクセスするために Shared Access Signature (SAS) を使用します。

シナリオ 3: BLOB: 迅速なアップロード

1 つの BLOB を迅速にアップロードするときに、ブロックを並列アップロードしていますか?

.NET Storage Client Library を使用している場合、ブロックの並列アップロードを管理する機能を利用できます。以下のサンプル コードは、BlobRequestOptions クラスを使用して、ブロックの並列アップロードに使用できるスレッドの数 (この例では 4) を指定する方法を示しています。

CloudBlockBlob blob = srcBlobContainer.GetBlockBlobReference("uploadinparallelblob");
byte[] buffer = ...

var requestOptions = new BlobRequestOptions()
{
  ParallelOperationThreadCount = 4
};
blob.UploadFromByteArray(buffer, 0, buffer.Length, null, requestOptions);

注: .NET Storage Client Library では、複数の小さなサイズの BLOB が複数のブロックではなく、単一の BLOB としてアップロードされる可能性があります。NET Storage Client Library でブロック アップロードを使用するサイズの最小しきい値は、BlobRequestOptions クラスの SingleBlobUploadThresholdInBytes プロパティによって指定されます。

まとめと次のステップ

マイクロソフトが作成した Azure Storage パフォーマンス チェックリストには、さまざまなソースから得られた 40 以上の有効なベスト プラクティスが含まれています。このチェックリストを利用することで、Azure Storage サービスを使用するアプリケーションのパフォーマンスを大幅に改善することができます。

まずはチェックリストに目を通し、印刷していただき、アプリケーションのパフォーマンスを向上させるためにどのようなことができるかをご確認ください。今後も有効なベスト プラクティスが追加される予定ですので、ぜひ定期的にチェックしてください。

Jeff Irwin
Azure Storage プログラム マネージャー

Comments (0)

Skip to main content