负载均衡之HAPorxy
HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。HAProxy稳定性也是非常好,可以与硬件级的F5相媲美,根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom’s 10GbE NICs (Myri-10G PCI-Express),这个数值作为软件级负载均衡器是相当惊人的。官方测试的性能情况如下图:
HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy性能特点
HAProxy借助于OS上几种常见的技术来实现性能的最大化。
- 单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
- O(1)事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
- 在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽;
- 借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copy forwarding),在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting);
- MRU内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长;
- 树型存储:侧重于使用作者多年前开发的弹性二叉树,实现了以O(log(N))的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列;
- 优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程中重读任何内存区域;
- 精心地降低了昂贵的系统调用,大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等;
所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。
HAPorxy 1.3版本特性:
- 内容交换(content switching):基于任何请求标准挑选服务器池
- ACL:编写内容交换规则
- 负载均衡算法(load-balancing algorithms):更多的算法支持
- 内容探测(content inspection):阻止非授权协议
- 透明代理(transparent proxy):在Linux系统上允许使用客户端IP直接连入服务器
- 内核TCP拼接(kernel TCP splicing):无copy方式在客户端和服务端之间转发数据以实现数G级别的数据速率
- 分层设计(layered design):分别实现套接字、TCP、HTTP处理以提供更好的健壮性、更快的处理机制及便捷的演进能力
- 快速、公平调度器(fast and fair scheduler):为某些任务指定优先级可实现理好的QoS
- 会话速率限制(session rate limiting):适用于托管环境
HAPorxy 1.4版本新增特性:
- 客户端的长连接(client-side keep-alive)
- TCP加速(TCP speedups)
- 响应池(response buffering)
- RDP协议
- 基于源的粘性(source-based stickiness)
- 更好的统计数据接口(a much better stats interfaces)
- 更详细的健康状态检测机制(more verbose health checks)
- 基于流量的健康评估机制(traffic-based health)
- 支持HTTP认证
- 服务器管理命令行接口(server management from the CLI)
- 基于ACL的持久性(ACL-based persistence)
- 日志分析器
HAPorxy 1.5版本新增特性:
- 支持 SNI/NPN/ALPN 和 OCSP stapling 的原生 SSL;
- 支持 IPv6 和 UNIX sockets;
- full HTTP keep-alive for better support of NTLM and improved efficiency in static farms;
- HTTP/1.1 压缩支持(deflate, gzip)
- PROXY protocol versions 1 and 2 on both sides;
- data sampling on everything in request or response, including payload;
- ACLs can use any matching method with any input sample maps and dynamic ACLs updatable from the CLI stick-tables support counters to track activity on any input sample custom format for logs, unique-id, header rewriting, and redirects;
- 改进的健康检查 (SSL, scripted TCP, check agent, …)
- 更多的后台可配置项
官方网站(被墙): http://www.haproxy.org/
Related posts: