一、通信开销影响因素
节点数量
每秒从本地实例列表选择5个节点,在这5个节点中选择最久没有通信的实例,向该实例发送PING消息。
即:定时发送PING消息的节点数量=5。
避免一些实例节点一直选不到,会有一个定时任务扫描兜底措施。
集群内部每秒10次的固定频率扫描本地缓存节点列表,也就是每100ms一次。
如果节点:PONG更新时间node.pong_received>(cluster-node-timeout/2)立即向该节点发送PING消息,假设该数量为N。
即:兜底发送的节点数量=10 * N。
通过调大cluster_node_timeout可以减少通信的节点数量,例如:从15秒调整到30秒。
但是,cluster_node_timeout过大会影响故障发现的时间和新节点发现的时间。
消息大小
一次通信包含消息头和消息体。
消息头:PING消息头相对固定,主要占用的发送节点负责的槽位(myslots[CLUSTER_SLOTS/8])占用2KB。
消息体:会携带一定数量的其他节点信息,默认包含集群总节点数的1/10,最少包含集群的3个节点,最多包含集群总节点数-2。
消息体clusterMsgDataGossip各个字段字节大小,共计104个字节。
属性 |
大小 |
char nodename[CLUSTER_NAMELEN] |
40字节 |
uint32_t ping_sent |