Service Bus と信頼性

Azure Service Bus では、メッセージ キューとパブリッシュ/サブスクライブのトピックを使用して、エンタープライズ統合メッセージ ブローカー処理を全面的に管理します。 このサービスは、コンシューマーがメッセージを受信する準備ができるまで、メッセージを "ブローカー" ("キュー" など) に保管します。

利点は次のとおりです。

  • 競合するワーカー間での負荷分散。
  • サービスやアプリケーションの境界を越えたデータと制御の安全なルーティングおよび転送。
  • 高い信頼性を必要とするトランザクション作業の調整。

Service Bus の使い方について詳しくは、「Azure Service Bus Messaging」を参照してください。 オンプレミスとクラウド環境の間でアプリケーションやサービスを接続するメッセージングを設定する方法について説明します。

Service Bus が信頼性の高いワークロードにどのように寄与しているかについては、次のトピックを参照してください。

以下のセクションでは、Azure Service Bus と信頼性について具体的に説明します。

  • 設計上の考慮事項
  • 構成チェックリスト
  • 推奨される構成オプション
  • ソース成果物

設計上の考慮事項

Azure Service Bus のアップタイム SLA によって信頼性を最大化します。 適切に構成されたアプリケーションで、メッセージを送受信できるほか、デプロイされたキューやトピックに対するその他の操作を実行できます。 詳細については、「Service Bus の SLA」を参照してください。

その他の設計上の考慮事項には次のものがあります。

Service Bus の Premium および Standard メッセージング レベル」に記載された内容以外に、次の機能が Premium Stock Keeping Unit (SKU) だけで提供されます。

geo ディザスター リカバリー機能を持つ Service Bus を可用性ゾーンにデプロイすると、サービス レベル目標 (SLO) が劇的に上がりますが、アップタイム SLA は変わりません。

チェック リスト

信頼性を考慮して Azure Service Bus を構成しましたか?

  • Azure Service Busの Premium レベルの利点を評価します。
  • Service Bus メッセージングの例外が適切に処理されることを確認します。
  • Service Bus には Advanced Message Queueing Protocol (AMQP) で接続し、可能であればサービス エンドポイントまたはプライベート エンドポイントを使用します。
  • Service Bus メッセージングを使用したパフォーマンス向上のためのベスト プラクティスを確認します。
  • 送信側と受信側で geo レプリケーションを実装して、障害や災害から保護します。
  • geo ディザスター リカバリーを構成します。
  • キューとトピックを使用するミッション クリティカルなメッセージングが必要である場合は、Service Bus Premium で geo ディザスター リカバリーを使用することをお勧めします。
  • Service Bus 名前空間でゾーン冗長を構成します (Premium レベルのみ)。
  • Service Bus 名前空間で高可用性を実装します。
  • 関連するメッセージが保証された順序で配信されることを確認します。
  • JMS API を使用して Java Message Service (JMS) の各種機能を評価します。
  • .NET NuGet パッケージを使用して Service Bus メッセージング エンティティと通信します。
  • メッセージ送受信時の一時的な障害処理に対応するための回復力を実装します。
  • メッセージング ユニットの自動スケーリングを実装します。

構成に関する推奨事項

Azure Service Bus を構成するときは、信頼性を最適化するための次の推奨事項を考慮してください。

推奨 Description
Azure Service Busの Premium レベルの利点を評価します。 プラットフォームでサポートされる障害/災害からの保護を利用できるように、Service Bus の Premium レベルへの移行を検討してください。
Service Bus には AMQP プロトコルで接続し、可能であればサービス エンドポイントまたはプライベート エンドポイントを使用します。 この推奨事項により、Azure バックボーン上でトラフィックが維持されます。 注: および Windows.Azure.ServiceBus 名前空間の既定のMicrosoft.Azure.ServiceBus接続プロトコルは ですAMQP
送信側と受信側で geo レプリケーションを実装して、障害や災害から保護します。 Standard レベルでは、送信側と受信側の geo 冗長の実装のみがサポートされます。 Azure リージョンで障害や災害が発生すると、ソリューションでダウンタイムが生じる可能性があります。
geo ディザスター リカバリーを構成します。 - アクティブ/アクティブ
- アクティブ/パッシブ
- ペアの名前空間 (アクティブ/パッシブ)
- 注: セカンダリ リージョンは、Azure ペアリージョンであることが望ましいです
キューとトピックを使用するミッション クリティカルなメッセージングが必要である場合は、Service Bus Premium で geo ディザスター リカバリーを使用することをお勧めします。 パターンの選択は、ビジネス要件と目標復旧時間 (RTO) によって異なります。
Service Bus 名前空間でゾーン冗長を構成します (Premium レベルのみ)。 ゾーン冗長は、メッセージング ストアの 3 つのコピーで構成されます。 1 つのゾーンがプライマリ メッセージング ストアとして割り当てられ、他のゾーンがセカンダリとして割り当てられます。 プライマリ ゾーンが使用できなくなった場合は、ダウンタイムが認識されることなくセカンダリがプライマリに昇格します。 可用性ゾーンは、新しいリージョンが定期的に追加される Azure リージョンのサブセットで利用できます。
Service Bus 名前空間で高可用性を実装します。 Premium レベルでは、geo ディザスター リカバリーと geo レプリケーションが名前空間レベルでサポートされます。 Premium レベルでは、ディザスター リカバリーのプライマリ名前空間とセカンダリ名前空間を使用してメタデータ ディザスター リカバリーでの高可用性を実現できます。
関連するメッセージが保証された順序で配信されることを確認します。 各メッセージにパーティション キー、セッション ID、またはメッセージ ID を設定して、関連するメッセージがメッセージング エンティティ内の同じパーティションに送信されるようにする必要があるので注意してください。
JMS API を使用して各種の JMS 機能を評価します。 JMS 2.0 API (およびそのソフトウェア開発キット (SDK)) を通じて使用できる機能と、ネイティブ SDK を通じて使用できる機能は異なります。 たとえば、JMS では Service Bus のセッションを使用できません。
メッセージ送受信時の一時的な障害処理に対応するための回復力を実装します。 スループットを維持し、メッセージの損失を防ぐためには、送信操作と受信操作に対して一時的な障害処理とエラー処理を適切に実装することが不可欠です。
メッセージング ユニットの自動スケーリングを実装して、ワークロードに十分なリソースを確保します。

ソース成果物

  • プライベート エンドポイントを使用していない Premium Service Bus インスタンスを特定するには、次のクエリを使用します。

    Resources
    | where
      type == 'microsoft.servicebus/namespaces'
    | where
      sku.tier == 'Premium'
      and isempty(properties.privateEndpointConnections)
    
  • Premium レベルではない Service Bus インスタンスを特定するには、次のクエリを使用します。

    Resources
    | where
      type == 'microsoft.servicebus/namespaces'
    | where
      sku.tier != 'Premium'
    
  • ゾーン冗長が設定されていない Premium Service Bus インスタンスを特定するには、次のクエリを使用します。

    Resources
    | where
      type == 'microsoft.servicebus/namespaces'
    | where
      sku.tier == 'Premium'
      and properties.zoneRedundant == 'false'
    

次のステップ