分散トランザクションソリューションの概要とSeataの詳細説明

分散トランザクションソリューションの概要とSeataの詳細説明

導入

ビジネス量が増加し続けると、モノリシックアーキテクチャは徐々に膨大なトラフィックに耐えられなくなります。このとき、サービスを分割し、データベースとテーブルを別々のライブラリとテーブルに分割する必要があります。発注システムを例にとると、発注センター、ユーザーセンター、在庫センターなどがあります。これによって生じる問題は、業務が互いに分離していることです。各企業は独自のデータベースを維持しており、データ交換は RPC 呼び出しを通じてのみ行うことができます。

ユーザーが再度注文を行う場合、注文ライブラリ、在庫ライブラリ、ユーザーライブラリ アカウントに対して同時に操作を実行する必要があります。ただし、現時点ではローカルデータの一貫性のみを保証でき、他のサービスを呼び出す操作が成功するかどうかは保証できません。したがって、注文プロセス全体のデータの一貫性を確保するには、分散トランザクションが必要になります。

分散トランザクションソリューションの概要

分散トランザクションを実装するためのソリューションとしては、XA プロトコルに基づく 2PC や 3PC、ビジネス層に基づく TCC、メッセージ キュー + メッセージ テーブルを適用して実装される最終的な一貫性ソリューションなど、さまざまなものがあります。

  • 2PC

XA プロトコルに基づいて実装された分散トランザクションは、トランザクション マネージャーとローカル リソース マネージャーの 2 つの部分に分かれています。ローカル リソース マネージャーは、Oracle、MYSQL などのデータベースによって実装されることが多く、これらのデータベースは XA インターフェイスを実装しており、トランザクション マネージャーはグローバル スケジューラーとして機能します。

2 フェーズ コミット (2PC) はビジネスにほとんど影響を与えません。その最大の利点は、ユーザーにとって透明性があることです。ユーザーは、ローカル トランザクションと同様に XA プロトコルに基づく分散トランザクションを使用できるため、トランザクションの ACID 特性を厳密に保証できます。

2PC の欠点も明らかです。これは、強力な一貫性を備えた同期ブロッキング プロトコルです。トランザクションの実行中は、必要なすべてのリソースをロックする必要があります。これは一般に、固定トランザクションと呼ばれます。したがって、一定の実行時間を持つ短いトランザクションに適しており、全体的なパフォーマンスは比較的劣ります。

トランザクション コーディネーターがクラッシュしたり、ネットワーク ジッターが発生すると、参加者はリソースをロックした状態のままになったり、一部の参加者のみが正常に送信したりして、データの不整合が発生します。したがって、高い同時実行パフォーマンスが最も重要となるシナリオでは、XA プロトコルに基づく分散トランザクションは最適な選択ではありません。

  • 3PC

3 フェーズ コミット (3PC) は、2 フェーズ コミット (2PC) の改良版です。これは、2 フェーズ コミット プロトコルのブロッキング問題を解決するために使用されます。コーディネータがクラッシュすると、参加者は最終的な選択を行うことができず、ブロックされたままになり、リソースがロックされます。

2PC では、コーディネータのみにタイムアウト メカニズムがありますが、3PC では、コーディネータと参加者の両方にタイムアウト メカニズムが導入されています。コーディネーターが失敗した場合、参加者は永久にブロックされることはありません。さらに、最終送信フェーズの前に各参加ノードのステータスが一貫していることを確認するために、第 1 フェーズと第 2 フェーズの間に準備フェーズが挿入されます (以下を参照)。

3PC は、コーディネータの障害後に参加者がブロックされる問題を解決するためにタイムアウト メカニズムを使用しますが、余分なネットワーク通信が追加され、パフォーマンスが低下するため、推奨されません。

  • TCC

いわゆる TCC プログラミング モードも、2 フェーズ コミットのバリエーションです。違いは、TCC がビジネス レイヤーでコードを記述して 2 フェーズ コミットを実装することです。 TCC はそれぞれ Try、Confirm、Cancel の略です。一つの業務運営は、これら3つの方法に対応している必要があります。

次の単一在庫控除を例に挙げます。試行段階では在庫を取得し、確認段階では実際に在庫を減らします。在庫の減額が失敗した場合、キャンセル ステージがロールバックされ、在庫が解放されます。

TCC では、各メソッドがトランザクションを直接コミットするため、リソース ブロッキングの問題はありません。例外が発生すると、Cancel を使用してロールバックし、補正します。これはしばしば補償取引と呼ばれます。

元々は 1 つの方法でしたが、現在は 3 つの方法のサポートが必要です。 TCC はビジネスに非常に侵襲的であり、このモデルはうまく再利用できないため、開発量の急増につながることがわかります。ネットワークの変動やその他の要因も考慮する必要があります。リクエストが確実に配信されるように再試行メカニズムが用意されているため、インターフェースのべき等性を考慮する必要があります。

  • メッセージ トランザクション (最終的な一貫性)

