【发布时间】:2011-05-07 13:34:01
【问题描述】:
所以根据haproxy作者的说法,谁知道一两件事关于http:
Keep-alive 是为了减少 CPU 而发明的 CPU 为 100 时服务器上的使用情况 慢几倍。但没有说的是 持久连接消耗 大量内存而不可用 由除客户以外的任何人 打开它们。 2009 年的今天,CPU 是 很便宜而且内存还是有限的 到几千兆字节的架构 或价格。如果网站需要 keep-alive,有一个真正的问题。 高负载网站经常禁用 keep-alive 支持最大 同时客户端的数量。这 没有保活的真正缺点 是稍微增加延迟到 获取对象。浏览器翻倍 并发连接数 non-keepalive 网站来弥补 这个。
这符合其他人的经验吗?即没有keep-alive - 结果现在几乎不明显吗? (可能值得注意的是,使用 websockets 等 - 无论保持活动状态如何,连接都保持“打开” - 对于响应速度非常快的应用程序)。 对于远离服务器的人来说效果是否更大 - 或者在加载页面时要从同一主机加载许多工件? (我认为 CSS、图像和 JS 之类的东西越来越多地来自缓存友好的 CDN)。
想法?
(不确定这是否是 serverfault.com 的问题,但在有人告诉我将其移到那里之前,我不会交叉发布)。
【问题讨论】:
-
值得注意的是,在 haproxy 的文档中,keep-alive 的其他地方以其他更有利的方式提及。我很想听听人们的经验,尤其是在大规模托管方面。
-
“获得设计更好的网络/应用程序服务器”? :-) 具有延续(类似)连接处理的较新设计(例如 Jetty)从本质上缓解了内存/线程问题。此外,“几 GB”听起来像是 2008/2009 服务器术语 ;-)
-
对我来说这听起来像是废话。设置新套接字所涉及的额外 RTT 是一个硬物理限制,该限制通常足够长以至于人类可以检测到,并且不能在已知的物理定律范围内减少。相反,RAM 很便宜,越来越便宜,空闲套接字没有理由使用超过几 kB 的内存。
-
但有趣的是这不仅仅是理论——这是 haproxy 的作者。我听到的其他一切都是理论和假设。
标签: http webserver keep-alive haproxy