另一种更重要的衡量尺度是它可以携带的同时连接。这是需要进行大量的远距离连接保持的大型站点的关键。我们的HAProxy上最多有250,000的同时连接,远远超出了Nginx或任何其他的前端软件系统。

HAProxy的配置系统是非常强大的,可以配置很多的前端监听“服务器”,和后端的服务器池,所有的前后端都可以使用各种规则来混合匹配。这是有着许多IP/端口/主机监听组合的大型网站,在代码变更、迁移和升级的时候,在后端服务器之间灵活移动负载的方法。

HAProxy 也可以像Nginx一样重写网址。虽然它没那么强大,但也包括了多种有用的重定向,已经足够满足多数用途,从而避免在每个后端上一一进行那些有点烦人的设 置。 HAProxy 后端的监控和控制也是非常强大的,可以进行各种各样的复杂配置,怎么样来监控什么项,如何确定某个具体后端的可用性,如何快速加大负载,等等。它甚至可以 为所有服务器都掉线的主池配置备用服务器池,这在有故障切换和维护需求的大型系统上是非常有用的。HAProxy还可以通过套接字来实现池的动态变化,删 除服务器,等等(尽管我们不得不编写一些工具来使它更易于使用)。

所有这些当中,最棒的部分是 HAProxy自己的监控,它通过HTTP提供了一个非常有用的GUI界面(也可以通过socket调用),来查询和控制负载均衡系统。每个前端和后端的 池,以及每台服务器都有约15个不同的数据值和状态,包括请求率、连接数、错误的不同类型、当前状态的时间,最大的连接数和连接率,等等。

HAProxy还可以实现四层负载均衡的功能,这对于分散MySQL从库的读操作最有用,但也可以工作在任何的TCP/IP连接上,包括XMPP、node.js、游戏,或其他基于套接字的系统。

最后,HAProxy具有非常强大的日志功能,无论是格式、信息级别和配置上,都可以进行完全地自定义配置。其中,详细状态是最有用的,它可以告诉你每个连接中具体的信息细节,这在故障排除中是非常有用的。

那么,HAProxy有什么弱点吗?有,包括两样: SSL和多核的支持。

HAproxy 不支持SSL。所以如果你需要处理加密的请求,那么就需要一个额外的前端来处理它;我们常常为此使用Nginx。这意味着一个典型的负载均衡服务器往往由 Nginx来监听443端口,然后把解密后的数据发往HAProxy上的80或者81端口再执行真正的负载均衡。这有点复杂,但是很好用,可扩展性性也很 强。

此外,HAProxy和Nginx一样,是个单线程事件驱动系统,这让它速度飞快,并且容易扩展。但 同时也限制了它最终只能在一个内核上扩展。虽然HAProxy也支持多核系统,可以得到2倍、3倍、4倍,甚至更高的性能,但是扩展性较差,而且监控依然 是基于单个进程的,这就使得事情变得复杂了。不过,这个问题很少遇到,因为它只有在非常高的性能级别才需要考虑,譬如每秒钟有数以万计的请求进来,同时存 在数十万的连接。

不过,即使有这些问题,HAProxy依然是压倒性的最佳负载均衡软件,几乎所有的新系统上都应该采用它来做负载均衡。