Fescar - RM实现原理介绍

简介: 开篇 这个系列开始介绍Fescar当中的RM(Resource Manager),RM负责控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。Fescar RM介绍说明:RM负责注册分支事务并上报分支事务状态。

开篇

 这个系列开始介绍Fescar当中的RM(Resource Manager),RM负责控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。


Fescar RM介绍


说明:

  • RM负责注册分支事务并上报分支事务状态。
  • RM负责响应TM的Branch Commit/Rollback指令,驱动本地事务的执行或回滚。


    public void demoByLowLevelAPI() throws Throwable {
        // 0. init
        init();

        // 1. get or create a transaction
        GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate();

        // 2. begin transaction
        try {
            tx.begin(30000, "my_tx_instance");

        } catch (TransactionException txe) {
            // TODO: Handle the transaction begin failure.

        }

        Object rs = null;
        try {

            // Do Your BusinessService
            businessCall1();
            businessCall2();
            businessCall3();

        } catch (Throwable ex) {

            // 3. any business exception, rollback.
            try {
                tx.rollback();

                // 3.1 throw the business exception out.
                throw ex;

            } catch (TransactionException txe) {
                // TODO: Handle the transaction rollback failure.

            }

        }

        // 4. everything is fine, commit.
        try {
            tx.commit();

        } catch (TransactionException txe) {
            // TODO: Handle the transaction rollback failure.

        }
    }

说明:

  • JDBC事务标准三步曲,begin/commit/rollback。
  • 发起指令的对象是TM,由TC负责协调并通知RM进行执行(RM上报执行状态)。


Fescar基本原理

 Fescar的RM使用JDBC 数据源代理,作为拦截的核心实现。

说明:

  • RM的JDBC代理按照传统的DataSource、Connection、Statement等层次去进行代理。
  • 从我个人角度来说,RM的代理相当于针对JDBC的所有层进行了拦截,这样子可以织入个体的代码。
  • 基础可以参考JDBC—Connection、Statement、ResultSet



说明:

  • 通过Fescar的JDBC数据源代理通过对业务 SQL 的解析,把业务数据在更新前后的数据镜像组织成回滚日志,利用本地事务的ACID特性,将业务数据的更新和回滚日志的写入在同一个本地事务中提交。
  • 保证任何提交的业务数据的更新一定有相应的回滚日志存在。




说明:

  • 如果决议是全局提交,此时分支事务此时已经完成提交,不需要同步协调处理(只需要异步清理回滚日志)。




说明:

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


Fescar RM代理源码

说明:

  • com.alibaba.fescar.rm.datasource.DataSourceProxy负责创建ConnectionProxy对象。
  • com.alibaba.fescar.rm.datasource.ConnectionProxy负责创建StatementProxy对象。
  • com.alibaba.fescar.rm.datasource.StatementProxy负责执行Statentment。


期待

 真正的核心在于对DataSourceProxy、ConnectionProxy、StatementProxy的解析。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
Python
Pyside6-第一篇-创建第一个窗口
Pyside6-第一篇-创建第一个窗口
1466 0
|
11月前
|
存储 弹性计算 监控
云账单分析与优化工具使用
本指南系统介绍云账单分析与优化工具的使用方法,涵盖账单解析、成本分摊、预算管理、资源优化等核心模块,助力企业实现云成本可视化、精细化管控,通过标签体系、智能建议与多账号协同,推动从“被动付费”到“主动治理”的转型,最大化释放云上成本优化潜力。(238字)
496 0
|
数据采集 SQL 人工智能
智能体革命:从0到1,拆解AI获得“自主性”的基础密码
本文深度解析2026年AI从“问答机器”跃升为具备自主性的“智能体(Agent)”的范式革命:突破规则驱动,实现感知环境、目标导向决策与动态工具编排的闭环行动,标志着AI从“工具”进化为可托付任务的数字生命体。
364 0
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
1466 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
搜索推荐 API 开发者
淘宝买家秀API接口(淘宝API系列)
淘宝买家秀API接口为电商运营和产品分析提供宝贵数据,反映消费者真实反馈。通过HTTP GET请求,开发者可获取商品的买家秀信息,包括图片、文字描述、点赞数等,帮助商家改进产品和优化营销策略。Python示例代码展示了如何调用该接口并处理返回数据。需在淘宝开放平台注册并申请权限。
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c7、c8a、c8y、c8i实例性能、适用场景区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于计算型实例规格的云服务器有计算型c7、计算型c8a、计算型c8y和计算型c8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:2,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍计算型c7、c8a、c8y、c8i实例的性能、适用场景的区别以及选择参考。
|
存储 测试技术 API
apifox实例应用-自动化测试用例for循环的使用
总结来说,通过在Apifox自动化测试用例中结合for循环的使用,我们可以有效地对接口进行批量测试,提升测试效率和覆盖率。同时,通过参数化测试数据的灵活应用,能够确保我们的接口在不同的输入条件下都能保持正确的行为。这种方法能够显著减少手动测试工作量,同时通过标准化的流程确保测试的一致性。
1483 0
数据库系统工程师考点笔记
数据库系统工程师考点笔记
2230 0
|
算法 测试技术 人机交互
智能硬件如何自测声学部分是否符合量产条件
智能硬件如何自己就能开展声学自测工作。
671 0