【技术选型】
1、servicecomb-saga 华为分布式事务解决方案
2、Seata 阿里的,开源,支持at(需要本地事务支持)和mt模式(不需要本地事务,MT模式本质上是一种TCC方案,业务逻辑需要被拆分为 Prepare/Commit/Rollback 3 部分)
3、shardingSphere 京东的,开源已经提交apache,定位为关系型数据库中间件,Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。
目前,数据分片、读写分离、多数据副本、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。
开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。
4、TCC-Transaction 开源,支持JDBC,redis等数据库,幂等框架不支持,不耦合prc框架
缺点:TCC为Try、Confirm、Cancel的缩写:try阶段预留资源尝试提交,confirm阶段确定提交,cancel取消提交释放资源。代码的嵌入性高,要求每个业务需要写三种步骤的操作。
5、LCN 开源:支持三种模式:LCN(本地事务支持),TCC,TXC(预先读取影响的数据,作为回滚的依据)三种模式,
同5.0时添加的插件扩展机制,也就是说他更加开放了,他可以可以容纳更多的rpc框架,也可以更多的支持db框架,比如mongodb、redis,还有将来一些框架,如ES等等。
【Servicecomb】
http://servicecomb.apache.org/
https://twitter.com/ServiceComb
ServiceComb简介
ServiceComb数据一致性解决方案Saga演进介绍
【ShardingSphere】
官方文档
ShardingSphere官微-定期发布ShardingSphere官方更新
shardingsphere
shardingsphere-example
ShardingSphereDemo
sharding-sphere
[转]ShardingSphere分布式事务解决方案
刚柔并济的开源分布式事务解决方案
分布式事务在Sharding-Sphere中的实现
Apache ShardingSphere 整合 Seata AT 分布式事务
24.分库分表导致的分布式事务及其解决方案
shardingsphere分析
sharding-sphere之分库分表算法及策略解释
Sharding-JDBC 使用入门和基本配置
Sharding-JDBC进行分表分库之初体验
使用Sharding-JDBC进行分表分库之增删改查和分布式事务
从一个简单的SQL查询搞懂Sharding-Proxy核心原理
Sharding-Sphere:Sharding-Proxy分库分表
shardingsphere-Proxy 初次使用
ShardingSphere官网操作指南补充和重点整理-分布式事务-支持功能(十)
ShardingSphere官网操作指南补充和重点整理-分布式事务-实现原理(十一)
ShardingSphere官网操作指南补充和重点整理-分布式事务-参考示例(十二)
SPI
Service Provider Interface (SPI)是一种为了被第三方实现或扩展的API。它可以用于实现框架扩展或组件替换。
注册中心
ShardingSphere在数据库治理模块使用SPI方式载入注册中心,进行实例熔断和数据库禁用。
目前,ShardingSphere内部支持Zookeeper和Etcd两种常用的注册中心。 此外,您可以使用其他第三方注册中心,并通过SPI的方式注入到ShardingSphere,从而使用该注册中心,实现数据库治理功能。
数据脱敏
是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。涉及客户安全数据或者一些商业性敏感数据,如身份证号、手机号、卡号、客户号等个人信息按照相关部门规定,都需要进行数据脱敏。
【Seata】
官方文档
github
由Seata看分布式事务取舍
SpringCloud与Seata分布式事务初体验
阿里巴巴分布式事务利器Seata环境准备
seata项目示例之快速部署
Seata实战-分布式事务简介及demo上手
分布式事务之Seata中间件原理及流程详细分析
seata eureka 全局事务编号传递关键代码
Seata分布式事务的事务传播之源码分析
阿里分布式事务框架Seata原理解析
分布式框架seata搭建:springboot+mybatis
一文讲清楚 seata DataSourceProxy 的使用
阿里开源分布式事务组件 seata : 配置机制简析
阿里开源分布式事务组件 seata :seata server 通信层解析
事务传递:
在seata源码中集成rpc时处理,dubbo的处理方式如下:
ApacheDubboTransactionPropagationFilter
AlibabaDubboTransactionPropagationFilter
自定义实现:
【LCN】
lcn github
LCN解决分布式事务原理解析+项目实战(原创精华版)
基于LCN彻底解决分布式事务
LCN分布式事务框架原理详解4.0
【分布式事务----LCN】LCN原理及使用方式
【TCC-Transaction】
github
TCC-Transaction 分布式事务 —— 项目实战
相关概念
JPA:
JPA (Java Persistence API)Java持久化API。是一套Sun公司Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没有实现。
总结:
XA协议:
比较简单,而且一旦商业数据库实现了XA协议,使用分布式事务的成本也比较低。
但是,XA也有致命的缺点,那就是性能不理想,特别是在交易下单链路,往往并发量很高,XA无法满足高并发场景。
XA目前在商业数据库支持的比较理想,在mysql数据库中支持的不太理想,mysql的XA实现,没有记录prepare阶段日志,主备切换回导致主库与备库数据不一致。
许多nosql也没有支持XA,这让XA的应用场景变得非常狭隘。
消息事务+最终一致性:
所谓的消息事务就是基于消息中间件的两阶段提交,本质上是对消息中间件的一种特殊利用,它是将本地事务和发消息放在了一个分布式事务里,保证要么本地操作成功并且对外发消息成功,要么两者都失败,开源的RocketMQ就支持这一特性。
TCC编程模式:
所谓的TCC编程模式,也是两阶段提交的一个变种。TCC提供了一个编程框架,将整个业务逻辑分为三块:Try、Confirm和Cancel三个操作。
以在线下单为例,Try阶段会去扣库存,Confirm阶段则是去更新订单状态,如果更新订单失败,则进入Cancel阶段,会去恢复库存。
总之,TCC就是通过代码人为实现了两阶段提交,不同的业务场景所写的代码都不一样,复杂度也不一样,因此,这种模式并不能很好地被复用。
AT模式:
Saga柔性事务
Seata柔性事务
TM,RM,TC
TC - 事务协调者,维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM - 事务管理器,定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM - 资源管理器,管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
相关技术:
Spring Cloud Feign设计原理
Feign - 独立使用 - 替代HttpClient
JPA
MyBatis与JPA的区别是什么
JPA、Hibernate和Mybatis区别和总结
参考资料:
分布式事务02-Jta+Atomikos解决分布式事务