linux机器有多少个打开的udp或tcp / ip连接?

时间:2009-11-07 22:38:22

标签: linux udp scalability tcp c10k

可用内存,带宽,CPU,当然还有网络连接都有限制。但这些通常可以垂直扩展。 linux上还有其他限制因素吗?没有内核修改可以克服它们吗?我怀疑,如果没有别的,限制因素将成为千兆以太网。但是对于有效的协议,它可能需要50K并发连接来淹没它。在我能够达到那个高点之前还有其他什么东西会破裂吗?

我想我想要一个软件udp和/或tcp / ip负载均衡器。不幸的是,除了http协议之外,开源社区似乎并不存在类似的东西。但是使用epoll写一个并不是我的能力。我希望它会经过大量的调整以使其扩展,但这是可以逐步完成的工作,而且我会成为更好的程序员。

4 个答案:

答案 0 :(得分:4)

您可能遇到一些困难的一个参数是抖动。你是否扩展了每个盒子的连接数量,你无疑会对所述系统的所有资源造成压力。因此,转发功能的抖动特性可能会受到影响。

根据您的目标要求,这可能是一个问题:如果您计划主要支持弹性流量(流量不会受到抖动和<强>延迟)然后就可以了。如果非弹性流量的比例很高(例如交互式语音/视频),那么这可能更成问题。

当然,在这种情况下你总是可以过度工程; - )

答案 1 :(得分:2)

如果您打算让服务器为每个客户端打开一个套接字,那么需要仔细设计它,以便它可以有效地检查来自10k +客户端的传入数据。这被称为10k问题。

现代Linux内核可以处理超过10k的连接,通常至少100k。您可能需要进行一些调整,特别是许多TCP超时(如果使用TCP),以避免在许多客户端频繁连接和断开连接时关闭/过时使用大量资源的套接字。

如果您正在使用netfilter的conntrack模块,那么可能还需要调整以跟踪那么多连接(这与tcp / udp套接字无关)。

有许多负载均衡技术,最着名的是LVS(Linux虚拟服务器),它可以作为真实服务器集群的前端。我不知道它可以处理多少连接,但我认为我们在生产中使用它至少有50k。

答案 2 :(得分:1)

对于您的问题,您只受硬件限制的限制。这是linux系统的设计理念。你准确地描述了你的限制因素。

答案 3 :(得分:0)

试用HAProxy软件负载均衡器:

http://haproxy.1wt.eu/