メッセージ トランザクションは、実際にはメッセージ ミドルウェアに基づく 2 フェーズ コミットであり、ローカル トランザクションとメッセージ送信を同じトランザクションに配置して、ローカル操作とメッセージ送信が同時に成功することを保証します。

発注時に在庫を差し引く原理図:

  • 注文システムは在庫減額の準備をするために MQ にメッセージを送信します。 MQ はメッセージを保存し、成功した ACK を返します。
  • 準備されたメッセージの正常な ACK を受信すると、注文システムはローカル注文操作を実行します。メッセージの送信が成功したにもかかわらずローカル トランザクションが失敗することを防ぐために、注文システムは MQ コールバック インターフェイスを実装し、ローカル トランザクションが正常に実行されたかどうかを継続的にチェックします。失敗した場合、準備されたメッセージはロールバックされます。成功した場合、メッセージは最終的にコミットされます。
  • 在庫システムは在庫減額メッセージを消費し、ローカル トランザクションを実行します。控除が失敗した場合、メッセージは再送信されます。再試行回数を超えると、ローカル テーブルは失敗したメッセージを保持し、補正するためにスケジュールされたタスクを開始します。

メッセージ ミドルウェアに基づく 2 フェーズ コミット ソリューションは、通常、同時実行性の高いシナリオで使用され、パフォーマンスが大幅に向上する代わりに、強力なデータ一貫性が犠牲になります。ただし、この方法を実装するにはコストと複雑さが比較的高く、実際のビジネス状況によって異なります。

RocketMQ に基づいて結果整合性を実現する方法の詳細については、注文システムのデータ整合性ソリューションと RocketMQ トランザクション メッセージの詳細な説明を参照してください。

分散トランザクションシート

Seata は、2 フェーズ コミットから進化した分散トランザクション ソリューションでもあり、AT、TCC、SAGA、XA などのトランザクション モードを提供します。

  • XA モード: 強力な一貫性を備えた段階的トランザクション モード。一定の可用性は犠牲になりますが、ビジネスへの介入はありません。
  • TCCモード: ビジネスへの介入を伴う、最終的に一貫性のある段階的トランザクションモード
  • AT モード: ビジネスへの介入のない、最終的に一貫性のある段階的なトランザクション モード。Seata のデフォルト モードでもあります。
  • SAGA モード: ビジネスへの侵入を伴う長いトランザクション モード

Seata トランザクション管理には、3 つの重要な役割があります。

  • TC (トランザクション コーディネーター) - トランザクション コーディネーター: グローバル トランザクションとブランチ トランザクションのステータスを維持し、グローバル トランザクションのコミットまたはロールバックを調整します。
  • TM (トランザクション マネージャー) - トランザクション マネージャー: グローバル トランザクションのスコープを定義し、グローバル トランザクションを開始し、グローバル トランザクションをコミットまたはロールバックします。
  • RM (リソース マネージャー) - リソース マネージャー: ブランチ トランザクション処理のリソースを管理し、TC と通信してブランチ トランザクションを登録し、ブランチ トランザクションのステータスを報告し、ブランチ トランザクションをコミットまたはロールバックします。

シータ実施原則

(1)XAモード

Seata の XA モデルは若干調整されていますが、基本的には同じです。

RMフェーズIの作業:

  • TCに支店取引を登録する
  • ブランチビジネスSQLを実行するが送信しない
  • 実行状況をTCに報告する

TC フェーズ II 作業:

  • TC は各ブランチ トランザクションの実行ステータスを検出します。すべてが成功した場合は、すべての RM にトランザクションをコミットするように通知します。失敗した場合は、すべてのRMにトランザクションをロールバックするように通知します。

RMフェーズII作業:

  • トランザクションをコミットまたはロールバックするためのTC指示を受信する

XA モード

【XAモードの実装】

シータのスターターはXAモードの自動組み立てを完了しました。実装は非常に簡単です。手順は次のとおりです。

1. application.yml ファイルを変更し、XA モードを有効にします。

 seata: data-source-proxy-mode: XA # 开启数据源代理的XA模式

