缘由: 学习 Redis
时认为奇怪的数字&HashSlot
引出
浅析
Redis Slot
采用的是 CRC16
算法,输出集合有 2^16-1=65535
种结果。而 16384 = 2^14
,为什么要少两位?
相关讨论: https://github.com/redis/redis/issues/2576
1 缩减通讯消息体
https://github.com/redis/redis/blob/a642947e04168b40aea6cec666927a9e653035e6/src/cluster.h#L120
Redis Cluster
定义的 clusterNode
需要携带自己的 slots
以及一定数量其他节点的信息(包括 slots
)
solts
相当于一个 BitMap
, 16384b
= 2KB
, 65535b
= 8KB
Redis Cluster
需要发送心跳包通讯,在节点数量较大时,过大的消息体会导致节点通讯较慢且浪费带宽
2 Master不应当过多的前提
At the same time it is unlikely that Redis Cluster would scale to more than 1000 mater nodes because of other design tradeoffs.
作者认为,Redis Cluster
的 Master Node
架构设计时不应当超过1000个,否则节点间的通信将占用大量的网络IO,导致整体性能反而下降
在这一前提下,过多的插槽是没有必要的。反而如果大量的插槽占据 slots
,会导致其压缩率下降