16 メッセージ・スロットル用にビジネス・サービスを構成する方法

この章では、Oracle Service Busのスロットを有効化および使用する方法について説明します。スロットルはビジネス・サービスおよびリモート・サーバーへのメッセージ・トラフィックの量を制御し、通信量の多いビジネス・サービスでメッセージのオーバーロードが発生しないようにして、パフォーマンスの向上と安定性を改善する際に役立ちます。

この章の構成は、次のとおりです。

16.1 スロットルについて

ビジネス・サービスへのメッセージ・フローを制御してバックログを回避するため、Service Busアプリケーションでビジネス・サービスに対するメッセージ・スロットルを有効化し、構成できます。

複数のビジネス・サービスから1つのリモート・サーバーへのメッセージのフローを制御する場合は、それらのビジネス・サービスを管理するためのスロットル・グループを作成できます。

16.1.1 スロットルの概念

メッセージ・フローを制御するためにスロットルを使用するときには、スロットル・キューを作成します。ビジネス・サービスが同時実行性の最大値に達した場合や、スロットル・グループが同時実行性の最大値に達した場合には、このキューにメッセージが格納されます。メッセージは優先度が高いものから処理されます。同じ優先度のメッセージが複数ある場合は、先入れ先出し方式で処理されます。優先度の高いメッセージが先に処理されるようにするために、ルーティング・オプションを使用してメッセージに優先度を割り当てます。メッセージの優先度は、優先度の整数が大きいほど高くなります。

スロットル・キューは、インメモリー・キューです。スロットルが適用されるビジネス・サービスまたはサーバーごとのキューは最大で1つです。このキューに置かれているメッセージは、サーバー障害が発生した場合やサーバーを起動した場合に回復できません。スロットル・キューに格納されているメッセージは、キューに格納されている期間がビジネス・サービスまたはスロットル・グループに定義したメッセージの有効期限の値を超えると期限切れメッセージになり、キューから削除されます。ビジネス・サービスの削除または名前変更を行うと、スロットル・キュー内のすべてのメッセージが破棄されます。

16.1.2 スロットルのプロパティ

ビジネス・サービスまたはスロットル・グループのスロットルを有効にするときには、メッセージの許容量に関する情報と、許容量を超えたときにメッセージを保持するために使用するスロットル・キューに関する情報を構成します。スロットル・キューを使用するには、キューの長さを指定する必要があります。スロットル・キューの長さが0 (ゼロ)の場合、定義された容量(最大同時実行性)に達すると、メッセージは破棄されます。キューの長さの超過や有効期限切れが原因でメッセージがキューから破棄または削除されると、スロットル・エンジンがTransportExceptionをパイプラインにスローし、エラー・ハンドラが構成されている場合はトリガーされます。

16.1.2.1 最大同時実行性

最大同時実行性により、ビジネス・サービスまたはスロットル・グループで同時に処理可能なレコードの数が制限されます。このしきい値に達すると、このビジネス・サービスに対するすべての着信メッセージは、ビジネス・サービスがさらにメッセージを受け取れる状態になるまで、スロットル・キューに置かれます。キューがいっぱいの場合、優先度の低いキュー内のメッセージは削除され、新しい着信メッセージがキューに入ります。この設定を実行時に変更すると、新しいメッセージとキュー内にすでに存在するメッセージの両方に影響します。値を大きくすると、Service Busは、キュー内のメッセージの処理後に、より多くのメッセージを処理できるようになります。値を小さくすると、Service Busは、処理するメッセージの数が新しいしきい値を下回るまで、新しいメッセージをすべてスロットル・キューに格納します。

16.1.2.2 スロットル・キューの長さ

スロットル・キューの長さにより、任意の時点でスロットル・キューに保持できるメッセージの数が制限されます。最大同時実行性の制限を超える着信メッセージは、すべてスロットル・キューに配置されます。キューが完全に満たされているときに、優先度の高い新しい着信メッセージがあると、キュー内で最も優先度の低いメッセージが削除されます。この設定の値を実行時に小さくすると、新しい長さを超えるメッセージはすべて破棄されます。

16.1.2.3 メッセージの有効期限(TTL)

