`

分布式事务框架学习实践心得

 
阅读更多

 

 

    最近研究了下我们这边使用分布式事务的场景,顺便学习了下分布式框架的源码。

 

    场景:

      积分兑换优惠券,两步操作 第一步调用积分服务扣积分,第二步发放优惠券。

 

    分布式框架支持场景

       1. 回补操作,简化的二阶段模型,一阶段做真实的扣除,一阶段成功则二阶段不做处理,一阶段失败则做回补操作。比如:扣积分成功 ,发放优惠券失败,那么则调用回补积分的接口进行补偿。

       2. 二阶段,try conform cancel  一阶段进行冻结,二阶段真实的扣除或者取消。

 

    分布式事务框架调用流程
    
     
 
   

    流程说明:

      1. 状态是分为业务状态和事务状态。状态流程: 业务状态init, 业务状态成功or失败。初始化事务状态process_wating,  二阶段处理事务状态processing,每个action做二阶段处理同时更新每个action的status,根据每个action的综合结果将整个事务的处理结果置为成功或者失败。

      2. 最后几步只会执行其中一步,如果业务状态成功且是回补操作则啥也不用干,如果业务状态失败且是回补操作则执行回补参与者。如果是二阶段则根据业务状态做cancel或者confirm参与者和发起者。

 

     db脚本:

   

 tx_info | CREATE TABLE `tx_info` (
  `id` bigint(64) NOT NULL COMMENT 'id',
  `tx_id` varchar(256) NOT NULL COMMENT '事务id',
  `business_type` varchar(32) NOT NULL COMMENT '业务类型',
  `business_id` varchar(128) NOT NULL COMMENT '业务id',
  `status` varchar(32) NOT NULL COMMENT '事务状态',
  `retry_count` int(11) DEFAULT NULL COMMENT '重试次数,针对部分状态才有意义',
  `check_back_info` text COMMENT '事务回查信息',
  `participants_info` text COMMENT '参与者基本信息',
  `ext_properties` text COMMENT '额外属性字段',
  `version` int(11) DEFAULT NULL COMMENT '版本控制',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `db_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `biz_status` varchar(32) NOT NULL DEFAULT 'UNKOWN' COMMENT '业务执行状态',
  PRIMARY KEY (`id`,`create_time`),
  KEY `idx_tx_id` (`tx_id`(255)),
  KEY `idx_business_id` (`business_id`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_update_time` (`db_update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='事务信息表'
/*!50100 PARTITION BY RANGE (to_days(create_time))
(PARTITION p20161101 VALUES LESS THAN (736634) ENGINE = InnoDB,
 PARTITION p20161201 VALUES LESS THAN (736664) ENGINE = InnoDB,
 PARTITION p20170101 VALUES LESS THAN (736695) ENGINE = InnoDB,
 PARTITION p20170201 VALUES LESS THAN (736726) ENGINE = InnoDB,
 PARTITION p20170301 VALUES LESS THAN (736754) ENGINE = InnoDB,
 PARTITION p20170401 VALUES LESS THAN (736785) ENGINE = InnoDB,
 PARTITION p20170501 VALUES LESS THAN (736815) ENGINE = InnoDB,
 PARTITION p20170601 VALUES LESS THAN (736846) ENGINE = InnoDB,
 PARTITION p20170701 VALUES LESS THAN (736876) ENGINE = InnoDB) 


 action_info | CREATE TABLE `action_info` (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `tx_id` varchar(256) NOT NULL COMMENT '事务id',
  `business_type` varchar(32) NOT NULL COMMENT '业务类型',
  `business_id` varchar(128) NOT NULL COMMENT '业务id',
  `action_type` varchar(32) NOT NULL COMMENT '操作类型',
  `action_name` varchar(64) DEFAULT NULL COMMENT '操作名',
  `status` varchar(32) NOT NULL COMMENT '操作状态',
  `ext_properties` text COMMENT '额外属性字段',
  `version` int(11) NOT NULL COMMENT '版本信息',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `db_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`create_time`),
  UNIQUE KEY `idx_txid_aname` (`tx_id`(255),`action_name`,`create_time`),
  KEY `idx_business_id` (`business_id`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_update_time` (`db_update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='参与者操作信息表'
/*!50100 PARTITION BY RANGE (to_days(create_time))
(PARTITION p20161101 VALUES LESS THAN (736634) ENGINE = InnoDB,
 PARTITION p20161201 VALUES LESS THAN (736664) ENGINE = InnoDB,
 PARTITION p20170101 VALUES LESS THAN (736695) ENGINE = InnoDB,
 PARTITION p20170201 VALUES LESS THAN (736726) ENGINE = InnoDB,
 PARTITION p20170301 VALUES LESS THAN (736754) ENGINE = InnoDB,
 PARTITION p20170401 VALUES LESS THAN (736785) ENGINE = InnoDB,
 PARTITION p20170501 VALUES LESS THAN (736815) ENGINE = InnoDB,
 PARTITION p20170601 VALUES LESS THAN (736846) ENGINE = InnoDB,
 PARTITION p20170701 VALUES LESS THAN (736876) ENGINE = InnoDB) 

        

 

     技术原理:

     1. dubbo泛化调用,参照上一篇博客。

 

   

  • 大小: 419 KB
分享到:
评论

相关推荐

    oracle学习、实践心得

    实现分布式事务还需要JDBC驱动程序支持XA,以及一个支持XA的容器,如应用程序服务器或Spring框架。 7. **数据库优化** - **调整SGA区**:SGA(System Global Area)是Oracle数据库内存结构的一部分,调整其大小和...

    若依RuoYi框架剖析笔记,该笔记是在学习江南一点雨所录课程再结合自己的理解所写

    《若依RuoYi框架剖析笔记》是基于江南一点雨的...以上是RuoYi框架剖析笔记的关键知识点,涵盖了从项目改造到分布式事务,再到前端Vue3和工作流引擎Flowable的深度探讨,对于理解和运用RuoYi框架有着极高的参考价值。

    tcc-transaction-master-1.2.x.zip

    此外,该项目也提供了评论功能,便于开发者交流心得,共同提升对分布式事务处理的理解和应用水平。 总之,“tcc-transaction-master-1.2.x”是一个有价值的示例,它展示了如何在Dubbo框架下实现TCC事务,为分布式...

    J2EE Design and Development 学习心得

    本文主要围绕"J2EE Design and Development"的学习心得展开,探讨如何在JavaEE开发中实现高效且具有可扩展性和可维护性的程序架构设计。 分布式系统是现代企业级应用的基石,尤其是在处理大数据量、高并发场景时,...

    JavaEE学习心得与总结 (2).docx

    JTA用于管理分布式事务,确保在多资源环境中的一致性。RMI是Java中实现远程对象调用的技术,使得跨网络的通信变得简单。JMS则用于异步消息传递,允许应用程序之间解耦并提高可扩展性。 J2EE的核心理念是分层架构,...

    JavaEE学习心得与总结.docx

    在本文中,我们将深入探讨JavaEE的基本构成、核心技术和学习心得。 JavaEE的学习分为多个部分,首先是基础服务,包括对平台的概述,如JavaEE的发展历程、架构、组件和服务。这部分还涉及开发环境的选择和应用服务的...

    Java自学心得Java自学心得.doc

    - **JTA**:Java Transaction API,用于管理和协调分布式事务。 - **RMI**:Remote Method Invocation,实现了远程对象的调用,是EJB的基础之一。 - **JMS与EJB**:Java Message Service用于实现异步消息传递,而...

    OJB 持久层框架的帮助文档资料

    5. **事务管理**: OJB集成了JTA(Java Transaction API),可以处理分布式事务,确保数据的一致性和完整性。 **OJB工作流程** 1. **对象持久化**: 开发者创建Java对象并设置其属性,然后使用OJB的API将对象保存到...

    学java心得

    【Java学习心得】 Java作为一门广泛使用的编程语言,学习它是一项既有挑战又有乐趣的过程。从初识语法到熟练掌握各种框架和技术,每一步都需要扎实的基础和不断的实践。 首先,Java学习的基础是掌握基本语法和核心...

    大厂超级详细的Java面试题.zip

    8. **中间件**:可能包含消息队列(如RabbitMQ、Kafka)、分布式服务治理(如Dubbo、Zookeeper)、分布式事务解决方案(如2PC、TCC)等内容。 9. **LeetCode解题算法**:通过LeetCode平台的题目来训练和提升算法...

    J2EE高程、架构师学习手册

    这份学习资料涵盖了30多个架构学习心得,旨在帮助读者掌握J2EE平台的核心技术和高级概念,同时深入理解开源架构的设计与实践。 J2EE(Java 2 Platform, Enterprise Edition)是Java平台上用于构建企业级应用的框架...

    java 高级架构进阶学习

    - **分布式系统**:涉及分布式系统的原理、分布式事务管理、CAP理论、一致性哈希算法等内容。 - **高可用性与高并发**:讲解如何构建高可用系统、负载均衡策略、集群部署、性能调优等。 #### 二、面试真题解析 -...

    学习总结desswww

    "学习总结desswww"这个标题暗示了这是一个关于Java高级开发的学习资料集合,可能包含了作者在学习过程中的笔记、心得或者项目实践。描述中的"java 高级 开发 资料"进一步确认了这份资料专注于Java的高级特性和开发...

    JavaEE实验,javaee实验心得体会,Java源码.zip

    在本JavaEE实验中,我们将深入探讨Java企业级开发的核心概念和技术,...实践是检验真理的唯一标准,这些心得体会和源码将是提升你JavaEE开发技能的宝贵财富。不断地练习和探索,你将在企业级应用开发领域更加得心应手。

    spring学习笔记0.0.0

    这表明笔记是作者个人的学习和实践心得,可能包含了作者对Spring框架独特的理解和实践经验,可能包括了一些实战案例和解决常见问题的方法。这样的笔记往往具有很高的实用性和个人色彩,可以帮助读者更好地理解和掌握...

    javaweb学习代码

    综上所述,JavaWeb学习涉及到的领域广泛,从基础的Servlet和JSP到复杂的框架如Spring,再到数据库交互和会话管理,都需要深入理解和实践。对于初学者,可以从搭建开发环境、编写简单的Servlet和JSP页面开始,逐步...

    java自学路线图(路线能觉醒你的开发细路)--细路重之又重

    3. **分布式系统**:CAP理论、消息队列、分布式缓存、分布式事务等。 4. **服务端渲染**:Node.js、React服务端渲染等。 5. **前端框架**:Vue.js、Angular等。 6. **大数据技术**:Hadoop、Spark等。 #### 五、...

    《java开发篇》学习总结,JAVA应用编程150例,java+编程

    8. **数据库操作**:JDBC(Java Database Connectivity)是连接Java应用程序和数据库的标准API,学习如何使用Statement、PreparedStatement和CallableStatement进行SQL操作,以及事务管理和连接池的概念。...

    计算机专业面试经验大全

    9. **云计算与分布式系统**:了解AWS、Azure、Google Cloud等主流云平台,以及分布式计算框架如Hadoop、Spark,对于从事云计算相关工作的候选人尤其重要。 10. **软件设计模式**:熟悉23种GOF设计模式,能够灵活...

Global site tag (gtag.js) - Google Analytics