由事务到分布式事务
由事务到分布式事务
什么是事务
要么什么也不做,要做就做完。回滚机制
为什么需要事务
保证用户的每一次操作都是可靠的。否则当在ATM取钱的时候,机器宕机的话,你没有取到钱,但是显示已经扣款了,怎么办!
事务四个特性
保证事务四种特性ACID:
- A原子性。事务要么完成,要么失败。不能停留在中间状态。
- C一致性。一个事务执行之前,执行之后。数据库必须处于一致状态。
- I 隔离性。并发环境之中,不同的事务操作相同的数据时候,每个事务都有各自的完整空间。
分为四种隔离级别:
READ UNCOMMITTED 读未提交
READ COMMITTED 读已提交
REPEATABLE READ 重复读取
SERIALIZABLE 串行化 - D 永久性。只要事务操作成功,所有更新操作都要被永久的保存下来。
什么是分布式事务
一次大的操作由不同的小操作组成,这些大操作分布在不同的服务器上。需要保持不同数据库的一致性。
为什么需要分布式事务
比如某电商系统的下单业务。一个是扣库存,一个是更新订单状态。两个在不同的服务器的数据库里面。所以需要保持两个事务的一致性。
分布式理论基础
- CAP理论
C一致性。统一数据的多个副本是否实时相同。
A可用性。 一定的时间内,系统返回明确结果。
P分区容错性。 保证某一个宕机,仍有其他系统提供相同的服务。
CAP理论得出,实际中只能选择2个条件。具体根据自己的业务需求,大多数系统都选择AP。 - BASE理论
BA基本可用
S 柔性状态
E 最终一致性
BASE理论是对CAP理论的一个扩充。就是虽然不能达到强一致性,但是可以达到最终一致性。
分布式事务解决方案
常见方案有如下几种:
- 基于XA协议2阶段提交,3阶段提交
XA三阶段提交不足:
性能问题
协调者和参与者单点故障都会导致不一致问题
XA三阶段提交在两阶段提交的基础上增加了CanCommit阶段,并且引入了超时机制。一旦事物参与者迟迟没有接到协调者的commit请求,会自动进行本地commit。这样有效解决了协调者单点故障的问题。但是性能问题和不一致的问题仍然没有根本解决。
2. 消息+最终一致性
利用消息中间件来异步完成事务的后一半更新,实现系统的最终一致性。这个方式避免了像XA协议那样的性能问题。
3. TCC模式
TCC事务是Try、Commit、Cancel三种指令的缩写,其逻辑模式类似于XA两阶段提交,但是实现方式是在代码层面来人为实现。