メッセージの有効期限の期間(存続時間)により、スロットル・キューにメッセージを保持できる時間が制限されます。時間が経過すると、メッセージはキューから削除されます。このようなメッセージは、期限切れのメッセージと呼ばれます。この設定の値を大きくすると、新しいメッセージとキュー内に既に存在するメッセージの有効期限が延長されます。この設定の値を小さくすると、新しい値を超えたすべてのメッセージは即時に破棄されます。この値はキュー・レベルで設定します。キューに入れられたメッセージの「メッセージの有効期限」の値はすべて同じになります。有効期限を過ぎると、メッセージは処理されずにキューから削除されます。

16.1.3 スロットル・グループ

個別のビジネス・サービスにスロットルを構成すると、参照されるサービスをホストしているサーバーの制限を考慮に入れずに、それらのビジネス・サービスのメッセージ・フローを制御することになります。同一のリモート・サーバーにリクエストを送信するビジネス・サービスが複数存在すると、サーバーの許容量を超過することがあります。スロットル・グループを定義することで、複数のビジネス・サービスから特定のリモート・サーバーに送信されるメッセージのフローを制限できるようになります。

スロットル・グループは、Oracle JDeveloperまたはOracle Service Busコンソールのどちらかで作成できます。スロットル・グループの作成時に、ビジネス・サービスのURLをグループに関連付けます。各URLは、1つのスロットル・グループにのみ関連付けできます。1つのスロットル・グループに含まれるすべてのビジネス・サービスには、メッセージ処理について同一の優先度が割り当てられます。ルーティング・ルールで設定されたメッセージの優先度により、処理の順序が決まります。複数のメッセージに同一の優先度が割り当てられていると、それらのメッセージは先入れ/先出しポリシーで処理されます。

グループのスロットルを有効化する場合は、そのグループに含まれているメッセージ・フローを制限する必要のある各ビジネス・サービスのスロットルも有効にする必要があります。

16.1.4 スロットル・グループのプロパティとビジネス・サービスのスロットルのプロパティ

スロットル・グループに設定するプロパティは、個別のビジネス・サービスに設定するプロパティと同じです。Service Busは、最大同時実行性プロパティを次に示すように決定します。

  • スロットル・グループに設定された最大同時実行性が、そのグループ内の各ビジネス・サービスに設定された最大同時実行性の合計よりも大きい場合、Service Busはビジネス・サービスに設定された同時実行性を使用します。

  • スロットル・グループに設定された最大同時実行性が、そのグループ内の各ビジネス・サービスに設定された最大同時実行性の合計よりも小さい場合は、スロットル・グループに設定された同時実行性の制限が優先されます。

スロットル・グループに設定されたスロットル・キューの長さとメッセージの有効期限の期間により、そのグループ内の各ビジネス・サービスのデフォルト値を指定します(それらの値が、ビジネス・サービスに定義されていない場合)。これらの値は、スロットル・グループが有効であるか無効であるかとは関係なく、グループから継承されます。Service Busは、スロットル・キューの長さとメッセージの有効期限のプロパティを次に示すように決定します。

  • スロットル・グループに関連付けられたビジネス・サービスに対して指定したプロパティ値は、そのスロットル・グループ自体に対して指定した値よりも優先されます。ただし、ビジネス・サービスの値が、そのビジネス・サービスを関連付けたスロットル・グループの値よりも大きい場合、スロットル・グループに設定した値が優先されます。

  • ビジネス・サービスにプロパティの値が指定されていない場合、スロットル・グループに定義された値が使用されます。

16.1.5 複数のエンドポイントURIを使用するビジネス・サービスのスロットル

Service Busでは、ビジネス・サービスを複数のエンドポイントURIに関連付けることができます。エンドポイントURIの詳細は、「ビジネス・サービスのエンドポイントURIのモニターおよび管理」を参照してください。ビジネス・サービスを複数のURIに関連付ける際には、個々のURIではなく、そのビジネス・サービスの最大同時実行性を構成します。各URIの最大同時実行性は、全体の最大同時実行性とロード・バランシングの重みにより、次の数式に基づいて内部的に設定されます。

URI-specific max_concurrency = [User configured max_concurrency] X [weight]

たとえば、3つのエンドポイントURI eu1eu2およびeu3を使用するビジネス・サービスBを考えてみます。ロード・バランシング・アルゴリズムは、ランダムな重みベースであると定義されます。URIの重みは、それぞれ12および3です。ビジネス・サービスの最大同時実行性を10と定義したと仮定すると、URI固有の最大同時実行性は、1020および30です。また、ビジネス・サービスBの有効最大同時実行性は60です。重みが3の最終エンドポイントURIがオフライン状態である場合、このビジネス・サービスの有効最大同時実行性は30です。

