LINQ を使用して共有 ScalarDB Cluster 環境でマイクロサービストランザクションをサポートするアプリケーションを作成する
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このサンプルが依存している JoinTransactionAsync メソッドは ScalarDB 3.19 以降非推奨となり、将来のリリースで削除される予定です。
このチュートリアルでは、マイクロサービストランザクションをサポートし、ScalarDB Cluster .NET Client SDK と LINQ の共有クラスターパターンに従うサンプル電子商取引アプリケーションの作成方法について説明します。
共有クラスターパターンの詳細については、マイクロサービスにおける ScalarDB Cluster のデプロイパターンを参照してください。
このセクションでは、ScalarDB Cluster .NET Client SDK と LINQ を使用して、共有クラスターパターンに従うサンプル電子商取引アプリケーションの作成方法について説明します。
サンプルマイクロサービスアプリケーションの概要
このサンプル電子商取引アプリケーションは、ユーザーがクレジットラインを使用して商品を注文し、支払いを行う方法を示しています。
このサンプルアプリケーションには、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 プロトコルに使用される小さな Coordinator データベースがあります。このデータベースはサービスに依存せず、Consensus Commit のトランザクションメタデータを可用性の高い方法で管理するために存在します。
サンプルアプリケーションでは、セットアップと説明を簡単にするために、Coordinator データベースを Order Service の Cassandra インスタンスと同じ場所に配置しています。または、Coordinator データベースを別のデータベースとして管理することもできます。
サンプルアプリケーションの焦点は 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 を受信するときに、参加者サービスエンドポイントとして動作します。
前提条件
- .NET SDK 8.0
- Docker Compose V2 以降を備えた Docker 20.10 以降
.NET SDK 8.0 は、サンプルアプリケーションの作成に使用されたバージョンです。サポートされているすべてのバージョンについては、要件を参照してください。
ScalarDB Cluster を使用するには、ライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、試用ライセンスキーの設定方法に従ってすぐに使える試用ライセンスキーをご利用いただけます。商用ライセンスを取得するには、お問い合わせください。
ScalarDB Cluster のセットアップ
以下のセクションでは、ScalarDB Cluster でマイクロサービストランザクションをサポートするサンプルアプリケーションのセットアップ方法について説明します。
ScalarDB サンプルリポジトリのクローン
ターミナルを開き、以下のコマンドを実行して ScalarDB サンプルリポジトリをクローンします:
git clone https://github.com/scalar-labs/scalardb-samples
次に、以下のコマンドを実行してサンプルアプリケーションが含まれるディレクトリに移動します:
cd scalardb-samples/scalardb-dotnet-samples/microservice-transactions-sample-with-shared-cluster-with-linq
ライセンスキーの設定
ScalarDB Cluster 配置のライセンスキー(試用ライセンスまたは商用ライセンス)を設定ファイル scalardb-cluster-node.properties に設定します。詳細については、ライセンスキーの設定方法を参照してください。
コンテナの開始
ScalarDB Cluster の設定ファイルは scalardb-cluster-node.properties です。Customer Service と Order Service は、設定に標準の appsettings.json ファイルを使用します。
Cassandra と MySQL は、設定に示されているように、マルチストレージ設定で既に構成されています。ScalarDB でマルチストレージトランザクション機能を構成する方法の詳細については、マルチストレージトランザクションをサポ ートするように ScalarDB を設定する方法を参照してください。
このサンプルアプリケーションを素早くセットアップするため、ScalarDB Cluster をスタンドアロンモードで実行します。ScalarDB Cluster をスタンドアロンモードで実行する詳細については、ScalarDB Cluster スタンドアロンモードを参照してください。
また、各マイクロサービスのアクセス制御を実装するために認証が有効になっています。ScalarDB での認証の詳細については、ユーザーの認証と認可を参照してください。
このサンプルアプリケーションを素早くセットアップするため、ワイヤー暗号化は有効になっていません。ただし、クライアントと ScalarDB Cluster ノード間の通信、および ScalarDB Cluster ノード間の通信を保護するために、本番環境ではワイヤー暗号化を有効にすることをお勧めします。ワイヤー暗号化の詳細については、ワイヤ通信の暗号化を参照してください。
サンプルアプリケーションのコンテナを開始するには、以下のコマンドを実行します:
docker compose up -d --build
開発環境によっては、Docker コンテナの開始に1分以上かかる場合があります。