【Redis系列】为啥Redis Cluster设计成16384个槽?

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 这意味着它们包含原始形式的节点的插槽配置,该节点使用2K的空间和16384个slot,但使用65535的插槽会使用令人望而却步的 8K 的空间。所以16384是在正确的范围内,以确保每个 master 有足够的插槽,最多 1000 个 maters,但这个数量足够小,可以轻松地将插槽配置作为原始位图传播。在小集群中,位图将难以压缩,因为当 N 小时,位图将设置的槽位/N 位占很大比例的位。集群节点越多,心跳包的消息体内携带的数据越多。集群规模较小的场景下,每个分片负责大量的slot,很难压缩。

目录

 

问题描述:

原因:

一、消息大小考虑

为什么要传全量的slot状态?

二、集群规模设计考虑

作者原版回答如下:


问题描述:

对于客户端请求的key,redis是根据公式 HASH_SLOT=CRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作。

image.gif编辑

原因:

一、消息大小考虑

crc16()一共可以有:

2^16 -1=65535
image.gif

不同的余数,代表bitmap 有 65535 bit。所以bitmap的大小可以计算为

65535 / 8 (8bit/byte)/1024(1k)=7.99 Kbytes
image.gif

尽管crc16能得到65535个值,但redis选择16384个slot,是因为16384的消息占用了2k,而65535则需要8k

正常的心跳包携带节点的完整配置,可以以幂等方式替换旧配置以更新旧配置。这意味着它们包含原始形式的节点的插槽配置,该节点使用2K的空间和16384个slot,但使用65535的插槽会使用令人望而却步的 8K 的空间。

如果槽位为65536,发送心跳信息的消息头达8k,发送的心跳包过于庞大。

65k = 8 * 8 (8 bit/byte) * 1024(1k) = 8K bitmap size
image.gif

为什么要传全量的slot状态?

因为分布式场景,基于状态的设计更合理,状态的传播具有幂等性

二、集群规模设计考虑

同时,由于其他设计权衡,Redis Cluster 不太可能扩展到超过 1000 个主节点。

集群节点越多,心跳包的消息体内携带的数据越多。如果节点过1000个,也会导致网络拥堵。因此redis作者,不建议redis cluster节点数量超过1000个

集群设计最多支持1000个分片,16384是相对比较好的选择,需要保证在最大集群规模下,slot均匀分布场景下,每个分片平均分到的slot不至于太小

所以16384是在正确的范围内,以确保每个 master 有足够的插槽,最多 1000 个 maters,但这个数量足够小,可以轻松地将插槽配置作为原始位图传播。

在小集群中,位图将难以压缩,因为当 N 小时,位图将设置的槽位/N 位占很大比例的位。

为什么不考虑压缩?

集群规模较小的场景下,每个分片负责大量的slot,很难压缩。

简而言之,它是消息大小和主机持有的平均slot数之间权衡的结果。

 

作者原版回答如下:

The reason is:

    • Normal heartbeat packets carry the full configuration of a node, that can be replaced in an idempotent way with the old in order to update an old config. This means they contain the slots configuration for a node, in raw form, that uses 2k of space with16k slots, but would use a prohibitive 8k of space using 65k slots.
    • At the same time it is unlikely that Redis Cluster would scale to more than 1000 mater nodes because of other design tradeoffs.

    So 16k was in the right range to ensure enough slots per master with a max of 1000 maters, but a small enough number to propagate the slot configuration as a raw bitmap easily. Note that in small clusters the bitmap would be hard to compress because when N is small the bitmap would have slots/N bits set that is a large percentage of bits set.

    ————————————————


    学习链接:https://blog.csdn.net/qq_33589510/article/details/118676305

    相关实践学习
    基于Redis实现在线游戏积分排行榜
    本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
    云数据库 Redis 版使用教程
    云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
    相关文章
    |
    4月前
    |
    NoSQL Java Redis
    Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
    Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
    53 0
    |
    4月前
    |
    存储 NoSQL Redis
    docker搭建Redis Cluster集群环境
    docker搭建Redis Cluster集群环境
    94 1
    |
    19天前
    |
    存储 缓存 运维
    软件体系结构 - 缓存技术(5)Redis Cluster
    【4月更文挑战第20天】软件体系结构 - 缓存技术(5)Redis Cluster
    140 10
    |
    1月前
    |
    运维 NoSQL 算法
    Java开发-深入理解Redis Cluster的工作原理
    综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
    25 0
    |
    4月前
    |
    存储 NoSQL 网络协议
    Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵
    Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵
    24 0
    |
    4月前
    |
    NoSQL Linux Redis
    Redis 6.X Cluster 集群搭建
    Redis 6.X Cluster 集群搭建
    38 0
    |
    4月前
    |
    运维 NoSQL 算法
    Redis cluster集群原理与配置
    Redis cluster集群原理与配置
    44 0
    |
    4月前
    |
    存储 NoSQL Redis
    redis集群cluster
    redis集群cluster
    34 0
    |
    4月前
    |
    存储 NoSQL Redis
    docker compose搭建Redis Cluster集群环境
    docker compose搭建Redis Cluster集群环境
    113 0
    |
    4月前
    |
    NoSQL 网络安全 Redis
    Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署
    Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署
    54 0