由于前面几篇文章涉及的问题分布式事务的思考
在我们微服务的场景下 各种本地事务都没有办法控制的很好。
A服务调用B服务 当B服务成功提交之后 A发生了异常 这种情况下要如何处理呢???
参考了上述文章后 我们不再一个劲的追求强一致性 而转而追求最终一致性
这也是从传统ACID转变为BASE 即所谓的酸碱中和【在英文中base有碱的意思】
A: Atomicity 原子性 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节
C: Consistency 一致性 事务开始之前和事务结束以后,数据库的完整性没有被破坏
I: Isolation 隔离性 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)
D: Durability 持久性 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
BA:Basically Available,基本可用性
S: Soft State 软状态 接受状态在一段时间内部同步
E:Eventually Consistent 最终一致性 在一定的时间窗口中,最终数据达成一致即可
软状态是实现 BASE 的方法,基本可用域最终一致性是必须到达的目标。以 BASE 的思想由于不保证强一致性,所有接受系统在一定时间内数据存在不一致,不过在处理请求的过程中,需要记录知道每次请求的状态,以后出现问题的时候,回滚到中间任何临时状态,达到最终一致性
我们的思路是基于dubbo完成业务失败后的补偿 那么需要考虑如下几个问题