Spring Cloud Alibaba 分散トランザクション ソリューション フレームワーク Seata コンセプトの紹介

Spring Cloud Alibaba 分散トランザクション ソリューション フレームワーク Seata コンセプトの紹介

Seata 中国語参考資料: http://seata.io/zh-cn/docs/overview/what-is-seata.html

序文

前回の記事「分散トランザクション ソリューションと理論的基礎の概要」で分散ソリューションに関連する概念を紹介した後、この記事では、Spring Cloud Alibaba によってオープン ソース化された分散ソリューション フレームワークである Seata を紹介します。この記事では、Seata コンポーネントに関連する概念について説明します。実際にSeataを使って分散トランザクションの問題を解決したい場合は、次の記事を読んでください。

1. マイクロサービス アーキテクチャとは何ですか?

「マイクロサービス アーキテクチャとは、単一のアプリケーションを小さなサービスのグループに分割し、それらのサービスが互いに連携して動作することで、ユーザーに究極の価値を提供することを提唱するアーキテクチャ パターンです。各サービスは独自の独立したプロセスで実行され、軽量の通信メカニズム (通常は HTTP ベースの Restful API) を使用してサービス間で通信します。各サービスは特定のビジネスを中心に構築されており、実稼働環境、準実稼働環境などに個別に展開できます。また、統一された集中型のサービス管理メカニズムは可能な限り避ける必要があります。特定のサービスについては、ビジネス コンテキストに応じて適切な言語とツールを選択して構築する必要があります。」

2. 分散トランザクションの生成

1. モノリシックアーキテクチャ

単一のアプリケーションでは、ユーザーの完全な注文プロセスには、注文インターフェイスを呼び出し、在庫控除メソッドを呼び出し、注文時に口座残高を控除することによって注文を完了するために、1 つのプロジェクトと 1 つのデータベースのみが必要です。

2. 分散アーキテクチャ

モノリシック アプリケーションはマイクロサービス アプリケーションに分割され、元の 3 つのモジュールはそれぞれ異なるデータ ソースを使用する 3 つの独立したアプリケーションに分割されます。ビジネスオペレーションを完了するには、3 つのサービスを呼び出す必要があります。このとき、各サービス内のデータの一貫性はローカルトランザクションによって保証されますが、グローバルなデータの一貫性の問題は保証できないため、分散トランザクションが発生します。

3. Seataの4つの取引モード

1. シータとは

Seata は、高性能で使いやすい分散トランザクション サービスを提供することを目的としたオープン ソースの分散トランザクション ソリューションです。 Seata は、ユーザーに AT、TCC、SAGA、XA トランザクション モードを提供し、デフォルトで AT モードを使用して、ユーザー向けのワンストップ分散ソリューションを作成します。

2. ATモード

前提

  • ネイティブ ACID トランザクションをサポートするリレーショナル データベースに基づいています。
  • Java アプリケーションは JDBC を介してデータベースにアクセスします。

全体的なメカニズム

2PC 2 フェーズ コミット プロトコルの進化:

  • フェーズ 1 : ビジネス データとロールバック ログ レコードが同じローカル トランザクションでコミットされ、ローカル ロックと接続リソースが解放されます。
  • フェーズ 2 : 非同期で送信します。成功した場合は、対応するロールバック ログ レコードをバッチで削除します。失敗した場合は、ロールバック ログを通じて逆補正が実行されます。

書き込み分離

  • 1) 最初のフェーズでローカル トランザクションをコミットする前に、まずグローバル ロックが取得されていることを確認する必要があります。
  • 2) グローバルロックを取得できない場合、ローカルトランザクションを送信できません。グローバル ロックが取得されると、ローカル トランザクションが送信され、undo_log レコードが挿入されます。
  • 3) グローバルロックを取得しようとする試みは、一定の範囲に制限されます。範囲を超えた場合は破棄され、undo_log レコードに従ってローカル トランザクションがロールバックされ、ローカル ロックが解放されます。

読み取り分離

1) データベースのローカル トランザクション分離レベルが Read Committed 以上である場合、Seata (AT モード) のデフォルトのグローバル分離レベルは Read Uncommitted になります。

理解: グローバル トランザクションがコミットされる前に、ローカル トランザクションが最初にコミットされます。現時点では、データのクエリは、ローカル データベースの場合は Read Committed で、グローバル データベースの場合は Read Uncommitted で実行されます。

2) グローバル読み取りコミットが必要な場合、Seata は現在 SELECT FOR UPDATE ステートメントのプロキシを使用します。

3. TCCモード

TCC は RM の分散トランザクションのサポートに依存せず、ビジネス ロジックを分解して分散トランザクションを実装します。

  • 1)初期運用の試行: すべての業務チェックを完了し、必要な業務リソースを予約します。
  • 2)動作確認:実際のビジネスロジックはビジネスチェックなしで実行され、Try ステージで予約されたビジネスリソースのみが使用されます。したがって、Try 操作が成功する限り、Confirm も成功する必要があります。さらに、分散トランザクションが 1 回だけ成功することを保証するために、確認操作は冪等性を満たす必要があります。
  • 3)キャンセル操作:Try ステージで予約されたビジネス リソースを解放します。同様に、キャンセル操作も冪等性を満たす必要があります。

