分布式事务的解决方案

本文探讨了分布式事务的重要性和挑战,包括CAP定律和数据一致性理论。介绍了二阶段提交(2PC)和三阶段提交(3PC)协议的原理及优缺点,并提出在大型互联网平台中,为保证系统可用性,通常采用最终一致性。此外,文章还讨论了通过本地消息表和消息中间件解决分布式事务的方法,以及如何确保消息的可靠传输。
摘要由CSDN通过智能技术生成

随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本文将简单介绍如何有效的解决分布式的一致性问题,其中包括什么是分布式事务,二阶段提交和三阶段提交。

一、普通事务与分布式事务

1.1普通事务
事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
事务的ACID特性:
* 原子性(A):所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。
* 一致性(C):事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那么最后A账户一定是450元,B账户一定是350元。
* 隔离性(I):所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知。
* 持久性(D):所谓的持久性,就是说一单事务完成了,那么事务对数据所做的变更就完全保存在了数据库中,即使发生停电,系统宕机也是如此。

1.2 分布式事务
分布式事务顾名思义就是在分布式环境下运行的事务,对于分布式事务来说,事务的每个操作步骤是运行在不同机器上的服务的。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)。
在现如今的大型互联网平台中,基本上都是采用分布式的SOA架构,所以分布式事务是非常常见的。比如一个电商平台的下单场景,一般对于用户下单会有两个步骤,一是订单业务采取下订单操作,二是库存业务采取减库存操作,但在大型电子商务平台上这两个业务一般会运行在不同的机器上,这就是一个典型的分布式事务场景。还有一个常见的场景就是支付宝向余额宝转账,而支付宝和余额宝不是一个系统,怎么保证这两个系统之间的一致性就是分布式事务所关注的问题。
1.2.1 分布式系统CAP定律
为了更方便的理解分布式事务,这里插一个分布式系统的CAP定律。在分布式系统里面有一个CAP定律,这个定理的内容是指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
* 一致性(C):每次访问都能获得最新数据但可能会收到错误响应
* 可用性(A):每次访问都能收到非错响应,但不保证获取到最新数据
* 分区容错性(P):在任意分区网络故障的情况下系统仍能继续运行
CAP定律是NoSQL数据库的基石,而CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点,而NoSQL则选了可用性。NoSQL数据库主要做的是简单的键值查询,因此NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现)
1.2.2 一致性理论
通过上面介绍我们知道,对分布式系统来说,CAP 理论告诉我们。为了下一步讨论分布式事务特性,先简单介绍下数据一致性的基础理论。
* 强一致:当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。
* 弱一致性:系统并不保证续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到(也可能读不出来)。
* 最终一致性:弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。
1.2.3 分布式事务特性—最终一致性
在互联网大型分布式平台场景中,为了保障系统的可用性,他们一般会把强一致性的需求转换成最终一致性的需求。所以,对于大部分分布式事务场景,我们仅需要保证最终一致性即可。

二.分布式事务解决方案

2.1 本地消息(事务)表
这种实现方式的思路,其实是源于ebay经典的BASE (basically available, soft state, eventually consistent)方案。其基本的设计思想是将远程分布式事务拆分成一系列的本地事务。举个例子。假设系统中有以下两个表
user(id, name, amt_sold, amt_bought)
transaction(xid, seller_id, buyer_id, amount)
其中user表记录用户交易汇总信息,transaction表记录每个交易的详细信息。

begin;
    INSERT INTO transaction VALUES(xid, $seller_id, $buyer_id, $amount);
    UPDATE user SET amt_sold = amt_sold + $amount WHERE id = $seller_id;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值