当多个服务间调用 就会涉及到分布式事务
第三方支付----》回调支付系统-----》更新订单
数据库的本地事务 的保证ACID (原子性,一致性,隔离性,持久性)
原子性:要么全部成功 要么全部失败 (日志文件 undo redo)
一致性:锁
隔离性: 事务的隔离级别为 读未 读已 重复读 串行化 ---》脏读 幻读 重复读 锁
持久性:日志文件 undo redo
数据库在写入数据之前 会先写日志文件(redolog 会记录修改的值 和上个原数据指针) 然后再在写入数据文件
如果数据文件写入成功 而数据库中不存在数据 下次启动会先检查redolog日志文件 执行redo操作 将数据写入到数据库中
如果事务没提交 执行undolog操作(日志回滚 insert-->delete )
XA: 事务管理器(TM)资源管理器(RM)
2pc:
1 先让两个系统预提交
2 先做sql操作 但不提交
3 如果两个RM 响应TM yes
那么 TM就让两个RM执行真正提交
4 提交完成后 给TM响应提交完成 此时TM释放资源
如果在 1-2 中响应NO 进行SQL回滚操作都回滚
如果在3 中响应NO 也会进行SQL回滚(根据redo undo回滚)
缺点:1.TM单点故障
2.3阶段因网络无法给RM正常响应 资源将阻塞 无法正常释放 也会造成数据不一致
3pc:(无法完全解决分布式事务,只能改进2pc)
1 :先询问两个RM 能否正常提交(避免网络或单点故障引起数据库不一致)
2: 后面与2pc提交一致
但是3pc 引入了超时处理
如果TM 没有在规定的时间内 给RM响应 则会进行操作回滚 释放资源