この章のチュートリアルでは、Load Generatorを使用してシステムのランタイム操作をシミュレートする手順について説明します。一般的にLoad Generatorは、次の3つの目的で使用されます。
パフォーマンスのチェック: 負荷がかかったときのシステムのパフォーマンスを検証します。レスポンス時間を測定したり、バックエンド・データの入力時などにおいてシステム全体が想定負荷に対応できることを確認します。
初期化: 重要なデータを使用して、デモ目的で学習機能および統計機能を初期化します。
データ処理: オフラインのバッチ・ソースを処理します。たとえば、プロジェクトの初期段階に、以前に収集したデータの分析を行います。
この章の内容は次のとおりです。
負荷がかかったときのパフォーマンスを評価するために、インライン・サービスに定義されている統合点(Begin Call、Service CompleteおよびCall End)をコールする負荷シミュレーション・スクリプトを作成します。スクリプトでは、顧客ID、通話理由コード、エージェント名および通話の長さを毎回変えて、これら3つの連続する統合点を複数回コールします。この反復実行ごとにReason Analysisモデルで学習が行われ、その分析結果をDecision Centerレポートにおいて参照できます。
このチュートリアルでは、Load GeneratorをCRMアプリケーションのシミュレーション・プログラムとして扱い、Real-Time Decision Serverに対して統合点のコールを反復実行します。作成するLoad Generatorスクリプト(xml
ファイルとして保存)には、このシミュレーションの定義が記述されます。
注意: Load Generatorスクリプトを定義するときは、インライン・サービス・オブジェクトへのすべての参照を、ラベルではなく、オブジェクトIDの形式で記述する必要があります。StudioでオブジェクトIDを表示するには、「Inline Service Explorer」タスクバーにあるオブジェクトID用「Toggle」アイコンを使用します。![]() たとえば、Service CompleteインフォーマントのIDは |
この項の内容は次のとおりです。
Load Generatorスクリプトを作成する手順は次のとおりです。
RTD_HOME
\scripts\loadgen.cmd
を実行することで、Load Generatorを開きます。次に、「Create a new Load Generator script」をクリックします。
[F1]を押すと、Load Generatorのオンライン・ヘルプを参照できます。オンライン・ヘルプでは、このチュートリアルに説明されていないパラメータが説明されています。
「General」タブを選択し、表3-1に示されているパラメータの値を入力します。
表3-1 「General」タブのパラメータ
パラメータ名 | 説明 | 値 |
---|---|---|
Client Configuration File |
サーバーとの通信に使用するプロトコル、接続先サーバーおよび使用するポートを指定するプロパティ・ファイル。デフォルトでは、HTTPを使用して、ローカル・サーバーとポート8080で通信します。今回の要件には、デフォルト・ファイルが適しています。 |
RTD_HOME\client\clientHttp
EndPoints.properties
|
Graph Refresh Interval in Seconds |
ユーザー・インタフェースにのみ影響します。このパラメータにより、UI上のグラフおよびカウンタのリフレッシュ間隔を指定します。デフォルトは2秒間隔のリフレッシュです。 |
2 |
Inline Service |
前の項で作成したインライン・サービスに割り当てた名前。 |
Tutorial |
Random Number Generator Seed |
ランダムな数値の生成に使用するシード。デフォルトは-1です。 |
-1 |
Think Time |
複数のトランザクション間における時間。セッション指向の負荷シミュレーションでは、必要に応じて異なる値を指定します。このチュートリアルでは、可能なかぎり多くのセッションを送信し、最大スループットを調べます。このパラメータ値には、固定値または範囲値を指定できます。 |
グローバルな思考時間を指定する固定値 |
Constant |
複数のトランザクション間における思考時間に対する固定の定数。 |
0 |
Number of concurrent scripts to run |
並行して実行することで、同時にアクティブになるセッションの数。このシミュレーションでは、一度に1セッションのみを実行します。 |
1 |
Maximum number of scripts to run |
作成されるセッションの合計数。この数値に達した時点で、イベントの送信が停止します。 |
2000 |
Enable Logging |
loadgenカウンタ・ログの有効化と無効化を切り替えるオプション。このログには、loadgenのパフォーマンス・データ(Load Generatorによって送信されたリクエストの数、エラーの数、リクエストの平均レスポンス時間およびピーク時のレスポンス時間など)の履歴が記録されます。このチェック・ボックスが選択されていない場合は、ログ関連の他の3つのパラメータ(「Append to Existing File」、「Log File」および「Logging Interval in Seconds」)は無視されます。 |
選択解除 |
Append to Existing File |
loadgenスクリプトを実行するたびに既存のログ・ファイルを上書きするか追加するかを指定するオプション。 |
選択解除 |
Log File |
|
RTD_HOME\log\loadgen.csv
|
Logging Interval in Seconds |
Load Generatorのログにのみ影響します。ログへの書込み間隔を指定します。デフォルトは10秒です。 |
10 |
パス名においてRTD_HOME
は、Real-Time Decision Serverがインストールされている場所(たとえば、C:\OracleBI\RTD
)に置き換えてください。
セッションに関連するパラメータは、実行中に変更できないことに注意してください。正確に言うと変更は可能ですが、Load Generatorスクリプトが停止して再起動されるまで、変更は実行に影響しません。
構成を保存します。通常、Load Generatorスクリプトは、インライン・サービスのプロジェクト・フォルダ内にあるフォルダ(フォルダ名はetc
)に保存します。Tutorialインライン・サービスがデフォルト・ワークスペースに作成されている場合は、このパスはC:\Documents and Settings\
Win_User
\Oracle RTD Studio\Tutorial\etc
のようになります。スクリプト(xml
ファイル)に任意の名前を付けます(たとえば、TutorialLoadgen.xml
)。
統合点に対するパラメータの値を定義するには、「Variables」タブをクリックします。「Variables」タブにより、統合点の各パラメータ値を、それぞれ異なるソースから取得できます。
注意: すべてのツリーが左側に表示されていない場合があります。すべてのツリーを表示するには、バーをドラッグして、2つの領域に分割します。 |
「Script」フォルダを右クリックし、「Add Variable」を選択します。名前をvar_customerId
にします。「Contents」で、「Integer Range」を選択し、1から2000までの順次実行を指定します。この定義によって、各セッションで一度処理され、1から2000まで順次実行される変数が作成されます。この例では、最初のセッションがvar_customerId
=1となり、最後のセッションがvar_customerId
=2000となります。「Script」を右クリックし、「Add Variable」をさらに3回選択し、表3-2に示すように、4つの変数を定義します。
表3-2 Load Generatorスクリプトの変数の名前と値
パラメータ名 | コンテンツ・タイプ | 値 |
---|---|---|
var_customerId |
整数値の範囲 |
最小 = 1、最大 = 2000、アクセス・タイプ = 順次 |
var_reasonCode |
整数値の範囲 |
最小 = 17、最大 = 20、アクセス・タイプ = ランダム |
var_agent |
文字列配列 |
文字列を配列に追加するには、テーブル領域を右クリックし、「Add Item」を選択します。次に、新しく作成された行を選択(ダブルクリック)してカーソルを取得し、使用する名前を入力します。[Enter]キーを押して、新しい行の値を登録します。エージェント名として、いくつかのサンプル値(John、Peter、Mary、Saraなど)を追加します。 |
var_length |
整数値の範囲 |
最小 = 75、最大 = 567、アクセス・タイプ = 順次 この値は秒単位で、通話の長さとして使用されます。 |
「Edit Script」タブを選択し、左側の領域を右クリックして「Add Action」を選択します。それぞれが1つの統合点に対応する3つのアクションを追加します。アクションは適切な順序(つまりCallBegin、ServiceComplete、CallEndの順)にする必要があります。
最初のアクションに対して、タイプを「Message」に、統合点の名前をCallBeginにそれぞれ設定します。「Input Fields」で右クリックして「Add item」を選択し、入力フィールドを追加します。「Name」の下のスペースをダブルクリックして値customerIdを入力し、[Enter]を押して新しい値を登録します。customerIdに対応する「Variable」列で、ドロップダウン・リストから「var_customerId」を選択します。「Session Key」を選択し、このフィールドをセッション・キーとして指定します。
ServiceCompleteアクションに対して、表3-3に示されているように、3つのフィールドを追加します。
フィールド名は、Decision Studioに表示されるServiceCompleteインフォーマントの入力パラメータIDと完全に一致する必要があります。オブジェクトのラベルとそのオブジェクトIDとの間における表示を切り替えるには、Decision Studioの「Inline Service Explorer」タスク・バーにある「Toggle」アイコンを使用します。
図3-1は、ServiceComplete用に設定が完了した「Input Fields」セクションを示しています。
「Edit Script」タブで、左側の領域を右クリックして「Add Action」を選択します。タイプを「Message」に、統合点の名前をCallEndにそれぞれ設定します。「Input Fields」で右クリックして「Add item」を選択し、入力フィールドを追加します。「Name」をcustomerId
に、「Variable」をvar_customerId
にそれぞれ設定し、「Session Key」を選択します。
再びLoad Generator構成スクリプトを保存します。この時点で、Load Generatorスクリプトに、3つの統合点へのコールが定義されます。「Edit Script」タブにおけるアクションの順序が正しいこと(つまり、CallBegin、ServiceComplete、CallEndの順になっていること)を確認します。この順序でない場合は、各アクションを右クリックして、上下に移動します。スクリプトを再び保存します。
「Run」タブに移動し、「Play」ボタンを押します。Load Generatorにおいてスクリプトの実行が完了するまで待ちます。
「Pause」ボタンと「Stop」ボタンがあることに注意してください。両者の違いは、「Pause」では順次実行が記憶され一時停止した箇所から再開するのに対して、「Stop」では完全にリセットされる点にあります。
ヒント: 問題が発生した場合、「Run」タブの「Total Errors」を調べます。この値が0よりも大きい場合は、サーバー出力ウィンドウを調べます。問題を示す情報が存在する場合があります。一般的な間違いは次のとおりです。
「Total Requests」の値が1から増えていない場合、loadgenスクリプトの定義に間違いがある可能性があります。次の点を調べてください。
|
Load Generatorの実行後に、Decision Centerを使用すると、モデルの学習結果を参照できます。その手順は次のとおりです。
Webブラウザを起動してURLにhttp://
server_name
:
8080
/ui
を指定して、Decision Centerを起動します。第2.2項「デプロイおよびDecision Centerのセキュリティについて」に説明されているように、提供されているユーザー名とパスワードを使用してログインします。
「Open Inline Services」をクリックします。「Select Inline Service」ウィンドウが表示されます。「Tutorial」を選択し、「Call Reason」を展開して「Make Payment」などの選択肢を1つ選択します。右側のペインで、「Analysis」タブ→「Best-fit」サブタブにナビゲートします。このレポートには、この通話理由が該当した回数と、このコール理由と各属性値間の相関関係に関する要約がそれぞれ記載されます。
興味深いデータが表示されます。図3-2に示されているように、call reason codeとMake Paymentとの間に、予想外に強い相関関係があります。
通話理由コード(call reason code)のデータはLoad Generator変数によってランダムに生成されているため、強い相関関係は想定範囲にありません。ただし、ここでは、通話理由コード(ServiceCompleteインフォーマントによって送信される)が、この通話理由に大きく関係しています(ロジックの詳細は、第2.9.5項「全体のテスト」を参照)。
この誘発的な相関関係を解消するには、この属性がモデルへの入力として使用されないように除外します。モデルから除外する属性の別のタイプとして、顧客の電話番号があります。個々の電話番号と通話理由との間には、特定の相関関係が存在する可能性は低いです。一方、顧客の地域コードと通話理由との間には相関関係が存在する場合があるため、この属性はモデルから除外しません。次の項では、通話理由コードの属性をモデルから除外し、Load Generatorスクリプトを再び実行します。
reason code属性を除外する手順は次のとおりです。
Decision Studioで、Tutorialプロジェクトを開きます。
「Inline Service Explorer」から「Service Metadata」→「Models」を開き、「Reason Analysis」をダブルクリックします。
「Attributes」タブに移動します。下側にあるテーブル(テーブルのタイトルは「Excluded Attributes」)で、「Select」をクリックし除外する属性を選択します。「Session」ノード→「call」エンティティを開き、「reason code」を選択します。「OK」をクリックします。
すべてを保存し、ローカル・ホスト・サーバーに再デプロイします。
Load Generatorスクリプトを再び実行できます。
再実行後にDecision Centerを使用してカウントの値を調べると、Load Generatorを2回実行したときのイベントが含まれています。これは、Load Generatorスクリプトを属性除外前に実行してから属性除外後に実行する前にモデルをリセットしていないためです。
次に示すように、モデルの学習内容をリセットするには、JConsole管理ツールを使用します。
OC4JまたはWebLogicを使用している場合、JAVA_HOME
\bin\jconsole.exe
を実行してJConsoleを起動します。WebSphereを使用している場合、JConsoleの構成中に作成したバッチ・スクリプトを実行します。JConsoleのアクセス方法の詳細は、『Oracle Real-Time Decisionsインストレーションおよび管理ガイド』を参照してください。
「Remote」タブを選択します。インストール中に作成した管理者資格証明と適切なポート番号(通常は12345
)を入力し、「Connect」をクリックします。
「MBean」タブをクリックしてから、「OracleRTD」→「InlineServiceManager」→「Tutorial」→「Development」→「Loadable」MBeanに移動します。
「Operations」タブをクリックしてから、deleteAllOperationalData()操作を使用して、このインライン・サービスの操作データをすべて(結果も含めて)削除します。
新しい分析結果をDecision Centerで参照するために、Load Generatorスクリプトを再び実行します。
これまで、単純ですが完全な機能を持つインライン・サービスを作成しました。それには、データ環境、データソースおよび顧客エンティティの定義から始めて、現在の通話データのエンティティを定義しました。基本的な機能をテストした後、分析実行用の統合点とモデルを作成しました。顧客の通話理由を調べて通話理由の発生回数を記録するロジックを、モデルに分析目的で追加しました。次に、Load Generatorを使用して、Real-Time Decision ServerおよびTutorialインライン・サービスに対するリクエストをシミュレートしました。最後に、結果をDecision Centerに表示しました。