源码分析 RocketMQ DLedger(多副本) 之日志追加流程
上一篇我们详细分析了源码分析 RocketMQ DLedger 多副本之 Leader 选主,本文将详细分析日志复制的实现。 根据 raft 协议可知,当整个集群完成 Leader 选主后,集群中的主节点就可以接受客户端的请求,而集群中的从节点只负责从主节点同步数据,而不会处理读写请求,与M-S结构的读写分离有着巨大的区别。 有了前篇文章的基础,本文将直接从 Leader 处理客户端请求入口开始,其入口为:DLedgerServer 的 handleAppend 方法开始讲起。 1、日志复制基本流程 在正式分析 RocketMQ DLedger 多副本复制之前,我们首先来了解客户端发送日志的请求协议字段,其类图如下所示: 我们先一一介绍各个字段的含义: String group 该集群所属组名。 String remoteId 请求目的节点ID。 String localId 节点ID。 int code 请求响应字段,表示返回响应码。 String leaderId = null 集群中的Leader Id。 long term 集群当前的选举轮次。 byte[] body 待发送的...