分布式事务的几种实现方式 | 京东云技术团队

京东云开发者
• 阅读 234

基础理论

CAP理论

一致性(Consistency) :在分布式系统中所有的数据备份,在同一时刻都保持一致状态,如无法保证状态一致,直接返回错误;

可用性(Availability):在集群中一部分节点故障,也能保证客户端访问系统并得到正确响应,允许一定时间内数据状态不一致;

分区容错性(Partition tolerance):分布式系统在遇到任何网络分区故障时,仍然能保证对外提供满足一致性和可用性的服务,除非整个网络环境都发生故障;

本地事务四大特性(ACID)

事务应该是具备原子性、一致性、隔离性和持久性,简称 ACID。

原子性(Atomicity) ,可以理解为一个事务内的所有操作要么都执行,要么都不执行。

一致性(Consistency) ,可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,事务前后数据的完整性必须保持一致。。

隔离性(Isolation) ,指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。

持久性(Durability) ,指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。

BASE理论

基本可用(Basically Available):分布式系统在出现故障时,保证核心可用,允许损失部分可用性。(响应时间上的损失、功能上的损失)

软状态(Soft State):系统中的数据允许存在中间状态,中间状态不影响系统的整体可用性。(支付中、处理中等)

最终一致性(Eventually Consistent):系统中的数据不可一直处于软状态,必须在有时间期限,在期限过后应当保证数据的一致性。(支付中变为支付成功)

相比于本地事务的ADIC强一致性模型,BASE理论提出通过牺牲一定的强一致性来获得可用性;

不同业务单元和业务组件对数据一致性的要求不一样,因此分布式系统中BASE理论和ACID特性会结合使用。

幂等性设计

幂等(Idempotent)是一个数学与计算机学中的概念。f(n) = 1^n , 无论n等于多少,f(n)永远值等于1;

在程序中,使用相同参数执行同一个方法,每一次执行结果都是相同的,即具有幂等性;

以订单状态处理为例的幂等性设计,不论执行多少次orderProcess()方法,都只会扣减一次库存,并且返回true。

分布式事务分类

二段提交2PC(Two-Phase-Commit)|三段提交3PC (Three-Phase-Commit)

分布式事务的几种实现方式 | 京东云技术团队

三阶段提交引入两个机制

1、 引入超时机制。同时在协调者和参与者中都引入超时机制。

2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。

主要解决的问题:

避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧面降低了整个事务的阻塞时间和范围。

缺点:

性能较差,会存在长时间的锁表。

补偿事务-TCC(Try-Confirm-Cancel)|Saga

分布式事务的几种实现方式 | 京东云技术团队

TCC 与Saga其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。确认和补偿都有采用幂等性设计。

缺点:代码量大,可维护性差。

消息事务

分布式事务的几种实现方式 | 京东云技术团队

消息一致性方案是通过消息中间件保证上、下游应用数据操作的一致性。基本思路是将本地操作和发送消息放在一个事务中,保证本地操作和消息发送要么两者都成功或者都失败。下游应用向消息系统订阅该消息,收到消息后执行相应操作。

消息方案从本质上讲是将分布式事务转换为两个本地事务,然后依靠下游业务的重试机制达到最终一致性。

代表产品:RocketMQ

分布式事务产品框架

京东jdts

服务通过lb连到集群中任何一个节点均能保证业务正确执行,某一个节点异常时集群可正常提供服务,同时支持集群横向、纵向扩展。

Seata

一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

全局事务服务GTS

用于实现分布式环境下,特别是微服务架构下的高性能事务一致性。可以与RDS、MySQL、PostgreSQL等数据源,Spring Cloud、Dubbo、HSF及其他RPC框架,MQ消息队列等中间件产品配合使用,轻松实现分布式数据库事务、多库事务、消息事务、服务链路级事务及各种组合。

分布式事务的几种实现方式 | 京东云技术团队

作者:京东零售 谷伟

来源:京东云开发者社区

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
CAP理论
cap理论博客分类:架构CAP理论由EricBrewer在ACMPODC会议上的主题报告中提出,这个理论是NoSQL数据管理系统构建的基础,如下图所示:▲CAP理论  其中字母“C”、“A”、“P”分别代表以下三个特征:  ·强一致性(Consistency)。系统在执行过某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功
Wesley13 Wesley13
2年前
CAP理论与分布式事务解决方案
微服务系统所设计的系统是分布式系统。分布式系统有一个著名的CAP理论,即同时满足“一致性”“可用性”和“分区容错”是一件不可能的事。CAP理论是由EricBrewer在2000年PODC会议上提出的,该理论在两年后被证明成立。CAP理论告诉架构师不要妄想设计出同时满足三者的系统,应该有所取舍,设计出适合业务的系统。CAP理论示意图!(https:/
Wesley13 Wesley13
2年前
CAP定理与BASE理论
1\.CAP定理C:Consistency,一致性A:Availability,可用性P:Partitiontolerance,分区容错性CAP定理,指的是在一个分布式系统中,一致性、可用性、分区容错性,三者不可得兼。2\.CAP详解2.1一致性(C)指所有节点访问同一份最新的
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
2年前
CAP BASE ACID
CAP(理论)Consistency(一致性),数据一致更新,所有数据变动都是同步的Availability(可用性),好的响应性能Partitiontolerance(分区容错性)可靠性定理:任何分布式系统只可同时满足二点,没法三者兼顾。忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
Wesley13 Wesley13
2年前
CAP理论
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:●一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)●可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)●分区容错性(P):以实际效果而言,分区相当于对
Stella981 Stella981
2年前
Raft分布式一致性算法整理
CAP定理1.Consistency:一致性2.Availability:可用性3.Partitiontolerance:分区容错性CAP定理指出,在异步网络模型中,不存在一个系统可以同时满足上述3个属性。换句话说,分布式系统必须舍弃其中的一个属性。对于需要在分布式条件下运行的系统来说,如何在一致性、可用性和分区容错
Stella981 Stella981
2年前
Linux下分布式系统以及CAP理论分析
CAP理论被很多人拿来作为分布式系统设计的金律,然而感觉大家对CAP这三个属性的认识却存在不少误区,那么什么是CAP理论呢?CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他认为在设计一个大规模可扩放的网络服务时候会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partitionto
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
2年前
2、初探 ZooKeeper 技术内幕
分布式一致性“分布式”是大型系统实现高性能、高可用所常用的架构手段,本章节将概述“分布式一致性”的基本内容,以作为ZAB算法阐述的基础。分布式一致性的基本概念数据库系统的基础理论中,“事务”必须符合ACID,即为:Atomicity原子性、Consistency一致性、Isolation隔离性、Durabilit