第5章 ルールの更新

各イメージは特定の Maven リポジトリーのスナップショットからビルドされます。新規ルールが追加されるか、既存ルールが変更された場合は、ルールの変更が有効になるように新規イメージを作成し、デプロイする必要があります。

アプリケーションの更新
KIE_CONTAINER_DEVELOPMENT_OVERRIDE 変数は、元のデプロイメントで設定された KIE_CONTAINER_DEPLOYMENT 変数を明示的に上書きするために使用できます。
アプリケーションが変更されており、デプロイできる状態にある場合、.s2i/environment ファイルに KIE_CONTAINER_DEPLOYMENT_OVERRIDE 変数の更新されたバージョンの詳細が組み込まれます。その後に、これをリポジトリーにプッシュしてイメージとしてビルドすることができます。
または、ローカルリポジトリーからバイナリービルドを開始することもできます。

$ oc start-build <RulesTest> --from-repo=</repository/filepath>

これにより、Git リポジトリーのコンテンツが OpenShift に直接送信されます。増分ビルド (Incremental Build) が設定されている場合、新規のビルドが以前に使用されたイメージをプルし、新規 Podの Maven リポジトリーを展開してから欠落したコンテンツをダウンロードします。

5.1. 再作成更新 (Recreate Update) ストラテジー

再作成更新 (Recreate Update) ストラテジー を Realtime Decision Server for OpenShift デプロイメントに適用します。この更新ストラテジーは、古いデプロイメントを自動的に 0 に縮小してから新規バージョンをデプロイします。新規バージョンの検証後に、新規デプロイメントは古いデプロイメントのレプリカサイズに自動的に拡大します。

再作成更新 (Recreate Update) ストラテジーは、ライフサイクルフック (Lifecycle Hook) をサポートし、Realtime Decision Server for OpenShift アプリケーションテンプレートのデフォルトの更新ストラテジーとして設定されます。

注記

新規デプロイメントが検証され、スケーリングされるまでの再作成更新プロセス時に、Realtime Decision Server for OpenShift は非アクティブになります。この期間に、REST クライアントは 503 service unavailable エラーを返し、A-MQ クライアントは タイムアウト になります。

重要

ローリング更新 (Rolling Update) ストラテジー は Realtime Decision Server for OpenShift ではサポートされません。アプリケーションの複数のコンカレントバージョンはデプロイメントでサポートされますが、クラスターは同じバージョンの Pod への有効なルーティングのみをサポートします。

5.2. 複数のコンカレントバージョン

アプリケーションには、異なるバージョンのコンカレント KIE コンテナーが複数含まれる場合があります。それぞれのコンテナーにはクロスローダー環境と一意の識別子があります。一意の識別子は、コンテナー ID またはデプロイメント ID のいずれかになります (これらは同意語です)。

複数のバージョンは、KIE_CONTAINER_DEPLOYMENT 変数を使用してデプロイされます。アプリケーションの各バージョンについては、.s2i/environment ファイルで <alias>=<group_id>:<artifact_id>:<version> が指定されます (パイプ | で区切られます)。

KIE_CONTAINER_DEPLOYMENT=RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1

以下が作成されます。

KIE_CONTAINER_DEPLOYMENT=RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1
KIE_CONTAINER_DEPLOYMENT_ORIGINAL:
KIE_CONTAINER_DEPLOYMENT_OVERRIDE: RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1
KIE_CONTAINER_DEPLOYMENT_COUNT: 2
KIE_CONTAINER_ID_0: df729302a0b7293c0729384710dd82a1
KIE_CONTAINER_KJAR_GROUP_ID_0: com.example.openshift
KIE_CONTAINER_KJAR_ARTIFACT_ID_0: example_workflow
KIE_CONTAINER_KJAR_VERSION_0: 1.0
KIE_CONTAINER_ID_1: 01932fc2931b02cb042ab29d9fc82a8a
KIE_CONTAINER_KJAR_GROUP_ID_1: com.example.openshift
KIE_CONTAINER_KJAR_ARTIFACT_ID_1: example_workflow
KIE_CONTAINER_KJAR_VERSION_1: 1.0
KIE_CONTAINER_REDIRECT_ENABLED: true

または、XML 形式で以下のように表示されます。

<kie-server-state>
  <containers>
    <container>
      <containerId>df729302a0b7293c0729384710dd82a1</containerId>
      <releaseId>
        <groupId>com.example.openshift</groupId>
        <artifactId>example_workflow</artifactId>
        <version>1.0</version>
      </releaseId>
      <status>STARTED</status>
      <configItems/>
      <messages/>
    </container>
    <container>
      <containerId>01932fc2931b02cb042ab29d9fc82a8a</containerId>
      <releaseId>
        <groupId>com.example.openshift</groupId>
        <artifactId>example_workflow</artifactId>
        <version>1.1</version>
      </releaseId>
      <status>STARTED</status>
      <configItems/>
      <messages/>
    </container>
  </containers>
</kie-server-state>
重要

複数のコンカレントバージョンをデプロイするには、KIE_CONTAINER_REDIRECT_ENABLED 変数を true に設定する必要があります。この変数はデフォルトで true になるため、false に設定される場合にのみ .s2i/environment ファイルに明示的に指定する必要があります。

