Oracle Service Busの「分割-結合」と呼ばれる高度な仲介機能を使用すると、1つのリクエストの個々のメッセージを同時に処理できるため、サービスのパフォーマンスが向上します。このトピックでは、分割-結合について説明します。内容は次のとおりです。
Oracle Service Busの分割-結合機能を使用すると、注文などのサービス・ペイロードを個々のメッセージに分割して同時に処理することができます。順次処理ではなく、同時処理を実行することにより、サービスのパフォーマンスが大幅に向上します。分割-結合では、入力メッセージ・ペイロードをサブメッセージに分け(分割)、それらのサブメッセージを宛先に同時にルーティングして、レスポンスを1つの戻りメッセージに集約(結合)することで、このタスクを実現します。ペイロードを分割し、レスポンスを集約するこのプロセスを分割-結合パターンと呼びます。
分割-結合は、高速システムから低速システムのレスポンス・サービスに向けてペイロードを配信するシナリオで、全体的なレスポンス時間を最適化する場合に特に役立ちます。分割-結合を使用しない場合、通常、ペイロードの個々のメッセージは受信者によって順次解決されます。そのため、レスポンス側のシステムが低速の場合、レスポンス時間が長くなる可能性があります(全体的なレスポンス時間は、メッセージごとのレスポンス時間の合計になります)。分割-結合を使用すると、複数のメッセージが同時に処理されるため、レスポンス側のシステムの負担が減り、レスポンス時間が大幅に向上します。(全体的なレスポンス時間は、個々のメッセージの最長レスポンス時間とシステムのわずかなオーバーヘッドの合計とほぼ同じになります。)
分割-結合機能では、次の2つのパターンがサポートされています。
静的分割-結合では、分割-結合の構成に従って、ペイロードを固定数の新しいブランチに分割することで、Oracle Service Busメッセージ・フローのメイン実行スレッドから分岐します。設計時に、呼び出すサービスの数と種類を決定します。
ある電話会社で、顧客からの通信サービス・パッケージの注文を処理するときに、静的分割-結合を使用するとします。この例では、顧客はDSLサービスとボイス・サービスを一度に申し込むことになります。電話会社は、ペイロードの各リクエストを順次個別に実行するのではなく、Oracle Service Busメッセージ・フローから静的分割-結合パターンを使用する分割-結合へのコールアウトを使用して、メッセージを並列実行できます。
開発者には、このサービス・パッケージの受信サービス・リクエストが必ず2つ(DSLとボイス)になることがわかっているため、この場合、静的分割-結合が理想的なパターンといえます。リクエストを並列ブランチに分割することにより、リクエストを同時に処理できるようになるため、ペイロードを処理する際の全体的なレスポンス時間が向上します。すべてのメッセージの処理が完了すると、生成されたレスポンスが実行スレッドの1つの返信に集約されます。
図37-1は、2つの既知のサービス・リクエスト(DSLのアクティブ化と電話のアクティブ化)に分割し、各リクエストを並列処理して、レスポンスを1つの返信に結合する静的分割-結合を示しています。
動的分割-結合では、受信ペイロードの内容に基づいて新しいブランチを動的に作成することで、Oracle Service Busメッセージ・フローのメイン実行スレッドから分岐します。動的分割-結合では、条件ロジックを使用して作成するブランチの数を決定します。すべてのリクエストが同時に処理され、各レスポンスが1つの返信に集約されます。
ある会社で、従業員の事務用品を自動的に注文するときに動的分割-結合を使用するとします。注文が従業員による送信に基づいて毎週自動的に行われる場合、各週の注文で発生する個々の注文数を知る方法はありません。この会社では、各注文を個別に行うのではなく、Oracle Service Busメッセージ・フローから動的分割-結合パターンを使用する分割-結合へのコールアウトを使用して注文を同時に行うことができます。
開発者には毎週送信される注文数がわからないため、この場合、動的分割-結合が理想的なパターンといえます。動的分割-結合では、すべての注文をループ処理し、並列に配置します。開発者は、処理する注文数を制限することもできます。すべての注文の処理が完了すると、生成された注文レスポンスが実行スレッドの1つの返信に集約されます。
図37-2は、15件の注文を分割し、それらの注文を同時に処理して、レスポンスを1つの返信に結合する動的分割-結合を示しています。
Eclipseの.flowファイルの形式をとる分割-結合は、WSDL操作に基づいています。分割-結合は、FLOWトランスポート(分割-結合専用のトランスポート)による通信を行うWSDLベースのビジネス・サービスにラップされます。このビジネス・サービスは、プロキシ・サービスから呼び出されます。図37-3は、分割-結合フレームワークを示しています。