前言
本人目前就职于一家互联网支付公司,在公司这几年主要的工作是做支付账务这一模块。账务系统为了支撑上游高并发的业务请求,我们使用了分库分表的方式来提升系统性能,但是分库分表之后,随之而来的一个比较棘手的问题就是分布式事务的问题。正好最近正在准备公司内部的职级晋升申请答辩,所以这一次的晋升申请其中一个主题就是分布式事物。
1、事物的定义
说起分布式事务,得先从数据库事物说起,它是一组操作序列,要么都执行,要么都不执行,是一个不可分割的操作单位。数据库事物主要有以下四个特性
- 原子性(Atomic):是指事物所包含的所有操作要么全部成功,要么全部失败回滚。
- 一致性(Consistency):事物执行之前和执行之后状态必须是一致的,
- 隔离性(Isolation):多个用户同时访问数据库时,数据库开启多个事物,不同事物的不能相互干扰,各自独立的执行。数据库主要有四个隔离级别:读未提交、读已提交、可重复读、串行化。
- 持久性 (Durability):一个事物一旦被提交了,那么它在数据库中的改变是永久性的,即时数据库遇到故障也不会丢失提交事物的操作。
2、两阶段提交(2PC)
事物分为准备阶段和提交阶段,需要有事物参与者和事物协调器。
- 第一个阶段:由事物协调器分别向参与者发送事物执行请求,并等待参与者反馈事物执行结果。事物参与者收到事物执行请求之后执行事物单不提交。参与者将事物执行结果反馈给事物协调器,同时阻塞等待协调器的下一步指令。
- 第二个阶段:根据第一个阶段参与者的反馈会有三种情况,