分布式事务的几种实现方式

分布式,事务,几种,实现,方式 · 浏览次数 : 55

小编点评

## 基础理论CAP理论一致性(Consistency) **CAP理论**是一种分布式系统安全性和可用性的理论,它定义了数据一致性(Consistency)的要求,以及在分布式系统中确保这些要求的最小保证。 **CAP理论包含三个关键概念:** * **原子性(Atomicity):**事务内的所有操作要么全部执行,要么都不执行。 * **一致性(Consistency):**数据是满足完整性约束的,也就是不会存在中间状态的数据。 * **隔离性(Isolation):**多个事务并发执行的时候不会互相干扰。 **CAP理论的四个基本属性:** * **持久性(Durability):**事务完成后数据会被永远保存下来,之后的其他操作或故障都不会对结果产生影响。 * **幂等性(Idempotent):** f(n) = 1^n , 无论n等于多少,f(n)永远值等于1。 * **容错性(Partition tolerance):**分布式系统在遇到任何网络分区故障时,仍然能保证对外提供满足一致性和可用性的服务,除非整个网络环境都发生故障。 * **局部一致性(Local consistency):**本地事务应该是具备原子性、一致性、隔离性和持久性,简称 ACID。 **CAP理论与ACID特性之间的关系:** * ACID是CAP理论的特殊情况,它只要求原子性和一致性。 * CAP理论可以支持ACID特性,但ACID特性只能支持部分CAP特性。

正文

基础理论

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消息队列等中间件产品配合使用,轻松实现分布式数据库事务、多库事务、消息事务、服务链路级事务及各种组合。

作者:京东零售 谷伟

来源:京东云开发者社区

与分布式事务的几种实现方式相似的内容:

分布式事务的几种实现方式

## 基础理论 ### CAP理论 一致性(Consistency) :在分布式系统中所有的数据备份,在同一时刻都保持一致状态,如无法保证状态一致,直接返回错误; 可用性(Availability):在集群中一部分节点故障,也能保证客户端访问系统并得到正确响应,允许一定时间内数据状态不一致; 分区容

分布式事务的华丽进化

说到分布式事务,大家并不陌生。在实际工作中,用得比较多的还是柔性分布式事务,今天主要把在工作中运用到的几种柔性分布式事务的场景及实现方式做一个简单介绍,也可以看做是柔性分布式事务的一个演进过程。

基于Seata探寻分布式事务的实现方案

随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章通过seata框架总结了分布式事务的几种解决方案。

“事后达尔文”—— 游戏业务效果评估方法实践

本文介绍了互联网业务数据效果评估的几种常见问题及方法,并基于分层抽样的逻辑优化出一套可应用于解决用户不均匀的“事后达尔文"分析法,可适用于无法ab测试或人群不均匀的ab测试等场景下的效果评估中,本文会基于实际应用案例,来给大家仔细阐述相关方法模型的思考过程,实现原理,应用结果,希望能够帮助大家,如果能对大家在各自领域中的业务效果评估有所助益的话,那就更棒了!

[转帖]炸了~Redis bigkey导致生产事故-bigkey问题全面分析

文章首发于公众号:BiggerBoy 原文链接 一个Redis生产事故的复盘,整理这篇文章分享给大家。本期文章分析Redis中的bigkey相关问题,主要从以下几个点入手: 文章目录 什么是bigkey?bigkey的危害bigkey的产生如何发现bigkey实际生产的操作方式 如何优化bigkey

EaselJS 源码分析系列--第四篇

![image](https://img2023.cnblogs.com/blog/405426/202307/405426-20230726131720022-979447179.jpg) ## 鼠标交互事件 前几篇关注的是如何渲染,那么鼠标交互如何实现呢? Canvas context 本身没有

boltdb一瞥

boltdb 网上关于boltdb的文章有很多,特别是微信公众号上,例如: boltdb源码分析系列-事务-腾讯云开发者社区-腾讯云 (tencent.com) 这些文章都写的挺好,但不一定覆盖了我所关注的几个点,下面我把我关注的几个点就来下来。 node page bucket tx db的关系

编译器优化丨Cache优化

摘要:本文重点介绍几种通过优化Cache使用提高程序性能的方法。 本文分享自华为云社区《编译器优化那些事儿(7):Cache优化》,作者:毕昇小助手。 引言 软件开发人员往往期望计算机硬件拥有无限容量、零访问延迟、无限带宽以及便宜的内存,但是现实却是内存容量越大,相应的访问时间越长;内存访问速度越快

服务链路追踪 —— SpringCloud Sleuth

Sleuth 简介 随着业务的发展,系统规模变得越来越大,微服务拆分越来越细,各微服务间的调用关系也越来越复杂。客户端请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,几平每一个请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整

[转帖]perf学习-linux自带性能分析工具

目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里。 方便自己查看。 什么是perf? linux性能调优工具,32内核以上自带的工具,软件性能分析。在2.6.31及后续版本的Linux内核里,安装perf非常的容易。 几乎能够处理所有与性能相关的事件。