2pc 和 3pc

当多个服务间调用 就会涉及到分布式事务
第三方支付----》回调支付系统-----》更新订单

数据库的本地事务 的保证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响应 则会进行操作回滚 释放资源

 

posted @ 2022-08-09 11:25  花心大萝卜li  阅读(51)  评论(0)    收藏  举报