2009-11-07 57 views
5

有可用内存,带宽,CPU,当然还有网络连接限制。但这些通常可以垂直缩放。 Linux上还有其他限制因素吗?没有内核修改它们能被克服吗?我怀疑,如果没有别的,限制因素将成为千兆以太网。但对于高效的协议,它可能需要50K并发连接来弥补这一点。在我能得到那么高的价值之前,别的东西会有什么破裂?Linux机器可以连接多少个open udp或tcp/ip连接?

我在想我想要一个软件udp和/或tcp/ip负载平衡器。不幸的是,除了http协议之外,似乎没有像开源社区中那样的东西存在。但是使用epoll编写一个不会超出我的能力。我期望它会经过很多调整来扩大规模,但这是可以逐步完成的工作,我会成为一个更好的程序员。

回答

1

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

4

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

根据您的目标要求,这可能是或不是一个问题:如果你打算支持主要弹性业务(业务不从抖动延迟遭受很大),那么它的确定。如果无弹性的流量比例很高(例如交互式语音/视频),那么这可能是更大的问题。

当然你也可以随时在这种情况下;-)工程师

+0

您提高对时延和时延抖动和无弹性交通效果好点 – Eloff 2009-11-07 23:57:52

+4

才肯对我的后期护理进行投票解释的人?没有评论的驾驶式降低投票只是简单的粗鲁。 – jldupont 2009-11-08 00:10:54

+0

对于TCP,另一个问题是传入数据量。传入的数据占用内核缓冲区,直到它由用户进程处理。 如果您的应用程序没有“足够快”地处理内存,那么内核可能会用尽缓冲区和恐慌。 这可以通过在每个套接字上设置一个小Rx缓冲区大小来改善。 – 2009-11-09 12:56:47

2

如果您打算将持有每个客户端一个插座开放的服务器,则需要仔细设计,以便它可以有效地检查来自10k +客户端的传入数据。这就是所谓的10k问题。

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

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

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

0

尝试HAProxy的软件负载平衡器:(即专门通信的种类,你会使用UDP)

http://haproxy.1wt.eu/