いわゆる TCC モードとは、カスタマイズされたブランチ トランザクションをグローバル トランザクションの管理に組み込むためのサポートを指します。

4. SAGAモード

概要

Seata はロングトランザクションソリューションを提供します。 Saga モードでは、ビジネス プロセスの各参加者がローカル トランザクションを送信します。参加者が失敗した場合、以前に成功した参加者に補償します。第一段階のポジティブサービスと第二段階の補償サービスは、いずれも事業開発によって実施されます。


適用可能なシナリオ:

  • 長いビジネスプロセスと複数のビジネスプロセス
  • 参加者には、TCCモデルに必要な3つのインターフェースを提供できない他の企業やレガシーシステムサービスが含まれます。

利点:

  • ローカルトランザクションの1フェーズコミット、ロックフリー、高パフォーマンス
  • イベント駆動型アーキテクチャ、参加者は非同期で実行可能、高スループット
  • 補償サービスは簡単に導入できる

欠点:

隔離は保証されない

ステートマシン エンジンに基づく Saga 実装。

現在 SEATA が提供している Saga モードは、ステート マシン エンジンに基づいて実装されています。メカニズムは次のとおりです。

  • 状態図を使用してサービス呼び出しプロセスを定義し、JSON 状態言語定義ファイルを生成します。
  • 状態図内のノードはサービスへの呼び出しになることができ、ノードは補正ノードを構成できます。
  • 状態図 json は、状態マシン エンジンによって駆動および実行されます。例外が発生した場合、状態エンジンは成功したノードに対応する補正ノードを逆実行してトランザクションをロールバックします。例外発生時に補正を行うかどうかもユーザーが決定できます。
  • サービス オーケストレーションの要件を実現し、単一選択、同時実行、サブプロセス、パラメータ変換、パラメータ マッピング、サービス実行ステータス判定、例外キャプチャなどの機能をサポートします。

状態図の例:


5. XAモード

前提

  • XA トランザクションをサポートするデータベース。
  • Java アプリケーションは JDBC を介してデータベースにアクセスします。

全体的なメカニズム

Seata で定義された分散トランザクション フレームワークでは、XA プロトコルのトランザクション リソース (データベース、メッセージ サービスなど) のサポートと XA プロトコルのメカニズムを使用して、トランザクション モードを使用してブランチ トランザクションを管理します。


実行フェーズ:

  • ロールバック: ビジネス SQL 操作は XA ブランチで実行され、ロールバックは XA プロトコルのリソース サポートによって保証されます。
  • 永続性: XA ブランチが完了すると、XA 準備が実行されます。同様に、リソースの XA プロトコルのサポートにより永続性が保証されます (つまり、その後の事故によってロールバックが不可能になる状況は発生しません)。

完了段階:

  • ブランチコミット: XAブランチのコミットを実行する
  • ブランチロールバック: XAブランチのロールバックを実行します

ここでは、XA モードについて簡単に説明します。詳細については、http://seata.io/zh-cn/docs/dev/mode/xa-mode.html を参照してください。

4. シータモデルの紹介

Seata のプロセス モデル全体を次の図に示します。

上の図には主に 3 つの役割があります

  • TM: トランザクション マネージャー。TC にグローバル トランザクションを開始、コミット、またはロールバックするように指示するために使用されます。
  • TC: トランザクション コーディネーター (seata-server) は、グローバル トランザクションとブランチ トランザクションのステータスを維持し、各 RM にコミットまたはロールバックを通知します。
  • RM: リソース マネージャー。各 RM は TC にブランチ トランザクションとして登録され、ブランチ トランザクションの登録、送信、ロールバックを担当します。

用語の紹介:

  • XID - トランザクション ID。分散トランザクションの一意の ID。
  • TC - トランザクション コーディネーター。グローバル トランザクションとブランチ トランザクションのステータスを維持し、グローバル トランザクションのコミットまたはロールバックを実行します。
  • TM - トランザクション マネージャーは、グローバル トランザクションの範囲を定義します。グローバル トランザクションを開始し、グローバル トランザクションをコミットまたはロールバックします。
  • RM - リソース マネージャーは、ブランチ トランザクション処理のリソースを管理し、TC と通信してブランチ トランザクションを登録し、ブランチ トランザクションのステータスを報告し、ブランチ トランザクションをコミットまたはロールバックします。

一般的な分散トランザクション プロセスには、次の手順が含まれます

  • TM は TC にグローバル トランザクションの開始を要求し、TC は TM にグローバル トランザクションの XID (XID) を返します。
  • XID はマイクロサービス呼び出しリンクのコンテキスト間で伝播されます。
  • RM はブランチ トランザクションを TC に登録し、XID に対応するグローバル トランザクションの管轄下に置きます。
  • TM は XID に基づいて TC にコミットまたはロールバック要求を送信します。
  • TCはXIDに基づいてRMコミットまたはロールバックを実行します

