分布式事务


1.CAP定理

1.1.Consistency

Consistency(一致性):用户访问分布式系统的任意节点,得到的数据必须一致

1.2.Availability

Availability(可用性):用户访问集群中的任意健康节点必须能得到响应而不是拒绝或超时

1.3.Partition tolerance

Partition(分区):因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去链接,形成独立分区
Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务

分布式系统节点通过网络链接,一定会出现分区问题(P)
当分区出现时,系统的一致性(C)和可用性(A)无法同时满足需要做出取舍只能满足CP或AP

2.BASE理论

BASE理论是对CAP的一种解决思路

2.1.Basically Available

Basically Available(基本可用):分布式系统再出现故障时,允许损失部分可用性,保证核心可用

2.2.Soft state

Soft state(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态

2.3.Eventually Consistency

Eventually Consistency(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致

AP模式:各个子事务分别执行和提交,允许出现的结果不一致,然后采用弥补措施恢复数据即可,实现最终一致
CP模式:各个子事务执行后互相等待,同时提交,同时回滚,达成强一致。但事务等待过程中处于弱可用状态

3.Seata

3.1.XA模式

实现强一致性,依赖数据库机制实现回滚
yml

seata:
  data-source-proxy-mode: XA

给全局事务入口方法添加@GlobalTransactional

3.2.AT模式

实现最终一致性,依赖数据快照实现数据回滚,可能出现脏数据
yml

seata:
  data-source-proxy-mode: AT

3.3.TCC模式

实现最终一致性,不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库

Try:资源检查和预留
Confirm:业务执行和提交
Cancel:预留资源的释放

声明TCC接口

@LocalTCC
public interface AccountServiceTCC {
    /**
     * name方法对应Try
     * commitMethod方法对应Confirm默认为conmmit
     * rollbackMethod方法对应Cancel默认为rollback
     * 所有@BusinessActionContextParameter声明的参数都会放在BusinessActionContext上下文当中
     */
    @TwoPhaseBusinessAction(name = "debit", commitMethod = "commitDebit", rollbackMethod = "cancelDebit")
    void debit(
            @BusinessActionContextParameter(paramName = "userId") String userId,
            @BusinessActionContextParameter(paramName = "money") int money);

    /**
     * 二阶段confirm确认方法、可以另命名,但要保证与commitMethod一致
     *
     * @param context 上下文,可以传递try方法的参数
     * @return boolean
     */
    boolean commitDebit(BusinessActionContext context);

    /**
     * 二阶段回滚方法,要保证与rollbackMethod一致
     * 要注意空回滚的判断和幂等性的判断
     * @param context 上下文
     * @return boolean
     */
    boolean cancelDebit(BusinessActionContext context);
}

3.4.Saga模式

没有事务隔离,会有脏写

3.5.四种模式对比

XAATTCCSAGA
一致性强一致性弱一致弱一致最终一致性
隔离性完全隔离基于全局锁隔离基于预留资源隔离无隔离
代码入侵有,编写三个接口有,编写状态机和补偿业务
性能非常好非常好
场景对一致性、隔离性有高要求的业务基于关系型数据库的大多数分布式业务场景都可以对性能要求较高的事务,有非关系型数据库要参与的事务业务流程长、业务流程多,参与者包含其他公司或遗留系统服务,无法提供TCC模式要求的三个接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值