本篇是北京云栖大会Tech Insight Workshop金融云主题《使用SOFA来快速构建金融级分布式交易系统》中的一个组成部分.
通过前面的篇章,我们已经借助SOFA Boot框架构建了基于微服务架构的分布式交易系统框架,以及借助数据访问代理将系统的订单库由单库单表模式改造为分库分表,便于支撑平台日益增长的数据量。
在本章节中会介绍如何通过引入蚂蚁中间件的分布式事务产品来保证金融级交易系统的一致性问题,并且会分别介绍分布式事务的两种模式:TCC模式和自动模式的使用方式。
可以看到,基于TCC的分布式事务改造虽然并不复杂,但是毕竟需要对已有的业务实现进行改造。自动模式的诞生就是为了解决这个问题,它的出现很大程度上可以通过不修改已有的业务代码就可以实现事务一致性的保障。
CREATE TABLE `dtx_row_lock` (
`action_id` varchar(128) NOT NULL COMMENT '分支事务号',
`tx_id` varchar(128) NOT NULL COMMENT '主事务号',
`table_name` varchar(64) DEFAULT NULL COMMENT '表名称',
`row_key` varchar(512) NOT NULL COMMENT '行唯一key',
`instance_id` varchar(32) NOT NULL COMMENT '实例id',
`context` varchar(2000) DEFAULT NULL COMMENT '分支上下文',
`feature` varchar(2000) DEFAULT NULL COMMENT '扩展属性',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`row_key`,`instance_id`),
KEY `idx_txid_action_id` (`action_id`,`tx_id`,`instance_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='行锁';
CREATE TABLE `dtx_branch_info` (
`action_id` varchar(128) NOT NULL COMMENT '分支事务号',
`tx_id` varchar(128) NOT NULL COMMENT '主事务号',
`status` varchar(4) DEFAULT NULL COMMENT '事务状态',
`log_info` blob COMMENT 'undo/redo log',
`biz_type` varchar(32) DEFAULT NULL COMMENT '发起方业务类型',
`instance_id` varchar(32) DEFAULT NULL COMMENT '实例id',
`context` varchar(2000) DEFAULT NULL COMMENT '分支上下文',
`feature` varchar(2000) DEFAULT NULL COMMENT '扩展属性',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`action_id`),
KEY `idx_txid_action_id` (`action_id`,`tx_id`,`instance_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分支记录日志';
至此,基于SOFA这个可扩展的分布式云平台所构建的金融交易系统就创建完毕了,整个DEMO分别涉及到分布式数据库,微服务框架,分布式事务等构建金融相关应用所需的基本服务框架,整体的构建过程也比较清晰明了,便于用户的快速入手。在最后环节的分布式事务演示中可以看到,基于自动模式的分布式事务对业务的改造量非常的小,基本可以说是没有侵入性,非常适合需要低成本快速接入分布式事务来保证业务的一致性,同时对TPS以及并发要求不高的业务场景使用。