2. グローバル トランザクションを開始するエントリ メソッドに @GlobalTransactional アノテーションを追加します。

 @GlobalTransactional public Long create(Order order) { // 创建订单orderMapper.insert(order); // 扣余额...略// 扣减库存...略return order.getId(); }

(2)ATモード

AT モードも段階的にコミットされるトランザクション モデルですが、XA モデルのリソース ロック期間が長いという欠点を補っています。

フェーズ 1 RM の作業:

  • 支店取引登録
  • 元に戻すログ(データスナップショット)を記録する
  • ビジネスSQLを実行して送信する
  • 取引ステータスの報告

ステージ 2 提出時の RM の作業:

  • 元に戻すログを削除する

フェーズ 2 ロールバック中の RM の作業:

  • 元に戻すログに基づいて更新前のデータを復元する

ATモード

実行フローは以下のとおりです。

(3)TCCモード

TCC モードは AT モードと非常によく似ています。各ステージは独立したトランザクションです。違いは、TCC が手動コーディングを通じてデータ復旧を実現することです。次の 3 つの方法を実装する必要があります。

  • 試してください: リソースの検出と予約。
  • 確認:資源運用事業を完了する。 Try が成功し、Confirm が成功する必要があります。
  • Cancel: 予約されたリソースを解放します。これは、try の逆の操作として理解できます。

TCC 動作モデル図:

TCC モード

【TCC空ロールバックと営業停止】

ブランチ トランザクションの試行フェーズがブロックされると、グローバル トランザクションがタイムアウトし、2 番目のフェーズでキャンセル操作がトリガーされる可能性があります。 try 操作が実行される前に cancel 操作が実行されます。この場合、キャンセル操作はロールバックできず、空のロールバックを意味します。

空ロールバックされた業務に対して、引き続きtry laterを実行すると、確定もキャンセルもできなくなるため、業務停止となります。ハングを回避するために、空のロールバック後の try 操作を防止する必要があります。

(4)佐賀パターン

Saga モードは、SEATA が提供するロング トランザクション ソリューションです。また、次の 2 つの段階に分かれています。

  • フェーズ1: ローカルトランザクションを直接送信する
  • フェーズ 2: 成功した場合は何もしません。失敗した場合は、補償業務を記述してロールバックする

Saga モードの利点:

  • トランザクション参加者は、イベント駆動型で高スループットの非同期呼び出しを実装できる。
  • トランザクションを1フェーズで直接送信し、ロックなしでパフォーマンスが良好
  • TCCの3つのステージを書く必要がなく、実装が簡単

欠点:

  • ソフトステートの持続期間は不確実であり、適時性も低い
  • ロックなし、トランザクション分離なし、ダーティライト

(5)モデル比較

参考文献と謝辞

https://www.cnblogs.com/chengxy-nds/p/14046856.html

<<:  2023 年に信頼できるクラウド コンピューティング サービスのトップ 5

>>:  エッジコンピューティングがエネルギー業界のミッシングリンクである理由

推薦する

Oracle Analytics Cloudが多くの新しいイノベーションをリリース

自動化された分析ワークフローは、企業がより多様な方法でデータを操作して予測を行うのに役立ちます。 O...

ファーウェイの石耀宏氏:産業のアップグレードの重要な10年、ファーウェイのクラウドとコンピューティングは企業の追い越し達成を支援する

6月24日、国家発展改革委員会、科学技術部、工業情報化部、国家ラジオテレビ総局、中国サイバースペース...

Baiduにフォーラムが組み込まれた経験について語る

昨夜、私は百度販売に携わっている大学の同級生とチャットをしました。彼はフォーラムで「百度が含まれない...

エンタープライズ クラウドが 2019 年の 5 つの主要な技術開発トレンドを紹介します。

2018 年の発展を振り返ると、エンタープライズ クラウドと最新のデータ センターは 2019 年に...

B2Bウェブサイトのユーザーエクスペリエンスを4つの側面から改善する

どのような種類のウェブサイトであっても、ユーザー エクスペリエンスは重要ですが、B2B ウェブサイト...

ウェブサイトが検索エンジンに選ばれました: ウェブサイトが選ばれる理由を深く考えてみましょう

写真からわかるように、このウェブサイトは Baidu によって完全に K されました。3 日が経ちま...

ダブル11の電子商取引が近づき、A5広告連合が活況を呈している

ネットショッピングを頻繁にする人なら、ダブルイレブンという言葉はよく知っているはずです。過去のネット...

xenspec: 月額 1.9 ドル、1Gbps 帯域幅、無制限トラフィック VPS、coresite シカゴ データセンター

2003 年に設立されたホスティング会社である Xenspec は、CoreSite のシカゴ デー...

Hostwindsの軽量仮想ホスティングは年間5ドルかかります

週末に退屈していたので、Hostwinds のプロモーション用仮想ホストを見つけました。まず、このブ...

最新ニュース:Banwagong CN2 GIA 512MメモリVPS、特別限定版

BandwagonHost CN2 GIA VPS は、密かに「LIMITED EDITION」限定...

Ubuntu 16.04 に LAMP 環境パッケージをインストールするための初心者向けの簡単なチュートリアル

まず、LAMP 環境は、Web サイトの構築に常に非常に人気があります。次に、Ubuntu システム...

ユーザーエクスペリエンスとは何ですか?それは、競合他社よりも早く問題点を発見し、迅速に解決することを意味します。

今日は小さな温度計から始めましょう。先週の夜、小規模なO2Oサロンに参加した後、屈強な男性が私を呼び...

ロングテールキーワードの膨大なトラフィックから収益を得る方法

あらゆる分野、さまざまなメインキーワードには、一定のパターンがあると言えます。つまり、最初のいくつか...

ginernet-スペイン/25ユーロ/2コア/2GBメモリ/15GB SSD/300GBデータ/Gポート

スペインのバルセロナデータセンターにあるginernetの特別なVPSをご紹介します。比較的、一般の...

ウェブサイトのトラフィックとクリック数を増やすことは、ウェブサイトの墓を掘ることに等しい

最近はトラフィックを増やすツールが多すぎます。インターネットで検索すれば、トラフィックを増やすソフト...