ノート:

ロード・バランシングがラウンド・ロビンまたはランダムに設定されている場合のURIの重みは1です。また、ロード・バランシングがなしに設定されている場合、プライマリURIの重みは1で、バックアップURIの重みは0です。プライマリURIがオフライン状態になると、バックアップURIの重みは1になります。

スロットルは、ルーティング・オプションでエンドポイントURIがオーバーライドされているメッセージには適用されません。また、セッション固定が有効になっている場合は、メッセージにもスロットルが使用されません。

16.1.6 再試行されたメッセージのスロットル

サービスに対してフェイルオーバーが有効である場合、再試行されたメッセージにはスロットルは適用されません。メッセージは、スロットルの操作設定にかかわらず、その次のURIに送信されます。スロットル・キューが一杯になっているため、またはサービスが最大同時実行性の値に達しているために、期限切れになったり破棄されたメッセージは再試行されません。

16.1.7 スロットルとワーク・マネージャ

エンドポイントのスロットルおよびディスパッチ・ポリシー(ワーク・マネージャ)はどちらも負荷を制限する働きがありますが、処理の異なる領域に作用します。プロキシ・サービスに対して構成されたワーク・マネージャは、そのプロキシ・サービスで実行されるスレッド数を制限します。ビジネス・サービスに対して構成されたワーク・マネージャは、バックエンド・システムからのレスポンスを処理するスレッド数を制限します。ビジネス・サービスに対して構成されたエンドポイントのスロットルは、バックエンド・システムへのリクエストを制限します。ワーク・マネージャとスロットルを組み合せて使用することにより、これら3つの処理ポイントを制御できます。

16.2 クラスタ内でのスロットル

スロットル許容量は、クラスタ全体の設定です。各管理対象サーバーには、独自のサーバー固有の許容量があります。スロットル許容量は、すべての管理対象サーバーに均等に分割されます(稼働していないサーバーがあったとしても)。

クラスタ内の管理対象サーバー間に作業を分割するときには、各サーバーのスロットル許容量(maximum concurrency)が端数処理されます。たとえば、クラスタに3つの管理対象サーバーがあり、許容量が10の場合、その許容量は各サーバーに4ずつ分配されます。スロットルが構成されると、クラスタ内の各管理対象サーバーのスロットル許容量が1以上となります。

16.3 スロットルのメトリック

Service Busは、Oracle Enterprise Managerの「Service Busプロジェクト」ビジネス・サービスについての「ダッシュボード」ページに、スロットルのサービス・メトリックを表示します。

ダッシュボードには、現在の集約間隔および最後の統計のリセット以降の最大スロットル時間、最小スロットル時間および平均スロットル時間が表示されます。詳細は、「サービスのすべてのサービス・ヘルス統計の表示」を参照してください。JMXモニタリングAPIを使用してメトリックにアクセスすることもできます。詳細は、「JMXモニタリングAPI」を参照してください。

16.3.1 スロットルのメトリックを使用したアラートの定義

SLAアラート・ルールは、使用可能なスロットルのメトリックに基づいて定義できます。たとえば、最大スロットル時間が指定の時間を超えたときのアラートを作成できます。詳細は、「サービス・レベル・アグリーメントのアラート・ルールの作成」を参照してください。

16.4 1つのビジネス・サービスに対するスロットルの構成

スロットルの有効化および無効化やスロットル・プロパティの構成は、Fusion Middleware Controlのビジネス・サービスのホーム・ページにある「プロパティ」タブで実行します。

このページで適用した変更内容は、すぐに有効になります。

16.4.1 1つのビジネス・サービスに対するスロットルの構成

ランタイムに対してビジネス・サービスをデプロイまたは有効化していると、そのサービスのスロットルを有効化または無効化したり、スロットル・オプションを構成したりできます。スロットルを有効化すると、エンドポイントに対するメッセージのフローが制限され、メッセージは優先度に応じて処理されるようになります。ルーティング・オプションを使用してメッセージに優先度を割り当てることもできます。優先度を割り当てていないと、メッセージは先入れ先出し方式でデキューされます。

