`
memorymyann
  • 浏览: 271809 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

分布式事务1理论篇

阅读更多
很久没写过了,写这个系列是因为工作中常年碰到。

先介绍下理论
再介绍下支付宝常用的DTX和XTC我看看我挑一个讲讲
再介绍下业内我知道的常用的几个实时的方案,毕竟大家其实不会去用阿里的技术,阿里技术也不是标杆
最后说下笔者所在的业务线常用的方案

分布式事务目前已知的解法都是无限降低出问题的可能性,但其实没有根治的方案。另外所有的解决方案你会发现一个问题:问题出概率越低的方案,系统性能越差,运维成本就越高。出概率高的方案,系统性能约好,运维成本越低。所以在实际实施过程中,一定要根据自己的业务场景来选择,不要过分追求系统稳定性和数据的准确性,这会付出极大的代价和成本。

笔者在阿里,负责国际事业部线上的电子商务的资金流。此类问题非常常见。
比如:一次线上用户钱包支付行为,核心设计的领域有3个,
资产域:负责管理个人用户资产的,这里除了基于账务的做的资金资产,还有营销的券资产,升值还有卡资产(用户的信用卡,储蓄卡等)。
账务域:这个就好理解了,资产域基于账务域就能形成一个个人账务资产的模型。
清结算+网关域:放在一起来说吧,主要是负责和支付机构或者银行打交道,屏蔽掉外部机构复杂的交互流程。

一次支付行为分解成一下几个步骤:
1.指令到资产域,资产域定位具体用户,并准备调用下面2支撑域来完成这个业务操作。
2.资产调用账务,完成对个人账户的资产扣减。
3.资产域将指令发给清结算网关域,清结算网关收到后,准备好指令。(一般发送给机构是异步的,毕竟你想想如果每笔转账都收费,那肯定比较划算的做法是:先将今天的指令全部缓冲,然后再发给机构)。

这里的分布式事务就是 账务和清结算网关必需要一起成功。不能账务扣减了,但转账指令没有发给机构,或者转账指令发给机构了,但账务没扣减。

由此我们归纳出一个ACID理论:
Atomicity:原子性(要么全部执行,要么全部都不执行)
Consistency:一致性(数据库只有一个状态,不存在未确定状态)
Isolation:隔离性(事务之间互不干扰)
Durability: 永久性(事务一旦提交,数据库记录永久不变)这条纯属多余,这个都做不到那还搞什么。主要是上面3个问题要解开。

方案一:2PC俩阶段提交
这里首先要引入2个角色:协调者和参与者。

从方案名字就知道是分2阶段完成。
准备阶段:协调者询问所有参与者是否都做完了除提交外所有事情。
提交阶段:协调者在上面阶段收到所有肯定回答后,让所有参与者都提交。如果不是全部的肯定回答,就让所有参与者回滚。

问题:1.协调者是单点
     2.性能问题:我都不觉得这是个问题,你都决定要分布式事务了,还担心这玩意,后面只会更差,但还是有其它方案会比2PC更好,当然是牺牲某些特性的前提下。
     3.数据不一致:所以说吧,根本无法根治。这条明显就破坏了原子性原则。什么情况呢?就是在阶段2时候如果协调者发给参与者的通知丢了,比如网络问题是吧。针对这个问题其实最简单有效且成本低的方案(这里低成本是指对软件开发者来说),就是把这2个领域应用部署到一个机房,更夸张的是,部署到一个物理机上(针对集群,可以尽量让2个调用优先在一台机器上跑,这个可以做到的)。

方案二:3PC阶段提交
性能更差的来了,其实看完就知道还是会违反原子性,无非就是降低了发生问题的概率而已。这个方案我觉得在丧失了这么大性能,更可怕的是对代码维护成本更高,得到了这么点的提升稳定性的保障,还不如部署在一个机房性价比更高。放心,线上网络和机器没那么容易挂。

参与角色还是:协调者和参与者,当然为了解决单点问题,可以引入选举机制,但我觉得这不是重点。

分成了3个阶段:
canCommit:其实就是去预占资源,占不到就等着,或者退出。(等着或者退出没有强制规定,自己决定即可)。
preCommit:就是之前的准备阶段,完成了除事务提交外,所有的事情。
doCommit:提交事务。

引入超时机制:比如在参与者完成preCommit后,迟迟没有收到(具体多久一般自己定)doCommit信号,你就可以认为大家都完成了doCommit,那我还是doCommit吧。
引入了选举机制:前面解释过了

性能更差,但说白了,能提升多少成功率,我觉得性价比不高。

方案三:TCC
没有协调者和参与者这种概念,简化成了调用方和被调用方。

一阶段Try行为:
调用方会分别调用多个被调用方,只有当多个被调用方都返回成功的时候,才会执行confirm操作,否则就执行cancel,这个阶段其实就是一个检查资源和锁定资源的操作,在真正执行前的一个冻结操作。
二阶段Confirm行为:
使用预留的资源,完成真正的业务操作,要求Try成功Confirm一定也是要成功的。要是个别或者全部confirm失败了或者调用超时了,和try阶段不同的是在confirm阶段不会做回滚操作,而是将所有的confirm进行重试,如果超过重试次数,则必须告警通知人工进行处理。
二阶段Cancel行为:
这个阶段是释放预留资源的阶段,只有在try阶段失败或者异常的情况下才会执行cancel操作。而且这里只对try步骤中已经成功的被调用者进行cannel处理,同时这个步骤失败也会重试。
TCC是柔性事务,解决了2PC中全局资源锁定导致效率低下的问题。

好了上面全是理论,下
分享到:
评论

相关推荐

    分布式事务

    本篇将深入探讨分布式事务的相关知识点。 分布式事务的定义: 分布式事务是指跨越两个或更多独立数据存储区的单个逻辑操作。这些数据存储区可能位于不同的服务器、数据库或甚至是不同类型的存储系统上。分布式事务...

    面向内存数据网格的分布式事务保障机制.pdf

    本篇研究的重点在于为基于内存的数据网格提供一个有效的分布式事务管理机制,同时确保在高并发环境下,数据操作能够保持一致性,并且支持系统的可扩展性。这些研究对于构建高性能、可扩展和可靠的分布式数据处理系统...

    大规模SOA系统中的分布事务处事_程立

    1. 分布式事务的基本概念:在大规模SOA系统中,分布式事务是由多个资源管理器(通常是不同数据库)参与的全局事务。它要求这些资源管理器能够协同工作,以保证全局事务的ACID(原子性、一致性、隔离性、持久性)属性...

    移动互联网中的分布式事务处理解决方案.pdf

    在分布式事务中,CAP理论是一个非常关键的概念。CAP代表一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。在分布式系统中,这三者不可能同时完全满足,通常需要在这三者之间权衡...

    分布式事务终极解决方案汇总.docx

    本篇文章旨在探讨分布式事务的相关概念及其解决方案。 #### 二、分布式事务基础 **1. 什么是分布式事务?** 分布式事务是指跨越多个网络计算节点(通常是多台计算机)的一组操作,这些操作要么全部成功,要么全部...

    企业级分布式数据库实践专场__深入OceanBase企业级数据库的分布式事务引擎.zip

    OceanBase作为一款领先的企业级分布式数据库,其在分布式事务引擎上的设计与实现具有重要的理论价值和实践意义。本篇将深入探讨OceanBase的分布式事务引擎,旨在揭示其高效、可靠和可扩展的内在机制。 分布式事务是...

    分布式理论系列 论文汇总

    关于两阶段提交,它是一种经典的分布式事务处理协议,虽然具有简单易懂的优势,但在面对系统故障时存在阻塞的风险。这一点在上述的文章内容中也有提及,显示了两阶段提交的局限性。FLP不可能性是一个关于分布式算法...

    李维分布式多层应用系统篇随书源码

    李维,作为知名的IT作者,可能在书中详细阐述了如何构建分布式多层应用系统,而这些源码就是对书中理论的实践示例,帮助读者更深入理解分布式系统的设计与实现。 【描述】"李维分布式多层应用系统篇随书源码"简单...

    自稳定的分布式事务内存模型及算法.pdf

    在提到的这篇名为“自稳定的分布式事务内存模型及算法.pdf”的文献中,研究者们提出了一个名为SSDTM(Self-Stabilizing Distributed Transactional Memory)的模型。该模型的设计目的在于解决分布式系统中瞬时故障...

    Delphi 5.x 分布式多层应用系统篇附书源码

    1. 分布式系统设计原理:包括客户端-服务器架构、负载均衡、事务管理、安全性等。 2. Delphi 5.x 的网络编程:Indy 和 TClientSocket/TServerSocket 的使用,以及如何处理网络通信异常。 3. 数据访问层的设计:如何...

    基于Web服务的分布式应用事务处理探讨.pdf

    分布式事务处理是确保网络应用可靠性的重要技术,它涉及到事务控制、事务提交和故障恢复等关键环节。在分布式系统中,数据通常逻辑集中但物理分布,为保持数据一致性,需要跨节点的数据同步机制。基于Web服务的...

    分布式数据库论文

    本压缩包包含5篇关于分布式数据库的完整课程设计,这些设计可以作为深入理解分布式数据库理论与实践的宝贵资源。 首先,分布式数据库的基本概念是理解其运作机制的基础。分布式数据库是由两个或更多个物理位置上的...

    分布式数据库管理-第1篇.pptx

    - **分布式事务**: 保证跨节点操作的原子性、一致性、隔离性和持久性(ACID属性)。 - **副本同步**: 通过同步机制保持副本之间的一致性。 - **权衡策略**: 在性能、可用性和一致性之间寻求最佳平衡点。 **1.4 数据...

    MD51分布式多层应用系统篇随书源码.rar

    1. **分布式系统**:分布式多层应用系统是指将应用程序划分为不同层次,每个层次运行在不同的节点上,通过网络进行通信。这样的设计可以提高系统的可扩展性、容错性和性能,常见的层次结构包括表示层、业务逻辑层和...

    确定性分布式数据库中长事务处理方法研究.pdf

    在详细解读文件内容之前,我们先明确文章的主题,这篇文章的主题是关于“确定性分布式数据库中长事务处理方法研究”,探讨了在分布式数据库中处理长事务的技术挑战以及提出了解决方案。 文章首先指出,在确定性...

    Eclipse开发分布式商城系统+完整视频代码及文档!

    3. 数据一致性:分布式环境下,数据一致性是挑战之一,可以通过CAP理论、BASE理论以及分布式事务解决方案(如2PC、TCC、Saga等)来保证。 三、核心技术栈 1. Spring Cloud:Spring Cloud是基于Spring Boot实现的...

    大规模分布式系统架构与设计实战

     《大规模分布式存储系统:原理解析与架构实战》内容分为四个部分:基础篇--分布式存储系统的基础知识,包含单机存储系统的知识,如数据模型、事务与并发控制、故障恢复、存储引擎、压缩/解压缩等;分布式系统的...

    大规模分布式存储系统

    , 《大规模分布式存储系统:原理解析与架构实战》内容分为四个部分:基础篇——分布式存储系统的基础知识,包含单机存储系统的知识,如数据模型、事务与并发控制、故障恢复、存储引擎、压缩/解压缩等;分布式系统的...

    2021分布式数据库技术系列概览.pdf

    数据一致性保证是分布式数据库中的难点问题之一,需要通过分布式事务、最终一致性等技术来解决节点间的数据一致性问题。高可用性保证了即便部分节点出现故障,系统也能继续提供服务。可扩展性则意味着系统可以方便地...

    (高清版)大规模分布式存储系统:原理解析与架构实战

    《大规模分布式存储系统:原理解析与架构实战》内容分为四个部分:基础篇——分布式存储系统的基础知识,包含单机存储系统的知识,如数据模型、事务与并发控制、故障恢复、存储引擎、压缩/解压缩等;分布式系统的...

Global site tag (gtag.js) - Google Analytics