RocketMQ在分布式事务支持这块机制的底层原理?
参考答案:
RocketMQ在分布式事务支持方面的底层原理主要基于两阶段提交协议(2PC)和消息队列的异步解耦机制。
首先,RocketMQ采用了最终一致性的分布式事务策略,而不是强一致性的分布式事务策略(如2PC、3PC、TCC等)。这意味着RocketMQ保证的是消息最终一致性,而不是像2PC、3PC、TCC那样强一致分布式事务。
其次,RocketMQ通过异步通信和应用解耦,将非核心业务系统对核心业务系统的影响降到最低。在这种情况下,如果直接拒绝20个请求,应用在接下来的两秒就会空闲。因此,RocketMQ需要将请求突刺均摊到一段时间内,让系统负载保持在请求处理水位之内,同时尽可能地处理更多请求。
此外,RocketMQ还使用了Half Message机制。这是一种预处理消息,当Broker收到此类消息后,会存储到RMQ_SYS_TRANS_HALF_TOPIC的消息消费队列中。Broker会开启一个定时任务,消费RMQ_SYS_TRANS_HALF_TOPIC队列中的消息,每次执行任务会向消息发送者确认事务执行状态(提交、回滚、未知)。如果是未知,Broker会定时去回调并重新检查。这种机制使得消息并未真正进入Topic的queue,而是用了临时queue来放所谓的half message,等提交事务后才会真正的将half message转移到topic下的queue。
总的来说,RocketMQ在分布式事务支持方面的底层原理主要是通过两阶段提交协议和消息队列的异步解耦机制,结合Half Message机制,实现了分布式事务的最终一致性。