当 Varnish 可以充当负载均衡器时,HAProxy 是否仍然必要?

当 Varnish 可以充当负载均衡器时,HAProxy 是否仍然必要?

我想要对我的应用服务器进行负载平衡,以及缓存它们的响应。

我在 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。

相关内容