1つのビジネス・サービスのスロットルを構成するには:

  1. Fusion Middleware Controlの「ターゲット・ナビゲーション」パネルで、「SOA」「service-bus」の順に開き、構成するビジネス・サービスが含まれているプロジェクトの名前をクリックします。

    Service Busプロジェクト」ホーム・ページが表示されます。

  2. 「操作」タブで、ビジネス・サービスの検索を実行します。

    「操作」表に結果が表示されます。

  3. ビジネス・サービスの名前をクリックして、そのビジネス・サービスのホーム・ページを表示します。
  4. 「プロパティ」ページが隠れている場合は、「プロパティ」タブをクリックします。
  5. ビジネス・サービスのスロットルを有効にするには、「スロットルの状態」をクリックします。
  6. 次の情報を入力します。
    • 最大同時実行性: ビジネス・サービスで同時に処理できるレコードの最大数。この値は0 (ゼロ)にできません。この値は、正の整数にする必要があります。

    • スロットル・キュー:スロットル・キュー内のメッセージの最大数。0の値は、スロットル・キューが存在しないことを表します。

    • メッセージの有効期限: キューにメッセージを保持できる期限切れになるまでの時間(ミリ秒数)。0の値は、メッセージが期限切れにならないことを表します。

    これらのプロパティの詳細は、Fusion Middleware Controlに付属のオンライン・ヘルプを参照してください。ビジネス・サービスがスロットル・グループの一部であれば、これらのフィールドは空白のまま残すことができます。この場合、Service Busではスロットル・グループのプロパティ・セットを使用します。

  7. 「適用」をクリックします。

16.4.2 1つのビジネス・サービスに対するスロットルの無効化

ビジネス・サービスに対するメッセージのスロットルが必要なくなった場合には、いつでも、そのサービスに対するスロットルを無効にできます。スロットルを無効にすると、スロットル・キュー内のメッセージは通常どおりに処理されますが、メッセージ・フローはスロットルのパラメータで制限されることはなくなります。

ビジネス・サービスのスロットルを無効にするには

  1. Fusion Middleware Controlの「ターゲット・ナビゲーション」パネルで、「SOA」「service-bus」の順に開き、構成するビジネス・サービスが含まれているプロジェクトの名前をクリックします。

    Service Busプロジェクト」ホーム・ページが表示されます。

  2. 「操作」タブで、ビジネス・サービスの検索を実行します。

    「操作」表に結果が表示されます。

  3. ビジネス・サービスの名前をクリックして、そのビジネス・サービスのホーム・ページを表示します。
  4. 「プロパティ」ページが隠れている場合は、「プロパティ」タブをクリックします。
  5. 「スロットルの状態」チェック・ボックスをクリアします。
  6. 「適用」をクリックします。

16.5 ビジネス・サービスのグループに対するスロットルの構成

スロットル・グループは、プロジェクトの開発にどちらを使用したかによって、Oracle JDeveloperまたはOracle Service Busコンソールで作成および構成できます。

スロットル・グループに含まれるビジネス・サービスに対してスロットルを有効にするには、スロットル・グループと、そのグループに含まれる各ビジネス・サービスのスロットルを有効にする必要があります。

16.5.1 スロットル・グループの作成

スロットル・グループを使用して、ビジネス・サービスのグループからリモート・サーバーへのメッセージのフローを制限します。

スロットル・グループを作成するには:

  1. 次のいずれかを行います:
    • JDeveloperの場合: 「アプリケーション・ナビゲータ」で、新しいサービス・アカウントを含めるプロジェクトまたはフォルダを右クリックし、「新規」をポイントして「スロットル・グループ」を選択します。

    • Oracle Service Busコンソールの場合: プロジェクト・ナビゲータで、新しいサービス・アカウントを含めるプロジェクトまたはフォルダを右クリックし、「作成」をポイントして「リソース」を選択します。「リソース・ギャラリ」から、「その他」「スロットル・グループ」「OK」の順にクリックします。

  2. このスロットル・グループに一意の名前を入力します。また、オプションとして説明を入力します。
  3. 「作成」または「終了」をクリックします。

    スロットル・グループの定義エディタが表示されます。

  4. グループのスロットルを有効にするには、「スロットルの状態」を選択します。
  5. 次の情報を入力します。
    • 最大同時実行性: グループ内のビジネス・サービスで同時に処理できるレコードの最大数。

    • スロットル・キュー:スロットル・キュー内のメッセージの最大数。

    • メッセージの有効期限: キューにメッセージを保持できる期限切れになるまでの時間(ミリ秒数)。

    これらのプロパティの詳細は、Service Busに付属のオンライン・ヘルプを参照してください。

  6. 「保存」をクリックします。

    スロットル・グループは、現在のセッションで作成および保存されます。

    ノート:

    Oracle Service Busコンソールでは、セッションを破棄すると、スロットル・グループが破棄されます。新しい情報を有効にするには、セッションをアクティブ化する必要があります。

  7. スロットル・グループにビジネス・サービスを追加する場合は、「ビジネス・サービスとスロットル・グループの関連付け」に進みます。

