缘由: 学习 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,会导致其压缩率下降
这篇文章如同一幅色彩斑斓的画卷,每一笔都充满了独特的创意。
修辞手法运用娴熟,比喻贴切,感染力强。
文字如刀,剖开表象直抵本质。
文章的叙述风格独特,用词精准,让人回味无穷。