如何处理 1M websocket 连接(Nginx / HAProxy / Amazon / Google)

如何处理 1M websocket 连接(Nginx / HAProxy / Amazon / Google)

什么nginx或者哈普罗西针对目标建议设置10万并发 websocket 连接?我认为,单个 nginx 无法处理如此多的流量和并发连接。应该如何分割到 nginx/haproxy 的流量(DNS 级别或任何可用的 Amazon/Google 选项)?单个 nginx 能够处理多少个并发 websocket?

尝试从谷歌搜索和 SO 帖子收集相关信息。

答案1

有人在 haproxy 负载平衡器后面运行聊天服务器,负载甚至更高。私人电子邮件中向我报告的最高负载(附有统计页面副本)约为每个进程 300k 个连接(因此有 600k 个套接字)。请注意,在 Linux 下,默认情况下进程限制为 1M 文件描述符(因此有 500k 个端到端连接),但可以在 /proc 中进行调整。

在这种负载下,最重要的考虑因素是您需要的 RAM 数量。内核端套接字缓冲区始终需要每个方向每侧至少 4kB,因此每个端到端连接至少需要 16kB。HAProxy 1.5 及更低版本每个连接将有两个缓冲区(例如:4kB 缓冲区足以用于 websocket)。1.6 可以在没有这些缓冲区的情况下运行,并且只为有数据的罕见连接分配它们。因此,每百万个连接至少需要 16 GB 的 RAM,旧版本则需要大约 24 GB。可能值得将其分散到 SMP 机器上的多个进程中以减少延迟。请记住,为了简单地建立 1M 个连接,在 100k conns/s 的速度下可能需要 10 秒。所有这些连接都会产生一些工作,每个工作需要几个字节,处理 1M 个活动连接肯定会产生重要的工作并给系统带来高负载。

相关内容