Cassandra节点间执行读写操作时使用的通信协议是什么?
Cassandra集群节点间读写请求通信规则说明
节点间读写交互使用的核心协议
Cassandra处理协调节点到副本节点的读写请求转发时,采用内部自定义异步二进制协议,通常称为Internode Protocol(节点间协议),底层基于TCP传输,默认监听7000端口,开启节点间加密时会改用7001端口。
该协议和客户端连接使用的CQL协议完全独立,除了读写请求转发外,hinted handoff、数据修复、集群流传输等所有节点间业务数据交互,都走这套协议。
协议核心规则
- 采用请求-响应模型,每条消息附带唯一标识,支持异步并发发送,不会阻塞线程,适配Cassandra高吞吐设计需求。
- 消息按功能做类型划分,写请求对应
Mutation类型消息,读请求对应ReadCommand类型消息,每种消息类型都有固定的序列化、反序列化规则,支持跨版本节点兼容,可满足集群滚动升级时的通信需求。 - 协议内置流量控制逻辑,避免节点间消息发送过多导致接收端OOM,保障集群稳定性。
对应源码参考
相关逻辑全部在Cassandra源码的org.apache.cassandra.net包下实现:
- 核心入口是
MessagingService类,负责管理节点间长连接、消息发送接收的路由,你可以重点查看send()方法的实现,这是协调节点转发读写请求到目标副本节点的核心逻辑。 - 所有节点间消息的定义、编解码规则都在
Message类中实现,不同类型的读写请求对应不同的消息子类。 - 写请求的完整转发流程可以参考
org.apache.cassandra.service.StorageProxy类的mutate()方法,这里完成副本定位后,会调用MessagingService将Mutation请求发送到对应归属节点。
注意:该协议和用于传播节点状态的Gossip协议完全隔离,端口、处理逻辑、适用场景都不重叠。
内容的提问来源于stack exchange,提问作者Rafel
相关产品推荐
相关产品推荐

