快速链接最新消息描述 主要特性 支持的平台 性能 可靠性 安全性 下载 文档 在线演示 他们在用! 商业支持 附加功能 其他解决方案 联系方式 外部链接 邮件列表归档 Willy TARREAU |
2009/08/23 - 1.4-dev2 版本快速测试:突破 10 万 HTTP 请求/秒大关引言
第一个测试只接受新连接,读取请求,解析它,检查一个 ACL,发送一个重定向并关闭连接。在纯 TCP 模式下,甚至可以测得每秒 132000 个连接的会话速率,但这并不是很有用。 第二个测试则是将请求转发到一个真实的服务器,并获取一个 64 字节的对象。 这些改进得益于能够在会话的关键阶段告知系统合并一些精心选择的 TCP 数据包。这导致了每个会话的数据包数量减少,从而节省了带宽和 CPU 周期。现在最小的会话在每一侧都减少到了 5-6 个数据包,而最初是 9 个。 2009/04/18 - 使用 Myricom 的 10GbE 网卡 (Myri-10G PCI-Express) 对 HAProxy 进行新的 10 Gbps 基准测试引言
实验室设置
硬件/软件配置
测试非常简单。一个 HTTP 请求生成器运行在更快的 Phenom (amd2) 上,因为这个软件是整个测试链中最耗费资源的。HAProxy 运行在 Core2Duo (c2d) 上。Web 服务器运行在较小的 Athlon (amd1) 上。连接是点对点的,因为我仍然没有 10GbE 交换机(接受捐赠 ;-))。HAProxy 配置为在响应路径中使用内核 splicing。 listen http-splice bind :8000 option splice-response server srv1 1.0.0.2:80 这里是一张机器连接在一起的照片。 测试方法
单进程模式、8kB 缓冲区、TCP splicing、启用 LRO、巨型帧测试
![]()
![]() 自从引入 LRO 和 TCP splicing 以来,CPU 使用率大幅下降。转发 9.95 Gbps 的以太网流量消耗的 CPU 不到 20%。 root@c2d:tmp# vmstat 1 procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 1 0 0 0 1951376 3820 19868 0 0 0 0 25729 23965 1 15 84 0 0 0 0 1950652 3820 19868 0 0 0 0 25744 23818 3 17 80 0 0 0 0 1950632 3820 19868 0 0 0 0 25720 24652 1 18 80 0 0 0 0 1949512 3820 19868 0 0 0 0 25531 24047 3 16 81 1 0 0 0 1948484 3820 19868 0 0 0 0 25911 22706 2 19 79 0 0 0 0 1949388 3820 19868 0 0 0 0 26189 23757 3 15 82 1 0 0 0 1948460 3820 19868 0 0 0 0 25811 23766 1 20 79 单进程模式、8kB 缓冲区、TCP splicing、启用 LRO、标准帧测试
![]() 关于 CPU 使用率,在满负荷(9.2 Gbps,1500 字节帧)下,CPU 使用率极低:用户态 2%,系统态 15%。这意味着 Myri-10G 网卡的 LRO 功能在为系统卸载方面效率极高。 root@c2d:tmp# vmstat 1 procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 0 0 0 0 1811764 3820 19844 0 0 0 0 26289 19089 2 14 84 0 0 0 0 1787924 3820 19844 0 0 0 0 26268 19578 1 13 86 1 0 0 0 1772704 3820 19844 0 0 0 0 26288 18517 3 13 84 0 0 0 0 1774260 3820 19848 0 0 0 0 26284 19522 2 15 83 1 0 0 0 1766144 3820 19848 0 0 0 0 26260 19042 3 15 83 1 0 0 0 1734412 3820 19848 0 0 0 0 26270 18603 4 15 81 0 0 0 0 1719864 3820 19848 0 0 0 0 26294 18886 1 14 85 会话建立/拆除速率
acl blacklist src 1.0.0.0/8 tcp-request content reject if blacklist请注意,此过滤器在 HTTP 请求解析之前应用。嗯,结果超出了我的预期,我不得不使用两台 AMD 系统来攻击 HAProxy 以获得分数,但我无法使 CPU 饱和,其使用率仍低于 75%。会话速率突破了每秒 10 万次的象征性大关,达到了每秒 105931 个会话!
![]() HTTP 会话速率
许多其他人对客户端的 HTTP 会话速率感兴趣。与之前的测试不同的是,我们必须在做出决定之前完全解析 HTTP 请求。在某些情况下,客户端请求在被解析后可能不会被路由到服务器。当请求无效、被 ACL 阻止或重定向到外部服务器时,就会发生这种情况。因此,为了使测试最具真实使用场景的代表性,配置被设置为当 ACL 检测到本地服务器因维护而关闭时执行重定向。 acl service_down nbsrv -lt 2 redirect prefix http://backup.site if service_down会话速率仍然非常高:每秒 82702 个 HTTP 请求,同时还剩余约 20% 的 CPU 可用(例如用于日志记录)。
![]() 这里真正有趣的是,用户态 CPU 使用率在 23% 到 30% 之间波动,这意味着 HTTP 解析器处理 82700 个请求/秒所用的 CPU 不到核心的三分之一。由此推断,当支持 keep-alive 时,潜在处理能力约为每秒 25-30 万个 HTTP 请求。当然,这还没有考虑网络流量带来的额外工作量。 结论
HAProxy 的另一个很好的特性是它能作为 10GbE 网络的 MTU 转换器。Alteon 在 10 年前就做了这件事,以允许 1500 和 9000 字节的 MTU 在千兆网络上共存。现在,10GbE 也面临同样的问题。一些服务器将被设置为使用巨型帧,但外部网络不支持它们。在两个接口之间以完全透明模式设置 HAProxy 会有很大帮助。请注意,同样的情况也可能适用于以全线速进行 IPv6/IPv4 转换。
联系方式如有任何问题或意见,请随时通过以下方式与我联系: |