3 Bank and Stock-Tradingアプリケーションの実行

Bank and Stock-Tradingアプリケーションをデプロイおよび実行することで、MicroTxを使用して複数のマイクロサービス間でデータの一貫性を維持する方法を学習します。

注意:

この項で説明する手順は、テスト環境または開発環境専用です。本番環境では、これらの手順を使用してMicroTxを設定および使用しないでください。

Bank and Stock-Tradingアプリケーションには複数のマイクロサービスが含まれており、分散型2フェーズ・コミット・トランザクション(XA)を使用します。Bank and Stock-Tradingアプリケーションを実行して、株式の売買および口座間の送金を行います。Bank and Stock-Tradingアプリケーションを実行すると、MicroTxによって、分散マイクロサービスとそのリソース・マネージャ間でトランザクションの一貫性がどのように確保されるかを確認できます。また、KialiやJaegerなどのツールを使用してMicroTxをKubernetesエコシステムと統合し、MicroTxとマイクロサービス間のリクエストのフローをビジュアル化します。

サンプル・アプリケーションを実行することは、MicroTxをよく理解するための最速の方法です

トピック:

3.1 Bank and Stock-Tradingアプリケーションについて

Bank and Stock-Tradingアプリケーションは、MicroTxを使用してリクエストを調整しながら、分散トランザクションに参加するマイクロサービスを開発する方法を示します。このアプリケーションを使用して、一定額の出金または預入、および株式の売買を行うことができます。資金を移動する財務アプリケーションには強力かつグローバルな一貫性が必要であるため、このアプリケーションではXAトランザクション・プロトコルを使用します。

次の図は、Bank and Stock-Tradingアプリケーションの様々なマイクロサービスを示しています。一部のマイクロサービスは、Autonomous Transaction Processingサーバーレス(ATP-S)インスタンスまたはリソース・マネージャに接続します。リソース・マネージャは、データベース、キューイング・システム、メッセージング・システム、キャッシュなどのステートフル・リソースを管理します。

Bank and Stock-Tradingアプリケーションのマイクロサービス

ユーザーが株式ブローカ・サービスを使用して株式を購入すると、このアプリケーションによりコア・バンキング・サービスから資金が引き出され、XAトランザクションの作成によって同等の数の株式が預け入れられます。XAトランザクションでは、購入、販売、引出しおよび預入れなどのすべてのアクションが成功するか、1つ以上のアクションが失敗した場合にすべてがロールバックされます。

参加側マイクロサービスは、MicroTxクライアント・ライブラリを使用します。これが、コールバックを登録して、リソース・マネージャのためにコールバックの実装を提供します。図に示すように、MicroTxはリソース・マネージャと通信して、トランザクションをコミットまたはロールバックします。MicroTxは、トランザクションに関係する各リソース・マネージャに接続して、トランザクションを準備、コミットまたはロールバックします。参加側サービスは、リソース・マネージャにアクセスするための資格証明をコーディネータに提供します。株式ブローカ、コア・バンキング、ブランチ・バンキングおよびユーザー・バンキングの各マイクロサービスは、Spring Boot 3.xに基づいています。Spring RESTアプリケーションで使用可能なMicroTx Spring Bootスタータ・クライアント・ライブラリ・ファイルは、すべてのマイクロサービスとすでに統合されています。

