seata分布式事务

cap理论
©一致性:返回的数据保证是最新的,且正确的。
(a)可用性:不允许返回错误,可以不是最新的数据,允许返回旧数据。
§分区容忍性:即使在与其他节点失联的情况下,依然需要返回数据以完成用户的请求。
ap组合:马上从本地调用数据展示,可以是旧数据,这种组合用的最多,保证及时可用性。
cp组合:需要确认消息是正确的,保证数据的正确性,如果存在失联情况没办法确认消息的最新,正确性,返回异常提示信息。
不能满足分区容忍性的系统不能被称为分布式系统,所以不存在ca组合。
2pc
几乎所有的分布式事务都是按照2pc的两阶段事务来处理的。
两阶段事务
一阶段 准备阶段
数据库执行业务操作,但是不提交事务
二阶段 提交阶段
事务管理器接受数据库在准备阶段的执行回复,全部成功则成功,有一个失败就全部失败。
seata事务模式:
AT,TCC,SAGA,XA 首推AT模式;
三大架构角色
TC:事务协调者 维护全局事务的状态,独立部署,可集群部署
TM:事务管理器 驱动事务提交回滚
RM:资源管理器(数据库)
at模式
特点:无侵入 业务方法上添加@GlobalTransactional
一阶段:解析sql,获取执行前数据,执行sql,获取执行后数据。保存至undolog,在协调者中加行锁。
二阶段:
成功:全部一阶段都成功了,删除undolog
失败:如果一阶段有一个失败了,那么就失败了。去数据库中查询当前数据和undolog里的数据做比对,如果一致回滚至旧数据。如果不一致,那么出现异常需要人工介入。
优点:无侵入,比xa模式而言,没有对数据一直上锁效率要更高些。
缺点:多次额外查询数据库,还要把结果插入到数据库用于失败后的回滚。
tcc模式
第一阶段:执行业务代码,预留冻结资源(下单扣减100,在金额上不会扣减100,而是另取一个冻结字段,使用金额的时候主动减去这个冻结金额,不允许使用)。
第二阶段:如果第一阶段全部都成功了,那么真实金额扣减,并且冻结金额也扣减100.
如果第一阶段存在失败那么,减去冻结金额。提交事务。

/**
     * TCC的try方法:保存订单信息,状态为支付中
     *
     * 定义两阶段提交,在try阶段通过@TwoPhaseBusinessAction注解定义了分支事务的 resourceId,commit和 cancel 方法
     *  name = 该tcc的bean名称,全局唯一
     *  commitMethod = commit 为二阶段确认方法
     *  rollbackMethod = rollback 为二阶段取消方法
     *  BusinessActionContextParameter注解 传递参数到二阶段中
     *  useTCCFence seata1.5.1的新特性,用于解决TCC幂等,悬挂,空回滚问题,需增加日志表tcc_fence_log
     */
    @TwoPhaseBusinessAction(name = "prepareSaveOrder", commitMethod = "commit", rollbackMethod = "rollback", useTCCFence = true)
    Order prepareSaveOrder(OrderVo orderVo, @BusinessActionContextParameter(paramName = "orderId") Long orderId);

    /**
     *
     * TCC的confirm方法:订单状态改为支付成功
     *
     * 二阶段确认方法可以另命名,但要保证与commitMethod一致
     * context可以传递try方法的参数
     *
     * @param actionContext
     * @return
     */
    boolean commit(BusinessActionContext actionContext);

    /**
     * TCC的cancel方法:订单状态改为支付失败
     * 二阶段取消方法可以另命名,但要保证与rollbackMethod一致
     *
     * @param actionContext
     * @return
     */
    boolean rollback(BusinessActionContext actionContext);

xa模式
第一阶段:执行业务,锁住当前行,不释放。
第二阶段:如果全部成功了,提交事务。如果有一个失败了,那么全部回滚。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值