3つの分散トランザクションソリューション-Seataが2PCソリューションを実装

Seataは、Aliミドルウェアチームによって開始されたオープンソースプロジェクトのFescarであり、後にSeataと改名されました。これは、オープンソースの分散トランザクションフレームワークです。従来の2PCの問題はシータで解決され、ローカルリレーショナルデータベースのブランチトランザクションの調整を通じてグローバルトランザクションの完了を促進します。アプリケーションレイヤーで機能するミドルウェアです。主な利点は、パフォーマンスが向上し、接続リソースを長期間占有しないことです。マイクロサービスシナリオが直面する分散トランザクションの問題を、効率的かつ煩わしい方法でビジネスに解決します。現在、ATモード(つまり、2PC)およびTCCモードを提供しています分散トランザクションソリューション。

シータのデザインのアイデアは次のとおりです。

シータは、分散トランザクションを、複数のブランチトランザクションを含むグローバルトランザクションとして理解しています。グローバルトランザクションの責任は、管轄下のブランチトランザクションを調整して、一緒に正常に送信するか、一緒にロールバックしないことに合意することです。また、通常、ブランチトランザクション自体はリレーショナルデータベースのローカルトランザクションです次の図は、グローバルトランザクションとブランチトランザクションの関係図です。image.png

従来の2PCモデルと同様に、Seataは分散トランザクションの処理を処理する3つのコンポーネントを定義します。image.png

  • トランザクションコーディネーター(TC):トランザクションコーディネーターは、独立して展開および運用する必要のある独立したミドルウェアです。グローバルトランザクションの実行ステータスを維持し、グローバルトランザクションの送信とロールバックを開始するためのTM指示を受け取り、RMブランチとの調整を担当します。トランザクションのコミットメントまたはロールバック。

  • トランザクションマネージャー™:トランザクションマネージャー、TMはアプリケーションプログラムに組み込まれて動作する必要があり、グローバルトランザクションを開始し、最終的にTCへのグローバルコミットまたはグローバルロールバック命令を開始します。

  • Resource Manager(RM):ブランチトランザクションを制御し、ブランチの登録、ステータスレポートを担当し、トランザクションコーディネーターTCから命令を受け取って、ブランチ(ローカル)トランザクションの送信とロールバックを実行します。

新規ユーザー登録を取得し、例えばシータの分散トランザクションプロセスのポイントを送信します。image.png

次のように具体的な実装方法は次のとおりです。
サービスのTM 1. TCのユーザーは、グローバル・トランザクションが正常に作成されたグローバル・トランザクションの開放を要求し、グローバルにユニークなXIDを生成します。
2.ユーザーサービスのRMは、ブランチトランザクションをTCに登録します。TCは、ユーザーサービスに新しく追加されたユーザーロジックを実行し、それをXIDに対応するグローバルトランザクションの管轄区域に組み込みます。
3.ユーザーサービスはブランチトランザクションを実行し、ユーザーテーブルにレコードを挿入します。
4.リモート呼び出し統合サービスへのロジック実行(XIDはマイクロサービス呼び出しリンクのコンテキストで伝搬されます)。ポイントサービスのRMはブランチトランザクションをTCに登録し、ブランチトランザクションはポイントを追加するロジックを実行し、それをXIDに対応するグローバルトランザクションの管轄区域に組み込みます。
5.ポイントサービスはブランチトランザクションを実行し、レコードをポイントレコードテーブルに挿入し、実行後にユーザーサービスに戻ります。
6.ユーザーサービスのブランチトランザクションが完了します。
7. TMは、TCへのXIDのグローバル送信またはロールバック解決を開始します。
8. TCは、XIDの下ですべてのブランチトランザクションをスケジュールして、コミットまたはロールバック要求を完了します。

### RM実行プロセス
image.png

### Seata銀行振込DEMO実行プロセス(ソースコード4を参照)
1.通常の送信プロセス
image.png

2.ロールバックプロセスimage.png

元の記事を15件公開しました 賞賛されました0 訪問76

おすすめ

転載: blog.csdn.net/xrzi2015/article/details/105519001