また、トランザクション中に各マイクロサービスはリソース・マネージャを更新し、金額および株式の変更を追跡します。Bank and Stock-Tradingアプリケーションを実行すると、MicroTxによって、分散マイクロサービスとそのリソース・マネージャ間でトランザクションの一貫性がどのように確保されるかを確認できます。

  • MicroTxコーディネータは、参加側サービス間のトランザクションを管理します。

  • 株式ブローカ・マイクロサービスはトランザクションを開始するため、トランザクション・イニシエータ・サービスと呼ばれます。ユーザーは、このマイクロサービスと対話して株式を売買します。新しいリクエストが作成されると、MicroTxライブラリで公開されるヘルパー・メソッドは、begin()メソッドを実行してトランザクションを開始します。このマイクロサービスには、コミット・コールおよびロールバック・コールを発行するビジネス・ロジックも含まれます。トランザクションを開始すると、株式ブローカ・サービスもトランザクションに参加します。株式売買のためのトランザクションを開始した後、株式ブローカ・サービスは、ユーザーのアカウントから株式を預け入れるか引き出すためのトランザクションにも参加します。株式ブローカ・サービスATPインスタンスのリソースを使用します。

  • コア・バンキング、ブランチ・バンキングおよびユーザー・バンキングの各サービスは、株式の取引に関連するトランザクションに参加するため、参加側サービスと呼ばれます。株式売買のためのトランザクションを開始することはありません。MicroTxライブラリには、参加側サービスがトランザクションに自動的に登録できるようにするヘッダーが含まれています。これらのマイクロサービスは、REST APIを公開して、口座残高を取得し、指定された口座で引出しまたは預入れを行います。コア・バンキングおよびブランチ・バンキングの各サービスでは、それぞれバンキング・サービスおよびブランチ・バンキング・サービスATPインスタンスのリソースも使用されます。

サービスはACID要件を満たす必要があるため、金額の引出し、送金、株式の預入れ、売却、金額の引落しまたは入金は、XAトランザクションのコンテキストでコールされます。

3.2 Minikubeの構成とトンネルの起動

Minikubeを構成してから、MinikubeとKubernetesクラスタの間のトンネルを起動します。

開始する前に、マイクロサービス対応トランザクション・マネージャのOCI用イメージを使用してOCIで作成したマイクロサービス対応トランザクション・マネージャ・インスタンスにアクセスできることを確認してください。「インスタンスの作成」を参照してください。
  1. 自動生成されたSSHキーを使用してSSHターミナルを介してopcユーザーとしてインスタンスに接続している場合は、開始する前にoracleユーザーに切り替える必要があります。
    sudo su - oracle
  2. コマンド・プロンプトで、次のコマンドを実行してMinikubeを起動します。
    minikube start
  3. 新しいターミナルで次のコマンドを実行して、MinikubeとKubernetesクラスタの間のトンネルを起動します。このターミナル・ウィンドウを開いたままにします。
    minikube tunnel
  4. パスワードの入力を求められた場合は、ローカル・マシンにアクセスするためのパスワードを入力します。
  5. 新しいターミナルで次のコマンドを実行し、Istioイングレス・ゲートウェイの外部IPアドレスを書き留めます。
    kubectl get svc istio-ingressgateway -n istio-system

    この出力で、EXTERNAL-IPの値(Istioイングレス・ゲートウェイの外部IPアドレス)を書き留めます。この値は次のステップで指定します。EXTERNAL-IPpending状態の場合は、次のステップに進む前に、Minikubeトンネルが実行されていることを確認してください。

    出力例

    Istioイングレス・ゲートウェイのパブリックIPアドレス

    上の例の外部IPが192.0.2.117であるとします。

  6. 次のコマンドに示すように、Istioイングレス・ゲートウェイの外部IPアドレスをCLUSTER_IPADDRという名前の環境変数に格納します。
    export CLUSTER_IPADDR=192.0.2.117

    これを行わない場合は、必要なときに、コマンドでIPアドレスを明示的に指定する必要があります。

Minikubeを起動すると、すべてのサービス・ポッドの実行が開始されます。Minikubeを起動すると、データベース・サービスも起動されます。

3.3 Keycloakの構成

