現在、Alibaba の分散トランザクション ミドルウェア Seata に関する電子書籍を執筆中です。 Seata は、AT、TCC、Saga、XA の 4 つのモードを備えた、最も完全な分散トランザクション ミドルウェアと言えます。現在、Seata はバージョン 1.4.2 に更新されています。 この電子書籍は主に2つの部分に分かれています。最初の部分は入門学習で、更新されました。 2 番目の部分はソース コードの解釈です。 Seata のソースコードはよく書かれており、読む価値があります。 本書全体の現在のディレクトリ構造は次のとおりです。 気に入ったお友達はぜひダウンロードして勉強してください。入手方法:公式アカウントをフォローして裏で返信:Seata。 以下は、Seata の 4 つのモードの簡単な紹介です。 ATモードAT モードは、単一データベースのトランザクション原理を指します。分散トランザクション内の各データベースは、単一のデータベースのテーブルとして扱うことができます。まず、各トランザクションには xid と呼ばれるグローバル トランザクション ID があります。この xid を使用すると、この xid に対応するロールバック データを記録する undo_log を記録できます。各トランザクションを送信する前に、まず undo_log を書き込んでからトランザクションを送信する必要があります。これは MySQL の WAL メカニズムを指します。 rollback_info フィールドは、ロールバックするテーブルのレコード内の各フィールドと対応する値を記録するため、ロールバックを簡単に実行できます。 AT モードの 2 フェーズ コミットは次のとおりです。
AT モードでは読み取りと書き込みの両方が分離されており、ここで簡単に説明します。 書き込み分離 フェーズ 1 のローカル トランザクションをコミットする前に、まずグローバル ロックを取得していることを確認する必要があります。 グローバル ロックを取得できないため、ローカル トランザクションをコミットできません。 グローバル ロックを取得しようとすると、タイムアウト制限が設定されます。時間制限を超えると、試行は中止され、ローカル トランザクションがロールバックされてローカル ロックが解放されます。 上記は公式サイトの説明ですが、非常に分かりやすいです。グローバル ロックを取得できない場合、ローカル トランザクションは送信できず、タイムアウトするまでグローバル ロックを待機することしかできません。 読み取り分離 AT モードでの読み取り分離では、ローカル トランザクション分離レベルが Read Committed 以上である必要があります。 AT モードのデフォルトのグローバル分離レベルは、Read Uncommitted です。 アプリケーションが特定のシナリオでグローバル読み取り送信を必要とする場合、Seata は SELECT FOR UPDATE ステートメント プロキシを通じてそれを実装する必要があります。 SELECT FOR UPDATE ステートメントの実行はグローバル ロックに適用されます。グローバル ロックが他のトランザクションによって保持されている場合、ローカル ロックは解放され、ステートメントが再試行されます。このプロセス中、グローバル ロックが取得されるまでクエリはブロックされます。 TCC モード簡単に言えば、TCC モードは、トランザクション全体を 2 つの段階に分けて送信することです。試行段階ではリソースを予約します。すべてのブランチが正常に予約されると、コミット ステージに入り、すべてのブランチ トランザクションが送信されます。それ以外の場合は、すべてのブランチ トランザクションをキャンセルするために cancel が実行されます。 電子商取引システムを例にとると、注文、在庫、アカウントの 3 つのサービスがある場合、顧客が商品を購入すると、注文サービスが注文を追加し、在庫サービスが在庫を差し引き、アカウントサービスが金額を差し引きます。これら 3 つの操作はアトミックである必要があり、すべてが成功するか、すべてが失敗するかのいずれかになります。 トライフェーズ 以下のように表示されます。 注文サービスは注文を追加し、在庫サービスは注文の在庫を凍結し、アカウントサービスは注文の金額を凍結します。この段階で、データは中間状態になります。 コミットステージ 以下のように表示されます。 コミットフェーズでは、データが中間状態から最終状態に転送されます。たとえば、注文金額は中間アカウントから最終アカウントに転送されます。 キャンセル フェーズはコミット フェーズと似ており、たとえば、注文金額は中間アカウントから顧客アカウントに返されます。 サガパターンSaga モードは、長いプロセスのビジネス シナリオに適しており、ステート マシンを使用してトランザクション全体の実行を制御します。状態図を使用してサービス呼び出しプロセスを定義し、Json 状態言語定義ファイルを生成します。状態図のノードは、サービス ノードまたは補償ノードになります。 次の図は、電子商取引システムのビジネス プロセスを定義しています。このフローチャートに基づいて、ステート マシンで使用するための Json ファイルを定義できます。 XA モードXA モードでは、ブランチ トランザクション データベースが XA プリミティブをサポートする必要があります。この公式写真を見てください: XA モードの 2 フェーズ コミットは、TCC モードの 2 フェーズ コミットに似ています。どちらも TM によってグローバル トランザクションを開始し、TC にブランチ トランザクションを登録してブランチ トランザクションの状態を報告し、TC はグローバル トランザクションの状態に基づいてブランチ トランザクションをコミットまたはロールバックします。 コード実装に関しては、XA モードはデータ ソース プロキシを使用して実装されます。 TCC モードとは異なり、XA モードでは準備メソッドのみが必要です。 Seata は XA を最適化し、Start を組み合わせます |翻訳1つのステージに準備します。これは MySQL データベースではサポートされていますが、Oracle データベースではサポートされていません。 |
<<: 複数のシンクライアントディスプレイの設定とトラブルシューティング
>>: クラウド ネイティブ要素の概要: 抽象エンドポイント
私はVultrの日本のデータセンターでVPSを購入し、Vultrの簡単なレビューを書きました。もっと...
[51CTO.com からのオリジナル記事] Sangfor の中核となるクラウド コンピューティン...
1. 孤立コンピュータ ネットワークは階層的に実装されており、異なるプロトコルが異なる階層で動作しま...
2019年の初め、映画・テレビ業界は「偽造防止キャンペーン」を開始したようだ。業界における詐欺の混乱...
1. 中国のモバイルインターネットの配当はピークに達し、配当後のユーザー価値を刈り取る時代が始まろ...
分析会社Synergy Research Groupのデータによると、6つの主要なクラウドサービスと...
ソフトコンテンツマーケティングはオンラインプロモーションの最重要課題と言えます。しかし、ソフトな記事...
近年、百度の重みを計算するサードパーティツールがいくつかの企業によってリリースされ、多くのウェブマス...
Dedipath はサンノゼのデータセンターに移転し、キャビネットは inap のサンノゼでホストさ...
2013 年に設立された Lieyun.com は、中国を代表するテクノロジー ベンチャー キャピタ...
辰年の春節が始まった頃、三亜の「観光客ぼったくり事件」は大東海に投下された重い世論爆弾のようであり、...
「キャンセル」ボタンは必要な操作プロセスの一部ではなく、デザイン上の主要な要素として表示されません。...
スナップショットが良好なウェブサイトは、満足感があり、安心できるウェブサイトですが、スナップショット...
[[354440]] COVID-19パンデミックが収束する兆しが見えない中、企業が自社のサーバー機...
Amazon Web Services は、2022 re:Invent Global Confer...