学习RocketMQ相关一
1、数据库和服务的 分片、分区、水平拆分、垂直拆分
2、ACID (atomicity,Consistency,Isolation,Durability)
3、数据库一致性:强一致性、弱一致性、最终一致性
4、CAP理论
C:Consistency; A:Availibity ; P : Partition tolerance 三者不可同时满足
5、Base理论
Basically Availiable
Soft State
Eventually Constitant
6、分布式事务解决方案
1)2PC\3PC
2PC: two phase commit
2PC流程图
分布式系统所有的通信均存在三种状态:成功、失败、超时
3PC流程图
2PC几乎是所有分布式事务算法的基础。
优点:已经有较为成熟的解决方案,比如:XA
缺点:XA 是一个阻塞协议。服务在投票后需要等待协调器的决定,此时服务会阻塞并锁定资源。由于阻塞机制和最差时间复杂度高,所以难用于高并发及子事务生命周期较长(long-run transactions)的分布式系统
2)SAGA算法
saga理论基础在于假设所有时间按照顺序执行,总能达到系统的最终一致性,因此saga需要服务分别定义提交接口以及补偿接口,当某个事务失败时,调用其他的分支的补偿接口来进行回滚,saga的具体实现分为两种:Choreography和Orchestration
1' Choreography,如下图所示:
2' Orchestration ,存在中心节点模式,如下图:
3)TCC (try-Confirm-Cancel)
TCC 是一种补偿性事务,只要分为Try:检查、保留资源,Confirm:执行事务,Cancel:释放资源,流程图如下:
4)事务消息
1'传统事务消息
依赖于AMOP协议来确保消息发送成功
2' RocketMQ 事务消息
流程图如下:
1>事务发起方发送prepare消息到MQ
2>在发送prepare成功后执行本地消息
3>根据本地事务的执行结果返回commit或者是rollback
4>如果是rollback,MQ将删除prepare消息不进行下发。如果是commit,MQ将会把这个消息发送给customer客户端
5>如果执行本地事务的过程中,执行端挂掉或者超时,MQ将会不停的询问其同组的其他producer来获取状态
6>Customer端的消费机制有MQ保证
具体实现上rocketMQ使用了Half Topic 和Operation Topic 两个内部队列来存储书屋消息推进状态
half Topic中存放的事prepare消息,而Operation Topic 中存放的是prepare消息对应的commit/rollback消息 ----