分散トランザクションSeata原理とソースコード解析

二つの要素:

1.Seata原則

ATモード(スモールビジネス浸潤)
Seata ATモードは、分散トランザクションミドルウェアの進化であるXAトランザクションは、データベースのサポート分散トランザクションの必要性はプロトコルは、基本的にデータベースの実装、MYSQL5に基づいており、XAは一つであり、2フェーズ・コミット、来ます0.6上記支持XAプロトコル、Oracleなどの他のデータベースは、DB2はまた、XAインタフェースを実装します

次のように役割があります

ここに画像を挿入説明
トランザクションコーディネータ(TC):トランザクションコーディネータ、実行中のグローバル・トランザクションを維持するには、グローバル・トランザクションがコミットまたはロールバックさ調整と駆動する責任がある
トランザクションマネージャを™:国境管理のグローバル業務、グローバル・トランザクションを開くための責任があり、最終的にコミットまたはグローバルを起動グローバルロールバック解像度
リソースマネージャ(RM):トランザクション制御ブランチ、ブランチは、ステータスレポートの登録を担当し、トランザクションコーディネータは、命令がコミット受け取り、ロールバックドライブ脚(ローカル)トランザクションは
、実質的に処理ロジックを次の

ここに画像を挿入説明

支店は、個々の地元のローカル業務に分散トランザクションを指し、

第一段階
のSQL構文解析サービスを介してSeataプロキシJDBCデータソースは、サービスデータは、前と組織へのロールバックログをミラーリングデータを更新した後、ローカル・トランザクションACIDプロパティが更新されたトラフィックデータおよびロールバックジャーナルの書き込みを使用して同じローカル・トランザクションに提出しました。

このことを保証する:対応するロールバックログが存在している必要があります提出された業務データを更新

、トランザクションのローカルブランチはに提出され、トランザクションロック機構に基づいて、グローバル・トランザクションの最初の段階で、すぐに地元のリソースを解放します

これは、多くの場合、2フェーズロック、SeataとXAトランザクションの間の差であるリソースがログリソースが最初の段階で放出することができ、ロールバックされた後、第二段階の実際の操作をコミットまたはロールバックを継続する必要がコミットロック、ロック範囲が異常にのみ対応するデータを見つけるために、ロールバック第二段階を発生しても、効率を改善し、減少し、バックundologは、ロールバックの目的を達成するために、SQLに解析されます

同时Seata通过代理数据源将业务sql的执行解析成undolog来与业务数据的更新同时入库,达到了对业务无侵入的效果

ここに画像を挿入説明

第二阶段
如果决议是全局提交,此时分支事务此时已经完成提交,不需要同步协调处理(只需要异步清理回滚日志),Phase2 可以非常快速地完成

ここに画像を挿入説明
如果决议是全局回滚,RM 收到协调器发来的回滚请求,通过 XID 和 Branch ID 找到相应的回滚日志记录,通过回滚记录生成反向的更新 SQL 并执行,以完成分支的回滚


TCC(高性能)
seata也针对TCC做了适配兼容,支持TCC事务方案,原理前面已经介绍过,基本思路就是使用侵入业务上的补偿及事务管理器的协调来达到全局事务的一起提交及回滚,详情参考demo回滚

ここに画像を挿入説明

2.Seata 源码分析:

重要流程如下:

拿到我们的主键,拿到更新的字段,

拿到更新的where 添加:

模板方法:

1.主要看update 方法,

一张表描述另一张表:

row_key,xid,table-name,bracnhedID:

 

2.分布式分析:

模板方法:

全局提交

----------------------------------------

总得来说就是分为如下几步

业务方调用各个微服务的try()方法,执行资源检查及预留操作
当所有try()方法均执行成功时,对全局事物进行提交,即由事物管理器调用每个微服务的confirm()方法
当任意一个方法try()失败(预留资源不足,抑或网络异常,代码异常等任何异常),由事物管理器调用每个微服务的cancle()方法对全局事务进行回滚
资源预留、提交、回滚都由业务方编码控制写在try()、confirm()、cancle()中

重要な点は次のとおりです。TCCトランザクション・コーディネータは、コールが確認またはcancle、および方法になった後)(ビジネス側の試みを各マイクロサービスを呼び出す方法を知っているリソースマネージャ(RM)、具体的呼び出し

この時点で、TC法の確認にマシン上のコールサービスを見つけるためにどのように2つ目の質問、ロールバック方法はまた、解決
の基本的な考え方は、

TMは、(xidの)要求を提出立ち上げた
TCは、すべての枝のセッションを削除し、XIDグローバルセッションで見つかった
通信が確立し、対応するチャネルを削除し、rpcContextは、オブジェクトバッファキャッシュを見つけるために、分岐RESOURCEIDにセッションによって
提出されたグローバル・トランザクションをまとめます一般的なプロセス

ビジネスパーティコールマイクロサービス例外なく、トランザクション開始するTMによって要求提出
後、トランザクションのすべてのブランチ削除、トランザクションは、xidでグローバル・トランザクションを見つけるための要求を提出した後に受け取ったTCを
分岐業務を横断し、分岐トランザクションを発行した要求コミット
受信TCCのリソースマネージャRMをリクエストを送信した後、反射法をコミット、豆を除去するために、対応する方法がRESOURCEID TCCResourceに従ってローカルキャッシュから呼び出されます

 

出典分析:https://blog.csdn.net/f4761/article/details/89077400

参考ボーエン:https://blog.csdn.net/f4761/article/details/89077400

 

 

 

 

 

公開された564元の記事 ウォン称賛10 ビュー90000 +

おすすめ

転載: blog.csdn.net/xiamaocheng/article/details/104575827