Bank and Stock-Tradingアプリケーション・コンソールでは、Keycloakを使用してユーザーを認証します。

  1. 次のコマンドを実行して、Keycloakにアクセスするための外部IPアドレスとポートを書き留めます。
    kubectl get svc -n keycloak

    この出力で、EXTERNAL-IPおよびPORT(S)の値(Keycloakの外部IPアドレスおよびポート)を書き留めます。この値は後で指定します。

    KeycloakのパブリックIPアドレス

    上の例の外部IPが198.51.100.1で、ポートが8080であるとします。

  2. 次のコマンドを実行して、$HOMEディレクトリからreconfigure-keycloak.shスクリプトを実行します。
    cd $HOME    
    sh reconfigure-keycloak.sh
  3. Keycloakにサインインします。ブラウザで、前の手順でコピーしたIPアドレスとポート番号を入力します。次の例は、サンプル値を示しています。ご自身の環境に基づいて値を指定してください。
    http://198.51.100.1:8080

    このコマンドでは、Keycloakを構成し、アプリケーションの要件に合わせて設定を更新します。

  4. 「管理コンソール」をクリックします。
  5. 初期管理者ユーザー名adminおよびパスワードadminを使用してKeycloakにサインインします。
    ログイン後、adminユーザーのパスワードをリセットすることをお薦めします。パスワードのリセットの詳細は、Keycloakのドキュメントを参照してください。
  6. MicroTx-BankAppレルムを選択し、「ユーザー」をクリックして、MicroTx-BankAppレルム内のユーザーのリストを表示します。MicroTx-BankAppレルムには、次のデフォルト・ユーザー名が事前構成されています。
    ユーザーのリストを表示するダイアログ・ボックス

    各ユーザーのパスワードを設定します。ユーザーの資格証明を提供する方法の詳細は、Keycloakのドキュメントを参照してください。

3.4 すべてのリソースが準備完了であることの確認

Bank and Stock-Tradingアプリケーションを再デプロイし、リソースが使用可能であることを確認します。

  1. HOMEディレクトリからreconfigure-bankapp.shスクリプトを実行して、アプリケーションのHelmチャートで必要とされる値を設定します。
    $ cd $HOME
    $ sh reconfigure-bankapp.sh

    Helmチャートが必要な値によって更新され、Bank and Stock-Tradingアプリケーションが最新の値を使用して再デプロイされます。

  2. Bank and Stock-Tradingアプリケーションが正常に再デプロイされたことを確認します。
    helm list -n otmm

    出力例

    Bankappは正常にインストールされました

    出力で、bankappSTATUSdeployedであることを確認します。

  3. ポッドやサービスなど、すべてのリソースの準備ができていることを確認します。次のコマンドを実行して、ネームスペースotmm内のリソースのリストとそれらのステータスを取得します。
    kubectl get pods -n otmm

    出力例

    otmmネームスペース内のポッドのステータス
  4. データベース・インスタンスが実行中であることを確認します。データベース・インスタンスは、oracledbネームスペースで使用できます。次のコマンドを実行して、oracledbネームスペース内のリソースのリストとそれらのステータスを取得します。
    kubectl get pods -n oracledb

    出力例

    データベース・インスタンスの詳細

    通常、データベース・サービスがMinikube環境で実行を開始するのに時間がかかります。データベース・サービスを含むすべてのリソースの準備が完了し、かつRUNNINGステータスであり、READYフィールドの値が1/1であることを確認した後にのみ、残りのタスクに進みます。

3.5 Bank and Stock-Tradingアプリケーションによる資金の送金

Bank and Stock-Tradingアプリケーションを実行して、資金を送金するとともに、マイクロサービス対応トランザクション・マネージャ(MicroTx)を使用してXAトランザクションを調整する方法を理解します。アプリケーションを実行した後、分散トレースを使用して、MicroTxとマイクロサービスの間でのリクエストのフローを理解します。サンプル・アプリケーションを実行することは、MicroTxをよく理解するための最速の方法です

資金送金リクエストを送信すると、コア・バンキング・サービスおよびブランチ・バンキング・サービスが相互に対話してこのタスクを実行します。次にコア・バンキング・サービスがブランチ・バンキング・サービスに金額の引落しリクエストを送信します。金額が指定の銀行口座から正常に引き落とされると、別の銀行口座に入金されます。マイクロサービスは、XAプロトコルとMicroTxを使用してトランザクションを管理します。XAトランザクションでは、金額の引落しおよび入金などのすべてのアクションが成功するか、1つ以上のアクションが失敗した場合にすべてのアクションがロールバックされます。

資金の送金が支店間で行われます。このサンプル・アプリケーションでは、支店は1つ(アリゾナ)のみであるため、コア・バンキングおよびブランチ・バンキングの各マイクロサービスが相互に対話します。

