要支持一个消费者组内的 50k 个消费者并行消费和处理消息,Redis 的容量要求是多少?正在寻找针对相同场景的基础架构测试,并且需要了解注意事项。
问问题
406 次
1 回答
2
免责声明:我在一家使用 Redis 规模较大的公司工作(可能消费者比您的案例少,但我们的消费者非常活跃),但是我不是来自基础架构团队,但我参与了一些 DevOps 任务。
我认为您不会找到确切的数字,因此我将尝试分享一些提示和技巧来帮助您:
请务必阅读整个Redis 管理页面。那里有很多有用的信息。我将从那里重点介绍一些提示:
- 假设您将设置一个 Linux 主机,编辑
/etc/sysctl.conf
并设置一个高net.core.somaxconn
(RabbitMQ建议4096
)。检查redis.conftcp-backlog
中的配置文档以获取有关此的说明。 - 假设您将设置 Linux 主机,编辑
/etc/sysctl.conf
并设置vm.overcommit_memory = 1
. 请阅读以下内容以获取详细说明。 - 假设您将设置 Linux 主机,编辑
/etc/sysctl.conf
并设置fs.file-max
. 这对您的用例非常重要。打开文件句柄/文件描述符限制本质上是 SO 可以处理的文件描述符的最大数量(每个客户端代表一个文件描述符)。请查看有关此的 Redis 文档。RabbitMQ 文档也提供了一些关于它的有用信息。 - 如果您编辑该
/etc/sysctl.conf
文件,请运行sysctl -p
以重新加载它。 - “确保禁用 Linux 内核特性透明大页,它会对内存使用和延迟产生负面影响。这是通过以下命令完成的:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
。” 也添加此命令/etc/rc.local
以使其在重新启动后永久生效。
- 假设您将设置一个 Linux 主机,编辑
根据我的经验,Redis 不是很消耗资源,所以我相信你不会遇到 CPU 问题。内存与您打算在其中存储多少数据直接相关。
- 如果您设置具有多个核心的服务器,请考虑使用多个 Redis 服务器。Redis (大部分)是单线程的,如果您在多核环境中使用单个实例,则不会使用所有 CPU 资源。
Redis 服务器还会在启动时警告错误/有风险的配置(对于旧图像感到抱歉):
Overcommit内存说明(vm.overcommit_memory
)
将 overcommit_memory 设置为 1 表示 Linux 放松并以更乐观的分配方式执行分叉,这确实是您想要的 Redis [来自Redis 常见问题解答]
有三种可能的设置vm.overcommit_memory
。
- 0(零):检查是否有足够的内存可用,如果有,则允许分配。如果内存不足,则拒绝该请求并向应用程序返回错误。
- 1(一):允许分配超过物理 RAM 和交换的内存,如
vm.overcommit_ratio
. 该vm.overcommit_ratio
参数是在决定内核可以过量使用多少时添加到 RAM 量的百分比。例如,vm.overcommit_ratio
50 和 1 GB 的 RAM 意味着内核将允许在请求失败之前分配多达 1.5 GB 的内存,加上交换。 - 2(二):内核相当于“所有赌注都关闭”,设置为 2 告诉内核始终向应用程序的内存请求返回成功。这绝对和听起来一样奇怪和可怕。
于 2020-04-19T00:03:28.640 回答