我们的大客户都有多个web服务器作为网站前端,而且所有客户都使用了负载均衡技术。一部分使用DNS轮询或者LVS,但更多的则是使用nginx来实现负载均衡。不过,我们认为HAPrxoy更好、功能更强,如果你希望网站可扩展、容易管理,那么HAProxy无疑是更好的选择。
很多人听说过HAProxy,也有一些人知道HAProxy有着和nginx类似的架构,它是一个单线程事件驱动系统,可以支持100-200,000 并发连接、处理每秒10,000次请求。更重要的是,HAProxy灵活且功能强大,支持多个前端、后端,灵活的rewrite规则及检查等等。
HAProxy的日志功能同样灵活强大,包括每个连接如何启动并终止,在HTTP的那个阶段,由谁发起,这在故障排除的时候非常有效。除此之外,实时API允许工程师动态从Haproxy的服务器池中删除或增加服务器(当你需要对网站进行维护、测试之类)
对我们而言,最有用的部分之一是HAProxy有着成熟的状态监控,包括一个漂亮的web GUI界面。你可以通过浏览器看到所有服务器池的状态和统计信息,包括错误数、连接、请求率、健康检查信息等等。我们可以用它来做实时监控,通过API将相应数据返回给监控系统。
对比而言,nginx则缺少了类似的功能,并且nginx在监控和控制方面非常简单。你无法知道哪台服务器是正常的,也缺少对故障排除、监控等等有用的信息,例如连接率。nginx简单并有效,但并不是非常适用于复杂的系统。
HAProxy对SSL的处理并不十分完善,无法直接支持SSL。最简单的替代方法是使用nginx来处理SSL连接,然后转发未加密的连接到80端口。这稍微有些复杂,但效果还不错,尽管如果你希望能将客户端IP传递到真实的应用服务器还需要一些额外的工作。
总而言之,HAProxy是大规模负载均衡的最好选择,尤其是当系统经常更改,有多个池,需求复杂的时候。Nginx是一个不错的选择,但HAProxy更好。