資金を送金するには:
  1. 銀行アプリケーションにアクセスします。ブラウザで、192.0.2.117/bankappと入力します。192.0.2.117は、以前Minikubeトンネルの起動後に書き留めたIstioイングレス・ゲートウェイの外部IPアドレスです。
    Keycloakログイン・ページが表示されます。
  2. Keycloakインスタンスにアクセスするためのユーザー名とパスワードを入力します。事前構成されたKeycloakユーザーに対して以前指定したパスワードを入力します。
    次の図に示すように、Bank and Stock-Tradingアプリケーションのコンソールが表示されます。Bank and Stock-Tradingアプリケーションのコンソール
  3. 銀行タブをクリックしてから、「サマリー」をクリックします。

    次の図に示すように、口座サマリーが表示されます。口座残高を書き留めます。

    送金開始前の口座残高
  4. 資金送金をクリックしてから、資金送金をクリックします。
    資金送金ダイアログ・ボックスが表示されます。
  5. 資金送金ダイアログ・ボックスで、次の詳細を入力します。
    1. 金額の送金先の名前または口座を選択します。
    2. 送金する金額を入力します。
    3. (オプション。)送金に関する注釈(ある場合)を入力します。 資金送金 - 詳細ダイアログ・ボックス
    4. 「確認」をクリックし、送金の詳細を確認します。
    5. 金額を送金するには、「確認」をクリックします。

      アプリケーションが指定金額を口座10001から引き出して口座10002に預け入れると、「トランザクションID」および「結果」が画面に表示されます。

      資金送金ダイアログ・ボックスの「サマリー」セクション
    6. 「閉じる」をクリックして、資金送金ダイアログ・ボックスを閉じます。
  6. 「サマリー」をクリックして、更新された残高を口座サマリーに表示します。

    次の図は、金額が送金分の500減ったことを示しています。

    口座サマリーでの更新済残高の表示
  7. 次の図に示すように、取引明細書をクリックして取引明細書を表示します。
    資金送金の取引明細書

3.6 Bank and Stock-Tradingアプリケーションによる株式の取引

Bank and Stock-Tradingアプリケーションを実行して、株式を売買するとともに、マイクロサービス対応トランザクション・マネージャ(MicroTx)を使用してXAトランザクションを調整する方法を理解します。アプリケーションを実行した後、分散トレースを使用して、MicroTxとマイクロサービスの間でのリクエストのフローを理解します。サンプル・アプリケーションを実行することは、MicroTxをよく理解するための最速の方法です

株式の購入リクエストを送信すると、株式ブローカ・サービスはコア・バンキング・サービスから必要な金額を引き落とします。次にコア・バンキング・サービスがブランチ・バンキング・サービスに金額の引落しリクエストを送信します。金額が銀行口座から正常に引き落とされると、株式ブローカ・サービスは株式を購入し、購入した株式を口座に預け入れます。マイクロサービスは、XAプロトコルとMicroTxを使用してトランザクションを管理します。XAトランザクションでは、金額の引落しおよび株式の預入れなどのすべてのアクションが成功するか、1つ以上のアクションが失敗した場合にすべてのアクションがロールバックされます。

