CAP和BASE是分布式必备理论基础
CAP理论
一致性(C):写操作之后进行读操作无论在哪个节点都需要返回写操作的值
可用性(A):非故障的节点在合理的时间内返回合理的响应
分区容错性(P):当出现网络分区后,系统能够继续工作,如集群中有台机器出现了问题,但这个集群仍然可以正常工作
BASE理论
BASE:(Basically Available) 基本可用,(Soft state)软状态,(Eventually consistent)最终一致性三个短语的缩写。
BASE理论是CAP中一致性和可用性权衡的结果,其来源于对大规模互联网分布式实践的总结,是基于CAP理论逐步演化而来的。核心思想:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性
2PC
优点:尽量保证了数据的一致,实现成本较低,在各大主流数据库都有实现
缺点:单点问题:事务管理器在整个流程中扮演的角色很关键, 如其宕机,如在第一阶段已经完成,在第二阶段正准备提交的时候事务管理器宕机,资源管理器就会一直阻塞,导致数据库无法使用
同步阻塞:在准备就绪之后,资源管理器中的资源一直处于阻塞,直到提交完成,释放资源
数据不一致:两阶段提交协议虽然为分布式数据强一致性所设计,但仍然存在数据不一致性的可能,如在第二阶段中,假设协调者发出了事务commit通知,但因网络问题该通知仅被一部分参与者收到并执行了commit操作,其余的参与者则因没有收到通知一直处于阻塞状态,产生了数据不一致性
3PC
三段提交是对两段提交的一种升级优化,3PC在2PC的第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前,各参与者节点的状态都一致。同时在协调者和参与者中都引入超时机制,当参与者未收到协调者的commit请求后,会对本地事务进行abort,不会一直阻塞等待,解决了2PC的单点故障问题,但仍未从根本上解决数据一致性的问题
CanCommit:协调者向所有参与者发送CanCommit命令,询问是否可以执行事务提交操作。如果全部响应YES则进入下一个阶段
PreCommit:协调者向所有参与者发送PreCommit命令,询问是否可以进行事务的预提交操作,参与者收到PreCommit请求后,如成功的执行了事务操作则返回YES响应,进入最终commit阶段。一单参与者中有向协调者发送了No响应,或因网络造成超时,协调者没有收到参与者的响应则协调者向所有参与者发送abort请求,参与者收到abort命令执行事务中断
DoCommit:在前两个阶段中所有参与者的响应均是YES后,协调者向参与者发送DoCommit命令正式提交事物,如协调者没有接收到参与者发送的ACK响应,则会向所有参与者发送abort请求命令执行事务中断
优点:引入超时机制,解决了事务管理器突然宕机导致资源一直处理阻塞的问题
多了一次询问阶段,防止个别参与者不正常的情况下,其他参与者都执行了事务,锁定资源
缺点:用超时机制解决同步阻塞问题,但却多了一次网络通信,性能上反而变的更差
没有解决数据不一致的问题
Seata
Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata提供了AT,TCC,SAGA,XA事务模式,一站式的分布式解决方案
两阶段提交模式
AT模式:提供无侵入自动补偿的事务模式:只需要加上对应的注解就可以开启全局事务
XA模式:支持已实现XA接口的数据库的XA模式:需要数据库实现对应的XA模式的接口,一般mysql,oracle都实现了
TCC模式:在应用层面的2PC,需要编写业务逻辑实现
SAGA模式:为长事务提供有效的解决方案
AT模式两阶段过程
一阶段:开启全局事务,注册分支事务,存储全局锁,业务数据和回滚日志(undoLog)进行提交
二阶段:事务协调者根据所有分支的情况,决定本次全局事务是commit还是Rollback(二阶段是完全异步删除undolog日志,全局事务,分支事务,存储的全局锁)