在清漆或其他方式之前的Haproxy?

我可以想象两个设置:

负载平衡然后caching

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

caching然后负载平衡

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

第一个设置的问题是有多个caching,浪费了大量的内存,使得caching失效更为复杂。

第二个设置的问题是,可能会有一个性能问题和两个单点故障(varnish和haproxy)而不是一个(haproxy)?

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

几年前,我为一个繁忙的Web应用程序构build了一个类似的设置(只有我使用Squid而不是Varnish),并且运行良好。

我会推荐使用你的第一个设置(HAProxy – > Varnish)进行两个修改:

  1. 使用keepalived和共享虚拟IP添加辅助HAProxy服务器
  2. 使用balance uri负载均衡algorithm来优化caching命中

优点:

  • 用HAProxy(x2)和Varnish(x3)冗余来安心
  • 使用HAProxy URI负载均衡选项,可以更好地提高Varnish的效率
  • 从caching服务器获得更好的性能,因为它们不需要保留在内存中
  • caching失效更容易,因为每次同一个URI都会到同一个服务器

缺点:

  • URI平衡工作得很好,但是如果caching服务器closures,后端服务器将会受到影响,因为从更新后的URI平衡哈希中拾取冗余的其他caching服务器将需要重新检索caching的数据。 也许不是一个大骗局,但我必须记住我的系统。

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

巴蒂斯特

当然是第一个!

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

特别是如果你需要HTTPS端点,因为Varnish不会说HTTPS。

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

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

在需要的地方进行缩放,只需要多less。 如果您发现自己不是caching瓶颈,只需删除LB#1,然后只放置一个Cache服务器