株式を購入するには:
  1. 銀行アプリケーションにアクセスします。ブラウザで、192.0.2.117/bankappと入力します。192.0.2.117は、以前Minikubeトンネルの起動後に書き留めたIstioイングレス・ゲートウェイの外部IPアドレスです。
    Keycloakログイン・ページが表示されます。
  2. Keycloakインスタンスにアクセスするためのユーザー名とパスワードを入力します。事前構成されたKeycloakユーザーに対して以前指定したパスワードを入力します。
    次の図に示すように、Bank and Stock-Tradingアプリケーションのコンソールが表示されます。Bank and Stock-Tradingアプリケーションのコンソール
  3. 銀行タブをクリックしてから、「サマリー」をクリックします。

    次の図に示すように、口座サマリーが表示されます。口座残高を書き留めます。

    トランザクション開始前の口座残高
  4. 取引タブをクリックします。

    株式取引ページが表示されます。購入する株式と、口座で現在使用可能な株式の単位数を指定します。たとえば、Blue Semiconductor社の株式を購入するとします。次の図は、Blue Semiconductor社の株式を10株保有していることを示しています。

    株式取引ページ
  5. 株式の購入をクリックしてから、株式の購入をクリックします。
  6. 株式の購入ダイアログ・ボックスで、次の詳細を入力します。
    1. 購入する株式を選択します。
    2. 購入する株式の単位数を入力します。
    3. (オプション。)購入に関する注釈(ある場合)を入力します。 株式の購入ダイアログ・ボックス
    4. 「確認」をクリックし、購入の詳細を確認します。
    5. 「確認」をクリックして株式を購入します。

      株式ブローカ・サービスが株式を購入して口座に預け入れると、「トランザクションID」および「結果」が画面に表示されます。

      株式の購入ダイアログ・ボックスの「サマリー」セクション
    6. 「閉じる」をクリックして、株式の購入ダイアログ・ボックスを閉じます。
  7. 株式をクリックして、更新された株式のリストを表示します。

    次の図は、口座においてBlue Semiconductor社の株式数が5 (購入数量分)増えたことを示しています。

    ユーザー・ポートフォリオ詳細セクション
  8. 次の図に示すように、取引明細書をクリックして取引明細書を表示します。
    株式購入の取引明細書
  9. 銀行タブをクリックしてから、「サマリー」をクリックします。

    次の図に示すように、口座サマリーが表示されます。株式ブローカ・サービスが株式の購入に必要な金額を口座から引き落としたときに、口座残高が減っていることに注意してください。

    株式購入後の口座残高

3.7 KialiおよびJaegerのデプロイ(オプション)

オプションで、KialiおよびJaegerを使用して、MicroTxの分散トランザクションを視覚化により追跡およびトレースできます。分散トレースを使用して、MicroTxとマイクロサービスの間でのリクエストのフローを追跡します。

次のコマンドを実行して、KialiおよびJaegerをMinikubeクラスタにデプロイします。

  1. Kialiをデプロイします。
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.17/samples/addons/kiali.yaml
  2. Prometheusをデプロイします。Kialiを使用するには、PrometheusとKialiを同じクラスタにデプロイする必要があります。
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.17/samples/addons/prometheus.yaml
  3. Jaegerをデプロイします。
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.17/samples/addons/jaeger.yaml
  4. Kialiダッシュボードを起動します。次のコマンドを新しいターミナルで実行します。このターミナルは開いたままにしておいてください。新規ブラウザが開いた場合は、ブラウザを閉じます。
    istioctl dashboard kiali

    この出力で、URLを書き留めます。これは、ブラウザでKialiダッシュボードにアクセスできるURLです。たとえば、http://localhost:20001/kialiのようになります。

  5. Jaegerダッシュボードを起動します。次のコマンドを新しいターミナルで実行します。このターミナルは開いたままにしておいてください。新規ブラウザが開いた場合は、ブラウザを閉じます。
    istioctl dashboard jaeger

    この出力で、URLを書き留めます。これは、ブラウザでJaegerダッシュボードにアクセスできるURLです。たとえば、http://localhost:16686のようになります。

3.8 サービス・メッシュ・グラフおよび分散トレースの表示(オプション)

バックグラウンドでの動作、ならびに分散サービスおよびMicroTxによるリクエストの処理方法をビジュアル化するには、前のタスクで起動したKialiおよびJaegerダッシュボードを使用します。

このタスクは、クラスタにKialiおよびJaegerをデプロイしている場合にのみ実行します。
  1. 新しいブラウザ・タブを開き、KialiダッシュボードのURLに移動します。たとえば、http://localhost:20001/kialiのようになります。
  2. otmmネームスペースの「グラフ」を選択します。
  3. JaegerダッシュボードのURLを新しいブラウザで開きます。たとえば、http://localhost:16686のようになります。
  4. 「サービス」ドロップダウン・リストでistio-ingressgatewayを選択します。トレースのリストが表示され、各トレースがリクエストを表します。
  5. トレースを選択して表示します。