我想要对我的应用服务器进行负载平衡,以及缓存它们的响应。
我在 HAProxy 网站上读过一篇 2012 年的文章,该文章旨在消除 HAProxy 和 Varnish 之间的混淆:
http://blog.haproxy.com/2012/07/04/haproxy-and-varnish-comparison/
这篇文章基本上说 HAProxy 只是一个反向代理负载均衡器(没有缓存),而 Varnish 是一个反向代理缓存(没有负载平衡),因此它们是互补的。
但是今天,我在 Varnish 文档中看到它也具有负载平衡功能:
https://www.varnish-cache.org/trac/wiki/LoadBalancing
所以我只能猜测该功能自 2012 年就已经推出,并且现在在负载平衡方面直接与 HAProxy 竞争。
现在考虑到我需要一个反向代理缓存 + 负载均衡器,我是否真的可以使用一台只装有 Varnish 的服务器来同时完成这两项任务?与典型的 HAProxy <-> Varnish 设置相比,可能存在任何限制?
答案1
Varnish 不支持SSL
对于任何严肃的事情来说,在 SSL 上运行站点/服务都是必要的,所以这就是使用 haproxy 为您终止 SSL 的原因之一。
答案2
虽然 HAProxy 和 Varnish能负载平衡,只有其中一个是为其构建的。
您也可以将 Apache 用于您的目的,因为它也可以代理和缓存,但它并不是最佳解决方案。
在我看来,最好让每种产品各尽其能。
我所做的是将两者安装在同一个盒子上,并将 Varnish 配置为使用 HAProxy 作为其唯一后端。
CDN 指向 HAPROXY,然后在 Varnish 和后端之间进行负载平衡,默认发送到 Varnish,除非请求基于标头或源 IP 来自 Varnish。
这样您就可以:
- 轻松绕过 Varnish 进行升级或测试
- 随着负载的增加,将任一层扩展到更多盒子
- 使用每个软件来实现其核心目的
答案3
与大多数实现基本负载平衡的软件一样,Varnish 实际上只支持循环赛和随机的平衡算法。
另一方面,HAProxy 是为负载平衡而构建的,因此支持:
- 循环赛(带权重)
- 静态循环方法
- 最少连接
- 第一个可用的服务器
- 根据来源进行分组
- 根据 URI 进行分组
- 根据 URL 参数进行分组
- 基于 HTTP 标头的分桶
- 基于 Cookie 的分组
Varnish 的负载平衡是否足够取决于您的需求,但它肯定没有取代 HAProxy。