最近研究了下我们这边使用分布式事务的场景,顺便学习了下分布式框架的源码。
场景:
积分兑换优惠券,两步操作 第一步调用积分服务扣积分,第二步发放优惠券。
分布式框架支持场景
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泛化调用,参照上一篇博客。
相关推荐
嵌入开发语言(c#&java)的基于缓存一致性的分布式事务框架源码嵌入开发语言(c#&java)的基于缓存一致性的分布式事务框架源码嵌入开发语言(c#&java)的基于缓存一致性的分布式事务框架源码嵌入开发语言(c#&java)的基于...
springBoot+dubbo+zk+seata 整合为seata分布式事务框架学习例子
简介:《分布式服务框架:原理与实践》创作者具有丰富的分布式服务框架、平台中间件的架构设计和实践经验,主导设计的华为分布式服务框架已经在全球数十个国家成功商用。《分布式服务框架:原理与实践》依托工作实践...
springcloud整合分布式事务框架TX-LCN
《分布式服务框架原理与实践》对如何构建分布式服务化系统,提供了原理分析、关键技术、开发案例以及业界技术对比,非常系统化,不论是学习分布式服务技术还是深入大型互联网架构都非常实用。 2、《分布式服务框架...
分布式服务框架原理与实践_李林锋著.pdf 分布式服务框架原理与实践_李林锋著.pdf
《分布式服务框架原理与实践》,学习分布式必备。该资源仅供大家了解书的内容,如果真有兴趣深入学习,建议购买正版书籍。
分布式事务框架LCN下载,支持spring cloud 2.x,亲测可用
该资源包含LCN分布式介绍PPT、教学视频、项目整合demo等资源,对于想了解LCN框架的用户非常有用。
1-1 导学-分布式事务实践 第2章 事务原则与实现 介绍了事务的四大原则,并通过实例介绍数据库实现事务的方法,以及使用JDBC实现事务的方法。 2-1 事务原则与实现:事务 2-2 事务原则与实现:SQL事务 2-3 事务原则与...
本书作者具有丰富的分布式服务框架、平台中间件的架构设计和实践经验,主导设计的华为分布式服务框架已经在全球数十个国家成功商用。书中依托工作实践,从分布式服务框架的架构设计原理到实践经验总结,涵盖了服务化...
lcn分布式事务框架源码
分布式事务解决方案Seata 框架学习代码 Demo 。里面包含了完成的seata使用代码,包括AT、TCC、XA等模式的直接使用案例。开箱即用。 分布式事务解决方案Seata 框架学习代码 Demo 。里面包含了完成的seata使用代码,...
分布式服务框架原理与实践.李林锋(详细书签) 分布式服务框架原理与实践.李林锋(详细书签) 分布式服务框架原理与实践.李林锋(详细书签) 分布式服务框架原理与实践.李林锋(详细书签)
分布式事务框架seata安装教程
本文来自于csdn,本文主要从分布式的原因,事务特性,和解决方案中深入理解了分布式事务,希望对您的学习有所帮助。 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的...
分布式服务框架原理与实践_李林锋pdf(带目录)分布式服务框架原理与实践_李林锋pdf(带目录) 7z压缩打开即可
分布式事务服务 (Distributed Transaction Service, DTS) 是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。DTS 从架构上分为 dts-core 、dts-schedule、 dts-server 两部分,dts-core是一个...
java分布式事务demo