我可以想象两种设置:
负载均衡然后缓存
+-- 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
第一个设置的问题是存在多个缓存,这会浪费大量内存并使缓存失效变得更加复杂。
第二个设置的问题是可能会出现性能损失和两个单点故障(varnish和haproxy)而不是一个(haproxy)?
我很想接受第二次设置,因为haproxy和varnish都应该快速而稳定:您的意见是什么?
答案 0 :(得分:37)
几年前,我为一个繁忙的网络应用程序构建了一个类似的设置(只有我用Squid而不是Varnish完成),并且效果很好。
我建议您使用第一个设置(HAProxy - > Varnish)进行两项修改:
keepalived
和共享虚拟IP balance uri
负载平衡算法优化缓存命中数优点:
缺点:
答案 1 :(得分:11)
两者都有利弊。 更多以下博客文章,包括HAProxy和Varnish的配置: http://blog.exceliance.fr/2012/08/25/haproxy-varnish-and-the-single-hostname-website/
巴普蒂斯特
答案 2 :(得分:1)
当然是第一个!
将HAProxy配置为基于URI的平衡。 (如果您的应用程序用户会话与IP平衡模式相反,则需要分发您的应用程序用户会话。)
特别是如果你需要HTTPS端点,因为Varnish不会谈论HTTPS。
答案 3 :(得分:0)
为什么不使用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并在前面只放置一个缓存服务器