エクスポート (0) 印刷
すべて展開

サービス バスのキューおよびトピックのキャパシティ プランニング

作成者: Valery Mizonov、Ralph Squillace

このトピックでは、次の事項について説明します。

  • Windows Azure のキューと、Windows Azure サービス バスのキューおよびトピックのキュー サイズの制限についての重要な違い

  • サービス バスのキューおよびトピック機能を利用するときに、サービス バスのキューの正しい容量を概算する方法

  • 特定のサイズのメッセージをサービス バスのキューまたはトピックにいくつ配置できるかを判断するために、さまざまなサイズのメッセージを使用して実行するテスト

Windows Azure サービス バスにおけるキューおよびトピックのサイズ制限

Windows Azure のキューとサービス バスのキューは、いずれもキュー アクセス方式のストレージを実装したものですが、それぞれの機能セットは微妙に異なります。そのため、アプリケーションのニーズに応じて、どちらかを選択しなければならない場合があります。たとえば、サービス バスには、ビジネス通知シナリオで重要なパブリッシャーとサブスクライバーの実装である、トピックとサブスクリプションがあります。一方、Windows Azure のキューは、サービス バスのキューが現時点で 5 GB に制限されているのに対し、100 TB のデータを格納できます。

この 2 つの大きな違い (最大メッセージ サイズと最大キュー サイズ) を次に示します。

 

比較 Windows Azure Queues サービス バスのキュー

最大メッセージ サイズ

64 KB

注: これには、base64 エンコードのオーバーヘッドが約 25% 含まれます。

256 KB

注: これには、ヘッダーと本文の両方が含まれます。最大ヘッダー サイズは 64 KB です。

最大キュー サイズ

100 TB

注: 最大サイズはストレージ アカウント レベルで制限されます。

1、2、3、4、または 5 GB

サイズは、キューまたはトピックの作成時に定義されます。

最後の違い (Windows Azure のキューのサイズ制限は 100 TB なのに対し、サービス バスのキューおよびトピックのサイズ制限は 5 GB であること) は、きわめて重要です。デッドレター、トピックとサブスクリプション、ルール、アクションなどのサービス バス機能を使用する場合、堅牢なアプリケーションを構築ために、アプリケーションに必要なサービス バスのキューまたはトピックの容量をあらかじめ査定する必要があります。メッセージのサイズ、メッセージ ヘッダーのサイズ、カスタム メッセージ プロパティのサイズと、それらのメッセージがエンキューされたりトピックに送信されたりする速度によっては、きわめて活発なアプリケーションで 5 GB のデータを含むキューまたはトピックが作成されることは容易に考えられます。

さらに、サービス バスのキューでは、キューを作成するときにキュー サイズを決定します。キューの作成後にサイズを変更することはできません。一方、Windows Azure のキューでは大量のストレージにアクセスできるため、キューのサイズを増やすことを考える必要はほとんどありません。

キューまたはトピックが構成済みの容量を超えると、その後メッセージをエンキューするよう要求したときに、Microsoft.ServiceBus.Messaging.QuotaExceededException 例外が発生します。アプリケーションでは、この種の例外を適切に処理する必要があります。たとえば、1 つの方法として、キューまたはトピックへのメッセージの配信を一時的に中断し、コンシューマーにバックログを処理するための十分な時間を与えてから、メッセージのパブリッシュを再開できるようにすることが考えられます。

また、サービス バスのキューに含まれるメッセージは、ヘッダーと本文の 2 つの部分で構成されることも重要です。メッセージ全体 (ヘッダー + 本文) の合計サイズが 256 KB を超えることはできません。サービス バスの仲介型メッセージング API では、テキストの XML シリアル化ではなく、バイナリの XML シリアル化を使用します。これにより、シリアル化されたペイロードの出力サイズが削減されます。結果として、256 KB をわずかに超えるメッセージを格納することが可能になりますが、独自のアプリケーションで実現されるサイズの削減をテストする必要があります。

サービス バスのキューおよびトピックの容量の計算

メッセージのサイズを計算する基本的なアルゴリズムを確認し、どのような種類のサービス バスのキューまたはトピックがアプリケーションに必要かを考えてみましょう。

空白のメッセージでは、本文のサイズは 1,024 バイト、既定のヘッダー サイズは 156 バイトです。他の要素を含めると、カスタム ヘッダーやカスタム プロパティを含まず、空白のメッセージ本文を含むメッセージは、合計で約 1,635 バイトになります。

次の式を使用して、指定した数のメッセージのサイズ要件を概算することができます。

メッセージの数 * (メッセージ本文のサイズ + メッセージ ヘッダーのサイズ)

本文のサイズを判断するには、BrokeredMessage.Size プロパティを使用します。ヘッダー サイズの判断方法は、さらに複雑です。そのため、どの程度の精度を求めるかに左右されます。最も正確な方法は、メッセージ (または、複数のメッセージを送信する前に情報を把握する必要がある場合は、テスト メッセージ) を送信し、NamespaceManager.GetQueue (または NamespaceManager.GetTopic) メソッドを使用してキューのメタデータをクエリし、QueueDescription オブジェクトまたは TopicDescription オブジェクトの SizeInBytes プロパティを使用して、追加されたヘッダーのサイズを判断することです。

トピック サイズの場合は、若干異なるアルゴリズムが必要です。特定の数のメッセージがトピック内で消費する領域を判断する式は、次のとおりです。

メッセージの数 * (メッセージ本文のサイズ + (メッセージ ヘッダーのサイズ * サブスクリプションの数))

ヘッダーのサイズに、トピックに対するサブスクリプションの数を乗算していることに注目してください。これは、トピック メッセージにカスタム ヘッダーを追加した場合、トピック サイズはサブスクリプションの数に応じて増えるということです。

たとえば、サブスクリプションの数が 200 である既定のメッセージの場合、トピック サイズは 32 KB になります。ただし、ヘッダーのサイズを 600 バイトに増やすと、トピック サイズは 120 KB になります。さらに、各サブスクリプション受信者から送信される ACK メッセージを加えると、サイズは大幅に増えます。ヘッダー サイズが 600 バイトでサブスクリプションの数が 200 である単一のメッセージに、200 件の ACK メッセージ (サブスクリプションごとに 1 件) が加わると、568,635 バイトになります。このことを事前に考慮することが重要です。

容量の概算値の検証

サービス バスの単一のキューで保持できるメッセージの数を概算する場合、次のデータを考慮することができます。このデータは、さまざまなメッセージ サイズ オプションでのキューの容量を判断するために、カスタム ユーティリティによって取得されたものです。

 

サンプル メッセージ サイズ 1 GB のキュー 2 GB のキュー 3 GB のキュー 4 GB のキュー 5 GB のキュー

1 KB

1,041,790

2,059,920

3,128,550

4,186,400

5,238,750

10 KB

102,996

208,358

312,537

416,716

520,895

50 KB

20,857

41,792

62,507

83,343

104,179

100 KB

10,466

20,836

31,254

41,672

52,090

250 KB

4,191

8,334

12,501

16,669

20,836

バイナリの XML シリアル化がテスト結果に及ぼす潜在的な影響を排除するために、すべてのサンプル メッセージは、ランダムな値が設定された、それぞれのサイズのバイト配列により初期化されています。

参照


ビルド日:

2013-10-23

コミュニティの追加

表示:
© 2014 Microsoft