Web 服务器可以处理多少个套接字连接?

2024-04-24

假设我要获得共享、虚拟或专用托管,我在某处读到服务器/计算机一次只能处理 64,000 个 TCP 连接,这是真的吗?无论带宽如何,任何类型的托管可以处理多少个?我假设 HTTP 通过 TCP 工作。

这是否意味着只有 64,000 个用户可以连接到该网站,如果我想提供更多服务,我就必须迁移到网络农场?


简而言之: 您应该能够实现数百万的数量级同时活动的 TCP 连接和扩展的 HTTP 请求。这告诉您使用正确的平台和正确的配置可以获得的最大性能。

今天,我担心带有 ASP.NET 的 IIS 是否支持 100 个并发连接(查看我的更新,预计在较旧的 ASP.Net Mono 版本上每秒大约有 10k 响应)。当我看到这个问题/答案时,我忍不住回答自己,这里问题的许多答案都是完全错误的。

最佳案例

这个问题的答案必须只涉及最简单的服务器配置,以与下游可能的无数变量和配置解耦。

因此,请考虑以下场景作为我的答案:

  1. TCP 会话上没有流量,除了保持活动的数据包(否则您显然需要相应数量的网络带宽和其他计算机资源)
  2. 软件设计为使用异步套接字和编程,而不是池中每个请求的硬件线程。 (即 IIS、Node.js、Nginx...带有异步设计的应用程序软件的网络服务器 [但不是 Apache])
  3. 良好的性能/美元CPU/内存。今天,随意假设 i7(4 核)和 8GB RAM。
  4. 一个好的防火墙/路由器相匹配。
  5. 没有虚拟限制/调节器 - 即。 Linux somaxconn、IIS web.config...
  6. 不依赖其他较慢的硬件 - 不从硬盘读取,因为它将是最低的共同点和瓶颈,而不是网络 IO。

详细解答

相对于异步 IO 实现,同步线程绑定设计往往性能最差。

WhatsApp 可以在一台 Unix 风格的操作系统机器上处理百万流量 -https://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/ https://web.archive.org/web/20120108184257/https://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/.

最后,这个,http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.html http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.html,深入探讨了如何实现 1000 万的大量细节。服务器通常具有硬件 TCP 卸载引擎,专门为此特定角色设计的 ASIC 比通用 CPU 更高效。

良好的软件设计选择

异步 IO 设计因操作系统和编程平台而异。 Node.js 的设计是异步心里。你至少应该使用 Promises,当 ECMAScript 7 出现时,async/await。 C#/.Net 已经像 Node.js 一样提供了完整的异步支持。无论什么操作系统和平台,异步都应该表现得很好。无论您选择哪种语言,请查找关键字“异步”,大多数现代语言都会提供一些支持,即使它是某种附加组件。

去网络农场?

无论您的特定情况有什么限制,网络农场都是一种很好的扩展解决方案。有许多架构可以实现这一点。一种是使用负载平衡器(托管提供商可以提供这些,但即使这些也有限制,以及带宽上限),但我不喜欢这个选项。对于具有长时间运行连接的单页应用程序,我更喜欢拥有一个开放的服务器列表,客户端应用程序将在启动时随机选择这些服务器,并在应用程序的生命周期内重复使用。这消除了单点故障(负载均衡器),并支持通过多个数据中心进行扩展,从而获得更多带宽。

打破神话 - 64K 端口

对于有关“64,000”的问题部分,这是一个误解。一台服务器可以连接超过 65535 个客户端。看https://networkengineering.stackexchange.com/questions/48283/is-a-tcp-server-limited-to-65535-clients/48284 https://networkengineering.stackexchange.com/questions/48283/is-a-tcp-server-limited-to-65535-clients/48284

顺便说一句,Windows 上的 Http.sys 允许多个应用程序在 HTTP URL 架构下共享同一服务器端口。它们各自注册一个单独的域绑定,但最终有一个服务器应用程序将请求代理到正确的应用程序。

更新2019-05-30

以下是最快的 HTTP 库的最新比较 -

  • 测试日期:2018-06-06
  • 使用的硬件:Dell R440 Xeon Gold + 10 GbE
  • 领导者每秒有大约 700 万个纯文本响应(响应而不是连接)
  • 第二个 Fasthttp for golang 通告 1.5M 并发连接 - 请参阅https://github.com/valyala/fasthttp https://github.com/valyala/fasthttp
  • 领先的语言是 Rust、Go、C++、Java、C,甚至 C# 排名第 11 位(每秒 6.9M)。 Scala 和 Clojure 排名更靠后。 Python 以每秒 270 万的速度排名第 29 位。
  • 在列表的底部,我注意到 laravel 和 cakephp、rails、aspnet-mono-ngx、symfony、zend。均低于每秒 10k。请注意,大多数这些框架都是为动态页面构建的,并且相当古老,可能有较新的变体在列表中排名靠前。
  • 请记住,这是 HTTP 明文,不适用于 Websocket 专业:许多人来到这里可能会对 Websocket 的并发连接感兴趣。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web 服务器可以处理多少个套接字连接? 的相关文章

随机推荐