0

要支持一个消费者组内的 50k 个消费者并行消费和处理消息,Redis 的容量要求是多少?正在寻找针对相同场景的基础架构测试,并且需要了解注意事项。

4

1 回答 1

2

免责声明:我在一家使用 Redis 规模较大的公司工作(可能消费者比您的案例少,但我们的消费者非常活跃),但是我不是来自基础架构团队,但我参与了一些 DevOps 任务。

我认为您不会找到确切的数字,因此我将尝试分享一些提示和技巧来帮助您:

  • 请务必阅读整个Redis 管理页面。那里有很多有用的信息。我将从那里重点介绍一些提示:

    • 假设您将设置一个 Linux 主机,编辑/etc/sysctl.conf并设置一个高net.core.somaxconnRabbitMQ建议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以使其在重新启动后永久生效。
  • 根据我的经验,Redis 不是很消耗资源,所以我相信你不会遇到 CPU 问题。内存与您打算在其中存储多少数据直接相关。

  • 如果您设置具有多个核心的服务器,请考虑使用多个 Redis 服务器。Redis (大部分)是单线程的,如果您在多核环境中使用单个实例,则不会使用所有 CPU 资源。

Redis 服务器还会在启动时警告错误/有风险的配置(对于旧图像感到抱歉): Redis 3.2.0 启动警告

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_ratio50 和 1 GB 的 RAM 意味着内核将允许在请求失败之前分配多达 1.5 GB 的内存,加上交换。
  • 2(二):内核相当于“所有赌注都关闭”,设置为 2 告诉内核始终向应用程序的内存请求返回成功。这绝对和听起来一样奇怪和可怕。
于 2020-04-19T00:03:28.640 回答