业来主流的分布式事务的解决方案主要归位两大类:强一致性分布式事务和最终一致性分布式事务,本文不对强一致性分布式事务做过多描述,主要针对最终一致性方案解析。
根据笔者的工作经验来看,最终一致性方案适用用大部分互联网场景主要原因如下:
- 由于微服务间无法直接进行数据访问,微服务间互相调用通常通过RPC(Dubbo)或Http API(Spring Cloud)进行,所以已经无法使用TM统一管理微服务的RM。
- 不同的微服务使用的数据源类型可能完全不同,如果微服务使用了NoSQL之类不支持事务的数据库,则强一致性事务根本无从谈起。
- 即使微服务使用的数据源都支持事务,那么如果使用一个大事务将许多微服务的事务管理起来,这个大事务维持的时间,将比本地事务长几个数量级。如此长时间的事务及跨服务的事务,将为产生很多锁及数据不可用,严重影响系统性能。
既然无法满足传统的ACID事务,在微服务下的事务管理必然要遵循新的法则--BASE理论。
BASE理论由eBay的架构师Dan Pritchett提出,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性,应用应该可以采用合适的方式达到最终一致性。BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。
- 基本可用:指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
- 软状态:允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。
- 最终一致性:最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
BASE中的最终一致性是对于微服务下的事务管理的根本要求,即虽然基于微服务的事务管理无