45

我可以想象两种设置:

负载均衡然后缓存

                          +-- Cache server #1 (varnish) -- App server #1
                         /
Load Balancer (haproxy)-+---- Cache server #2 (varnish) -- App server #2
                         \
                          +-- Cache server #3 (varnish) -- App server #3

缓存然后负载平衡

                                                       +-- App server #1
                                                      /
Cache Server (varnish) --- Load Balancer (haproxy) --+---- App server #2
                                                      \
                                                       +-- App server #3

第一种设置的问题是有多个缓存,这会浪费大量内存并使缓存失效更加复杂。

第二种设置的问题是可能存在性能损失和两个单点故障(清漆和 haproxy),而不仅仅是一个(haproxy)?

我很想使用第二种设置,因为 haproxy 和 varnish 都应该是快速和稳定的:你的意见是什么?

4

4 回答 4

38

几年前,我为一个繁忙的 Web 应用程序构建了一个类似的设置(只是我使用 Squid 而不是 Varnish),并且效果很好。

我建议使用您的第一个设置(HAProxy -> Varnish)并进行两项修改:

  1. keepalived使用共享虚拟 IP添加辅助 HAProxy 服务器
  2. 使用balance uri负载均衡算法优化缓存命中

优点:

  • HAProxy (x2) 和 Varnish (x3) 冗余让您高枕无忧
  • 使用 HAProxy URI 负载平衡选项提高 Varnish 的命中率效率
  • 缓存服务器的性能更好,因为它们不需要在内存中保留太多
  • 使缓存失效更容易,因为相同的 URI 每次都会转到相同的服务器

缺点:

  • URI 平衡效果很好,但是如果缓存服务器出现故障,您的后端服务器将受到打击,因为从更新的 URI 平衡哈希中获取松弛的其他缓存服务器将需要重新检索缓存的数据。也许不是一个大骗局,但我确实必须为我的系统记住这一点。
于 2013-06-03T16:37:21.930 回答
11

两者都有优点和缺点。更多在下面的博客文章中,包括 HAProxy 和 Varnish 的配置: http ://blog.exceliance.fr/2012/08/25/haproxy-varnish-and-the-single-hostname-website/

巴蒂斯特

于 2013-03-16T13:47:48.787 回答
2

为什么不使用 2 LB,第一个 LB 可以使用balance uri选项,第二个 LB 可以使用您选择的策略(工作负载,循环)

          +-- Cache Server #1 --+                +-- App server #1
         /                       \              /
LB #1 --+                         + -- LB #2 --+---- App server #2
         \                       /              \
          +-- Cache Server #2 --+                +-- App server #3

在您需要的地方进行扩展,您需要多少。如果你发现你在 Cache 上没有瓶颈,只需移除 LB#1 并在前面只放置一个 Cache 服务器

于 2017-01-17T19:53:31.770 回答
1

当然是第一个!

为基于 URI 的平衡配置了 HAProxy。(如果您有与 IP 平衡模式相反的应用程序用户会话,则需要分发您的应用程序用户会话)。

特别是如果您需要 HTTPS 端点,因为 Varnish 不使用 HTTPS。

于 2014-07-21T11:49:01.570 回答