Service Broker の動作内容
Service Broker は、非同期の疎結合アプリケーションを構築する際に役立ちます。このようなアプリケーションでは、複数の独立したコンポーネントの働きを組み合わせて、1 つのタスクを遂行します。各コンポーネントは、タスクの遂行に必要な情報が含まれたメッセージを交換します。このトピックでは、Service Broker の次の基本的側面について説明します。
- メッセージ交換
- メッセージの順序付けと調整
- トランザクションとしての非同期プログラミング
- 疎結合アプリケーションのサポート
- Service Broker コンポーネント
メッセージ交換
Service Broker は、メッセージの送受信を基本機能として設計されています。各メッセージは、メッセージ交換(信頼性が高く持続性のある通信チャネル)の一部となっています。各メッセージおよび各メッセージ交換には、Service Broker によって特定の型が適用され、開発者が信頼性の高いアプリケーションを記述するのに役立ちます。
新しい Transact-SQL ステートメントを使用すると、アプリケーションで、信頼性の高いメッセージを送受信することができます。アプリケーションはメッセージをサービスに送信します。サービスは、互いに関連した一連のタスクの名前です。アプリケーションはメッセージをキューから受信します。キューは、内部テーブルのビューです。
同一タスク用のメッセージは、同一のメッセージ交換に属します。各メッセージ交換内では、Service Broker によって、アプリケーションは必ず送信された順序で一度だけ各メッセージを受信します。プログラムでサービスを実装する場合、同一サービス用の関連するメッセージ交換を関連付け、メッセージ交換グループにすることもできます。詳細については、「Service Broker の利点」を参照してください。
証明書に基づくセキュリティは、機密性の高いメッセージを保護し、サービスへのアクセスを制御するのに役立ちます。
Service Broker を理解する方法の 1 つが、郵便サービスにたとえて考える方法です。離れた場所の同僚と意見交換するには、郵便サービスを使用して送られる手紙で通信できます。郵便サービスは、手紙を分類して配達します。双方とも、ポストから手紙を取り出して読み、返事を書き、新しい手紙を発送します。これが、意見交換が終わるまで続けられます。手紙は "非同期的に"、つまり双方が他のタスクを行っている間に、配達されます。
この郵便サービスのたとえでは、手紙がメッセージを表します。各 Service Broker サービスは、郵便局が手紙を配達する宛先住所です。キューは、配達された手紙が入っているポストです。アプリケーションはメッセージを受け取り、メッセージに対して反応し、返事を送ります。
Service Broker を使用するプログラムと他のプログラムは、郵便の配達に似た方法でメッセージ交換を行います。
相手がいつ手紙を読んだり返事を書いたりするのか具体的に知る必要がないのと同様に、Service Broker を使用するアプリケーションは、他のサービスがメッセージをどのように処理するか、メッセージがどのように配信されるか、または他のアプリケーションがいつメッセージを処理するのかを知る必要はありません。
メッセージの順序付けと調整
キューイングは、よく使われるデータベース プログラミング手法ですが、Service Broker でのキューイングの取り扱いは、主に次の 2 つの点で従来の製品と異なります。
- Service Broker のキューは、データベースに統合されています。
- キューによって、関連したメッセージの調整と順序付けが行われます。
キューの統合により、通常のデータベース メンテナンスと管理に Service Broker も含まれることになります。通常、管理者は、Service Broker に関する日常的なメンテナンス作業は行いません。
Service Broker フレームワークは、メッセージ送受信用の単純な Transact-SQL インターフェイスの提供に加え、強力なメッセージの配信と処理を保証します。Service Broker は、プログラムがメッセージ交換の各メッセージをキューに入った順序ではなく送信された順序で一度だけ受け取ることを保証します。従来のキューイング製品は、キューに入った順序でメッセージを渡すので、メッセージの順序とグループについての判断は、アプリケーション側で行う必要がありました。Service Broker の 2 つのキュー リーダーでは、同一のメッセージ交換からのメッセージ、または関連したメッセージ交換の同一グループからのメッセージを同時に処理することはありません。
発信側のプログラムは、各タスクに宛てたメッセージ交換を開始し、対象サービスにメッセージを送信します。メッセージには、タスクの特定手順の実行に必要なデータが含まれます。対象サービスがメッセージを受け取ります。対象サービスのプログラムがメッセージを処理し、発信側サービスに応答します。このようにメッセージ交換が進行し、最後は、開発者の決めたルールに従って終了します。
Service Broker は、メッセージング アプリケーションの記述にかかわる最も難しいタスクを処理します。これらのタスクには、メッセージの調整、信頼性の高いメッセージ配信、ロック、キュー リーダーの開始などが含まれます。このため、データベース開発者は、ビジネス上の問題の解決に集中できます。
トランザクションとしての非同期プログラミング
Service Broker インフラストラクチャでのアプリケーション間のメッセージ配信は、トランザクションとして行われ、非同期です。Service Broker のメッセージングはトランザクションとして行われるため、トランザクションをロールバックすると、トランザクション内のすべての Service Broker 操作 (送受信操作を含む) もロールバックされます。非同期配信では、アプリケーションの実行が続行中であるときに、データベース エンジンが配信処理をします。スケーラビリティを高めるため、Service Broker には、キューを処理するプログラムを必要に応じて自動的に起動するメカニズムがあります。詳細については、「Service Broker のアクティブ化」を参照してください。
非同期プログラミングは、キューを使用するアプリケーションを記述する開発者に役立ちます。多くのデータベース アプリケーションには、リソースが許可したときに実行される作業のキューとして機能するテーブルが含まれます。キューイングは、データベースがインタラクティブなユーザーに対する応答性を維持できるようにする一方で、利用可能なリソースを効率的に使用できるようにします。Service Broker では、データベース エンジンの重要な一部としてキューイングが提供されています。
キューイングを使用すると、アプリケーションによる作業を、その作業を要求したトランザクションとは異なるトランザクションで実行できます。Service Broker ではこれをさらに進めて、異なるインスタンスや異なるコンピュータでアプリケーションが作業を実行できるようにします。Service Broker は、データベース内の組み込みキューイングと、信頼性の高い、インスタンス間のトランザクション メッセージングを提供して、データベース開発者を支援します。
疎結合アプリケーションのサポート
Service Broker では、疎結合アプリケーションがサポートされます。疎結合アプリケーションは、メッセージの送受信を互いに独立して行う、複数のプログラムで構成されます。このようなアプリケーションは、交換するメッセージに対して同じ定義を共有し、サービス間の対話に関する全体的構造を共有する必要がありますが、同時に実行したり、同じ SQL Server インスタンス内で実行したり、実装の細部を共有したりする必要はありません。アプリケーションは、メッセージ交換の相手側に関して、物理的な場所や実装を知る必要がありません。
Service Broker のコンポーネント
Service Broker には、次の 3 種類のコンポーネントがあります。
- **メッセージ交換コンポーネント。**メッセージ交換グループ、メッセージ交換、およびメッセージで、Service Broker アプリケーションの実行時構造が形成されます。アプリケーションは、メッセージ交換の一部としてメッセージを交換します。各メッセージ交換は、1 つのメッセージ交換グループに属しています。メッセージ交換グループには、複数のメッセージ交換を含めることができます。Service Broker のメッセージ交換は、ダイアログ、つまり、二者間で行われる会話です。メッセージ交換コンポーネントの詳細については、「メッセージ交換のアーキテクチャ」を参照してください。
- **サービス定義コンポーネント。**これらは、アプリケーションで使用するメッセージ交換の基本構造を指定する、デザイン時コンポーネントです。アプリケーションにおける、メッセージ型、メッセージ交換フロー、およびデータベース ストレージを定義します。サービス定義コンポーネントの詳細については、「サービスのアーキテクチャ」を参照してください。
- **ネットワーク コンポーネントとセキュリティ コンポーネント。**これらのコンポーネントでは、SQL Server インスタンスの外部でメッセージを交換するためのインフラストラクチャを定義します。Service Broker では、アプリケーション コードに依存しない形でこれらのコンポーネントの構成を管理者が行うことができます。これは、頻繁に変更される環境を管理するデータベース管理者にとって便利です。ネットワーク コンポーネントとセキュリティ コンポーネントの詳細については、「ネットワークとリモート セキュリティ」を参照してください。
サービス定義コンポーネント、ネットワーク コンポーネント、およびセキュリティ コンポーネントは、データベースおよび SQL Server インスタンスのメタデータの一部です。メッセージ交換グループ、メッセージ交換、およびメッセージは、データベースに含まれるデータの一部です。
参照
概念
その他の技術情報
Service Broker のアーキテクチャ
Service Broker のアクティブ化
Service Broker のセキュリティに関する注意点
Service Broker のチュートリアル