KIE_CONTAINER_REDIRECT_ENABLED 変数は、コンテナー ID の上書きを有効にします。true に設定される場合、アプリケーションの各バージョンについて一意の md5 sum のハッシュが <alias>=<group_id>:<artifact_id>:<version> から生成されます。さらに、エイリアスのリダイレクト を有効にするため、デプロイメントエイリアスを使用するクライアント要求が正しいバージョンのコンテナーにリダイレクトされます。

false に設定される場合、デプロイメントエイリアスがコンテナー ID として使用され、複数のコンカレントバージョンは使用できません。アプリケーションの複数のバージョンが KIE_CONTAINER_DEPLOYMENT に指定され、KIE_CONTAINER_REDIRECT_ENABLEDfalse に設定される場合、アプリケーションの最新バージョンのみがデプロイされ、エイリアスのリダイレクト が無効にされます。

実行中のアプリケーションの .s2i/environment ファイルで KIE_CONTAINER_REDIRECT_ENABLED 変数を変更すると、実行中のアプリケーションの新規コンテナー ID が生成されます。これにより、古いコンテナー ID を使用するすべてのクライアントとの互換性は失われます。

5.3. コンテナー ID

コンテナー ID は、アプリケーションの <alias>=<group_id>:<artifact_id>:<version> から生成される md5 sum のハッシュであり、クライアントの通信に使用されます。複数バージョンの場合、アプリケーションの各バージョンには一意のコンテナー ID がありますが、デプロイメントのエイリアス名は共有されます。

5.4. アプリケーションの複数バージョンの追加、上書き、または更新

アプリケーションがすでにデプロイされている場合、.s2i/environment ファイルで KIE_CONTAINER_DEPLOYMENT_OVERRIDE 変数を使用し、アプリケーションの各バージョンに <alias>=<group_id>:<artifact_id>:<version> を指定して json アプリケーションテンプレートの KIE_CONTAINER_DEPLOYMENT 変数を上書きします。これは、依然として使用されているアプリケーションの古いバージョンを維持するために役立ちます。

たとえば、以下は RulesTest アプリケーションの例になります。

KIE_CONTAINER_DEPLOYMENT=RulesTest=com.example.openshift:example_workflow:1.0

アプリケーションのこのバージョンを維持しつつ、更新バージョンを追加するには、.s2i/environment ファイルを更新します。

KIE_CONTAINER_DEPLOYMENT_OVERRIDE=RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1

更新されたアプリケーションを古いバージョンと共にデプロイするケースについては、「サンプルワークフロー: 古いバージョンと同時に更新バージョンをデプロイする」を参照してください。

5.5. 複数バージョンのターゲット要求

ほとんどの場合、クライアントがサーバー側の機能を実行できるようにするには、名前を指定して特定コンテナーをターゲットに設定する必要があります。これは、完全なデプロイメント名、コンテナー ID ハッシュまたはデプロイメントのエイリアスを指定して実行できます。

例:

  • 完全デプロイメント名: RulesTest=com.example.openshift:example_workflow:1.0
  • コンテナー ID ハッシュ: df729302a0b7293c0729384710dd82a1
  • デプロイメントエイリアス: RulesTest

完全デプロイメント名またはコンテナー ID のいずれかを指定すると、適切なコンテナーにターゲットが設定されます。KIE サーバーのすべてのコンテナーで使用されるデプロイメントを指定すると、適切なバージョンのコンテナーにターゲットを設定するために複数の段階でなる解決プロセスが必要になります。

5.6. エイリアスのリダイレクト

複数バージョンのデプロイメントでは、すべてのアプリケーションが同じデプロイメントエイリアスを共有します。アプリケーションのデプロイメントエイリアスを使用する要求には、要求を適切なバージョンのコンテナーにリダイレクトするための解決プロセスが必要になります。

解決プロセスの階層

複数段階で構成される解決プロセスは、クライアントによって起動されるメソッドおよび要求に関連付けられる ID によって異なります。

プロセス階層 (降順):

  1. 会話 ID
  2. デフォルトコンテナー ID

クライアント

クライアントの相互作用のタイプに応じて、複数のクライアントをサーバーを起動するために使用できます。

クライアント相互作用

KIE の相互作用

org.kie.server.client.KieServicesClient

Decision Server の相互作用

org.kie.server.client.RuleServicesClient

会話 ID

会話は、KIE サービス java クライアントとサーバー間の相互作用を表します。クライアントが会話を開始する際、サーバーからの応答にはエンコーディングされた複数部分からなる見出しが含まれます。クライアントはこの見出しをその後のサーバーへの要求で使用します。この会話ヘッダーには会話 ID が含まれ、これは起動するアプリケーションの正しいバージョンを判別するために REST インターフェースのサーブレットフィルターで使用されるか、または JMS インターフェースの EJB インターセプターで使用されます。

デフォルトコンテナー ID

特定のコンテナー ID を解決できない場合、デフォルトコンテナー ID が最新バージョンのアプリケーションとして判別されます (<alias>=<group_id>:<artifact_id>:<version> がベース)。