目前大部分的互联网公司在设计整体架构的时候,都会按照业务模块,将系统拆分成很多小系统,例如订单系统、卡券系统、支付系统等等,简单来说,就是分而治之,这样每个人可以专注维护自己的代码。然后不同的小系统自己开发、测试和上线,都不会跟别人耦合在一起,可以自己独立进行,非常的方便,大大简化了大规模系统的开发成本。
然而有了多个子系统之后,分布式事务应该怎么来实现?下面就介绍一下分布式事务的几种实现方式。
一、分布式事务的概念
分布式事务指的是一个请求在多个系统的调用链当中如何确保数据一致。例如,一个支付请求,支付成功后,会回调请求订单系统修改订单状态,会回调请求卡券系统修改卡券状态。那么如果回调请求因为网络原因丢失了,可能出现用户支付了,订单仍然显示为未支付状态,卡券仍然在冻结中,无法置为已使用状态。
二、2PC/3PC/TCC等分布式事务协议
2PC两阶段提交协议
2PC是非常经典的强一致、中心化的原子提交协议,协议中定义了两类节点:一个中心化协调者节点和多个参与者节点。2PC分为两个阶段:
准备阶段:
1、协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待所有参与者答复。
2、各参与者执行事务操作,将Undo和Redo信息记入事务日志中(但不提交事务)。
3、如参与者执行成功,给协调者反馈YES,即可以提交;如执行失败,给协调者反馈NO,即