ScalarDB JDBC を使用して共有 ScalarDB Cluster 環境でマイクロサービストランザクションをサポートするアプリケーションを作成する
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このチュートリアルでは、マイクロサービストランザクションをサポートし、ScalarDB JDBC を使用して ScalarDB Cluster の共有クラスタパターンに従うサンプル電子商取引アプリケーションの作成方法について説明します。
共有クラスタパターンの詳細については、マイクロサービスにおける ScalarDB Cluster のデプロイパターンを参照してください。
サンプルマイクロサービスアプリケーションの概要
サンプル電子商取引アプリケーションでは、ユーザーがクレジットラインを使用してアイテムを注文し、支払いを行う方法を示します。
サンプルアプリケーションには、database-per-service パターンに基づく Customer Service と Order Service という2つのマイクロサービスがあります。
- Customer Service は、クレジットライン情報、クレジット制限、クレジット合計を含む顧客情報を管理します。
- Order Service は、注文の配置や注文履歴の取得などの注文操作を担当します。
各サービスには gRPC エンドポイントがあります。クライアントはエンドポイントを呼び出し、サービスも各エンドポイントを呼び出します。
サンプルアプリケーションで使用するデータベースは Cassandra と MySQL です。Customer Service と Order Service は、ScalarDB Cluster を通じてそれぞれ Cassandra と MySQL を使用します。

図に示すように、ScalarDB Cluster には、Consensus Commit プロトコルに 使用される小さなコーディネータデータベースがあります。データベースはサービスに依存せず、可用性の高い方法で Consensus Commit のトランザクションメタデータを管理するために存在します。
サンプルアプリケーションでは、セットアップと説明を簡単にするために、コーディネータデータベースを Order Service の同じ Cassandra インスタンスに共同配置します。また、コーディネータデータベースを別のデータベースとして管理することもできます。
サンプルアプリケーションの焦点は ScalarDB Cluster の使用を実演することであるため、アプリケーション固有のエラー処理、認証処理、および同様の機能はサンプルアプリケーションには含まれていません。
サービスエンドポイント
サービスで定義されているエンドポイントは次のとおりです。
-
Customer Service
getCustomerInfopaymentrepayment
-
Order Service
placeOrdergetOrdergetOrders
このサンプルアプリケーションでできること
サンプルアプリケーションは、次のタイプのトランザクションをサポートします。
- Customer Service の
getCustomerInfoエンドポイントを通じて顧客情報を取得します。 - Order Service の
placeOrderエンドポイントと Customer Service のpaymentエンドポイントを使用してクレジットラインを使用して注文します。- 注文のコストが顧客のクレジット制限を下回っているかどうかを確認します。
- チェックに合格した場合、注文履歴を記録し、顧客が使用した金額を更新します。
- Order Service の
getOrderエンドポイントと Customer Service のgetCustomerInfoエンドポイントを通じて注文 ID で注文情報を取得します。 - Order Service の
getOrdersエンドポイントと Customer Service のgetCustomerInfoエ ンドポイントを通じて顧客 ID で注文情報を取得します。 - Customer Service の
repaymentエンドポイントを通じて支払いを行います。- 顧客が使用した金額を減らします。
getCustomerInfo エンドポイントは、コーディネータからトランザクション ID を受信するときにパーティシパントサービスエンドポイントとして機能します。
前提条件
- 以下のいずれかの Java Development Kit (JDK):
- Oracle JDK: 8、11、17、または 21 (LTS バージョン)
- OpenJDK ディストリビューション (Eclipse Temurin、Amazon Corretto、または Microsoft Build of OpenJDK): 8、11、17、または 21 (LTS バージョン)
- Docker 20.10 以降と Docker Compose V2 以降
ScalarDB Cluster を使用するには、ライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、試用ライセンスキーの設定方法に従ってすぐに使える試用ライセンスキーをご利用いただけます。商用ライセンスを取得するには、お問い合わせください。
ScalarDB Cluster のセットアップ
次のセクションでは、ScalarDB Cluster でマイクロサービストランザクションをサポートするサンプルアプリケーションをセットアップする方法について説明します。
ScalarDB サンプルリポジトリのクローン
ターミナルを開いて、次のコマンドを実行して ScalarDB サンプルリポジトリをクローンします。
git clone https://github.com/scalar-labs/scalardb-samples
次に、以下のコマンドを実行して、サンプルアプリケーションを含むディレクトリに移動します。
cd scalardb-samples/microservice-transaction-sample-with-shared-cluster-with-jdbc/
ライセンスキーの設定
ScalarDB Cluster デプロイメント用のライセンスキー (試用版ライセンスまたは商用ライセンス) を設定ファイル scalardb-cluster-node.properties に設定します。詳細については、ライセンスキーの設定方法を参照してください。
Cassandra、MySQL、および ScalarDB Cluster の起動
ScalarDB Cluster の設定ファイルは scalardb-cluster-node.properties です。
設定に示されているように、Cassandra と MySQL はすでにマルチストレージ設定で設定されています。ScalarDB でマルチストレージトランザクション機能を設定する詳細については、マルチストレージトランザクションをサポートするように ScalarDB を設定する方法を参照してください。
このサンプルアプリケーションを迅速にセットアップするために、ScalarDB Cluster をスタンドアロンモードで実行します。スタンドアロンモードでの ScalarDB Cluster の実行の詳細については、ScalarDB Cluster スタンドアロンモードを参照してください。
また、各マイクロサービスのアクセス制御を実装するために、ScalarDB Auth が有効になっています。ScalarDB Auth の詳細については、ユーザーの認証と認可 を参照してください。
このサンプルアプリケーションを迅速にセットアップするために、ワイ ヤ暗号化は有効になっていません。ただし、本番環境では、クライアントと ScalarDB Cluster ノード間、および ScalarDB Cluster ノード間の通信を保護するためにワイヤ暗号化を有効にすることをお勧めします。ワイヤ暗号化の詳細については、ワイヤ通信の暗号化を参照してください。
サンプルアプリケーション用の Docker コンテナに含まれている Cassandra、MySQL、および ScalarDB Cluster を開始するには、次のコマンドを実行します。
docker compose up -d mysql cassandra scalardb-cluster-node
開発環境によっては、Docker コンテナの起動 に1分以上かかる場合があります。
スキーマの読み込み
サンプルアプリケーションのデータベーススキーマ (データがどのように整理されるかの方法) は、すでに schema.sql で定義されています。
スキーマを適用するには、ScalarDB のリリースに移動し、使用する ScalarDB Cluster のバージョンの SQL CLI ツール (scalardb-cluster-sql-cli-<X.Y.Z>-all.jar) をダウンロードします。
次に、ダウンロードした SQL CLI ツールのバージョンと <X.Y.Z> を置き換えて、次のコマンドを実行します。
java -jar scalardb-cluster-sql-cli-<X.Y.Z>-all.jar --config scalardb-cluster-sql-cli.properties --file schema.sql