分布式事务

【技术选型】

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解决分布式事务

 

你可能感兴趣的:(分布式事务)