16.5.2 ビジネス・サービスとスロットル・グループの関連付け

スロットル・グループを作成すると、そのグループにビジネス・サービスを関連付けできます。また、すでにグループに関連付けられているビジネス・サービスを削除することもできます。

スロットル・グループにビジネス・サービスを関連付けるには:

  1. Oracle JDeveloperまたはOracle Service Busコンソールを起動します。
  2. プロジェクト・ナビゲータまたは「アプリケーション・ナビゲータ」で、ビジネス・サービスを関連付けるスロットル・グループをクリックまたはダブルクリックします。
  3. 「関連付けられたビジネス・サービス」表の上側で、「編集」または「追加」をクリックします。

    ダイアログが表示され、追加するビジネス・サービスが選択できます。

  4. Oracle Service Busコンソールを使用している場合は、追加するビジネス・サービスの検索を実行します。基準を省略して検索すると、すべてのビジネス・サービスが返されます。
  5. プロジェクトを開いて、スロットル・グループに関連付けるビジネス・サービスを選択します。
  6. 「OK」をクリックします。
  7. ビジネス・サービスを間違って関連付けた場合は、そのビジネス・サービスを「関連付けられたビジネス・サービス」表から選択して、「削除」をクリックします。
  8. 「保存」をクリックします。

    サービス・アカウントが現在のセッションで作成および保存されます。

16.5.3 スロットル・グループの編集

スロットル・グループを作成すると、スロットルのプロパティを変更できます。また、グループのメッセージ・フローを制限する必要がなくなった場合は、グループを無効にすることもできます。

スロットル・グループを編集するには:

  1. Oracle JDeveloperまたはOracle Service Busコンソールを起動します。
  2. 「アプリケーション・ナビゲータ」またはプロジェクト・ナビゲータで、編集するスロットル・グループを含んでいるプロジェクトおよびフォルダを開きます。
  3. スロットル・グループの名前を右クリックして、「開く」を選択します。
  4. 次の変更を行います。
    • グループのスロットルを無効にするには、「スロットル有効」チェック・ボックスをクリアします。

    • スロットルのプロパティのいずれかを変更します。

    • 追加のビジネス・サービスをグループに関連付けるには、「関連付けられたビジネス・サービス」表の上側で「追加」または「編集」をクリックして、新しいサービスを関連付けます(「スロットル・グループの作成」を参照)。

    • グループからビジネス・サービスを削除する場合は、そのビジネス・サービスを「関連付けられたビジネス・サービス」表から選択して、「削除」をクリックします。

  5. 変更が終了したら、「保存」をクリックします。
  6. Oracle Service Busコンソールを使用している場合は、「アクティブ化」をクリックし、セッションを終了して、ランタイムに構成をデプロイします。

16.5.4 スロットル・グループの削除

スロットル・グループを削除すると、その時点で処理されているメッセージと、スロットル・キューに格納されているメッセージが完全に処理されます。関連付けられていたビジネス・サービスについては、Fusion Middleware Controlで、引き続き個別にスロットルを構成できます。グループ内のすべてのビジネス・サービスのスロットルを無効にする場合は、それらを個別に無効にする必要があります(「1つのビジネス・サービスに対するスロットルの無効化」を参照)。

スロットル・グループを削除するには:

  1. Oracle JDeveloperまたはOracle Service Busコンソールを起動します。
  2. 「アプリケーション・ナビゲータ」またはプロジェクト・ナビゲータで、削除するスロットル・グループを含んでいるプロジェクトおよびフォルダを開きます。
  3. スロットル・グループを右クリックして、「削除」を選択します。
  4. 確認ダイアログで、「OK」または「はい」をクリックします。
  5. Oracle Service Busコンソールを使用している場合は、「アクティブ化」をクリックし、セッションを終了して、ランタイムに構成をデプロイします。