フローチャートは次のとおりです。


5. シータアーキテクチャについて

アリババは早くも2019年に、分散トランザクションフレームワークSeata(当初Fescarと名付けられていた)をオープンソース化しました。その後、Ant の TCC ソリューションとの統合により、Seata に名前が変更されました。 2020年11月3日現在、Seataはバージョンv1.4.0に更新されました。以前のバージョンのリリースではいくつか潜在的な問題がありましたが、オープンソース チームがすぐに問題を修正し、新しいバージョンを迅速に反復してリリースしたため、現在は比較的安定しています。

同時に、他の分散トランザクション フレームワークと比較すると、Seata アーキテクチャのハイライトは次のとおりです

  • アプリケーション層は SQL 解析に基づいて自動補正を実装し、ビジネスへの侵入を最小限に抑えます。
  • 分散トランザクションに、トランザクションの登録とロールバックを担当する TC (トランザクション コーディネーター) を独立して配置します。
  • 書き込み分離と読み取り分離はグローバル ロックによって実現されます。

6. 参考資料

Seata 中国語公式文書: http://seata.io/zh-cn/docs/overview/what-is-seata.html

Seata-Server のダウンロード アドレス: https://github.com/seata/seata/releases

分散トランザクションのデモ: https://github.com/seata/seata-samples

Seata ソースコード アドレス: https://github.com/seata/seataSeata 中国語リファレンス ドキュメント: http://seata.io/zh-cn/docs/overview/what-is-seata.html

<<:  未来に向かって、雲の姿を描いたシーン

>>:  クラウドへの変換はどれくらい簡単ですか?変革の苦痛を解消するために、Mobvistaはクラウドネイティブへの投資を増加

推薦する

locvpsの簡単な評価米国三ネットワークcn2 gia vps、30M帯域幅、総合評価は良好

locvpsは、米国Multacomのロサンゼルスデータセンターに、米国CN2ネットワークに接続され...

ウェブサイトを最適化する際に知っておくべき百度の11のアルゴリズム

ウェブサイトの最適化を行う際には、Baidu アルゴリズムを知っておく必要があります。多くの SEO...

スペインのマドリードデータセンターにある justhost の VPS の簡単なレビュー

Justhost は最近、ヨーロッパにあるいくつかのデータセンターに接続しました。今回、Host C...

Vultrはどうですか?サンティアゴ、チリ データセンター クラウド サーバー レビュー

Vultrはどうですか? Vultr Chile クラウド サーバーはどうですか?チリは南米に位置し...

ウェブマスターツールの新機能: 友達リンク検出のアップグレード

ウェブマスターツール(seo.chinaz.com)は、ウェブマスターが最もよく使用するツールです。...

Jumei は次の Vipshop または Dangdang でしょうか?

Jumeiは週末、米国での上場目論見書を提出し、財務データを公開した。美容業界の垂直型電子商取引企業...

vpsslim オランダ G-port VPS XEN ベースで 50% オフ

各 VPS には G ポートがあり、1 つの IPV4 と 2 つの IPV6 が装備されており、「...

今の時代に質の高い記事を書く方法

「外部リンクが王様、コンテンツが王様」という古典的な SEO 哲学は、多くの SEO 担当者に影響を...

Qvod は Qvod サービスを停止し、「村の仲間」のコメントを利用して再び反発を起こそうとしているのでしょうか?

食べること、飲むこと、排便、排尿、性行為など、禁止できないものもあります。また、需要があるところには...

低遅延を実現するには、5Gではなくエッジコンピューティングに目を向ける

エッジコンピューティングにより、レイテンシを大幅に削減できます。エッジ コンピューティングは、データ...

profitserver: 無制限のトラフィックを備えた香港の VPS、月額 5.77 ドル、1G メモリ/1 コア/15g NVMe/100M 帯域幅

ロシアのサーバープロバイダー profitserver は最近、中国の香港データセンターに香港 VP...

魏武慧:伝統的なマーケティングは死んだのか?適切に使用すれば決して時代遅れになることはない

マーケティングはパンチの組み合わせであり、時代遅れかどうかという疑問はありません。文/魏無慧魏無慧:...

2月29日から百度がウェブサイトインデックスを毎日更新し始めたことについての私の考え

今朝、Baidu Statisticsを開いて収録内容を確認したところ、非常に目立つダイアログボック...

Xiaomi Oumマーケティング携帯電話の第3世代はいくらですか?200以上の機能とブラックテクノロジーが展示されています

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますXiaom...

ウェブサイトのインタラクションデザイン入門 - インタラクションデザインの機能

前の章では、インタラクション デザインの理解について説明しました。この章では、主にインタラクション ...