吞吐量;针对 C10K 类设计的容量规划帮助

吞吐量;针对 C10K 类设计的容量规划帮助

我正在设计一种客户端连接并保持连接的网络服务 - 该模型与 IRC 相差不大,只是 s2s 连接。

我需要一些帮助来了解如何进行容量规划,特别是处理来自/发往客户端的消息相关的系统资源成本。

有一篇文章尝试让 100 万个客户端连接到同一台服务器 [1]。当然,测试中大多数客户端都处于完全空闲状态。如果客户端每 5 秒左右发送一条消息,系统肯定会瘫痪。

但是...你怎么才能少挥手呢?你知道吗,措施这样的临界点?

我们讨论的是客户端通过 TCP 套接字发送到内核并由应用程序读取的消息。数据在内存中从一个缓冲区移动到另一个缓冲区。我需要考虑内存吞吐量(“5 GT/s” [2] 等)吗?

我确信我有能力测量 TCP/IP 缓冲区、预期带宽和处理消息所需的 CPU 资源所需的基本内存需求。我对所谓的“吞吐量”有点不太清楚。

帮助!

另外,真的有人这样做吗?还是大多数人只是摆摆手,看看现实世界能提供什么,然后做出适当的反应?

[1]http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3/

[2]http://en.wikipedia.org/wiki/GT/s

答案1

我们讨论的是客户端通过 TCP 套接字发送到内核并由应用程序读取的消息。数据在内存中从一个缓冲区移动到另一个缓冲区。

不,不是。只要你操作正确就不会。对于 Linux,你应该查找 sendfile(2) 和 splice(2) 系统调用。其他内核可能也有类似的零拷贝功能,但据我所知,它还没有标准化。

在实践中,最好将程序编写得尽可能简单,测量瓶颈在哪里,改进,测量,改进......预测瓶颈很难,过早的优化是万恶之源(正如 Knuth 所说)。

相关内容