【问题标题】:Haproxy in front of varnish or the other way round?Haproxy 在清漆前还是相反?
【发布时间】:2013-03-05 02:23:27
【问题描述】:

我可以想象两种设置:

负载平衡然后缓存

                          +-- 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 都应该是快速和稳定的:你的意见是什么?

【问题讨论】:

    标签: architecture varnish haproxy


    【解决方案1】:

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

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

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

    优点:

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

    缺点:

    • URI 平衡运行良好,但如果缓存服务器出现故障,您的后端服务器将受到打击,因为从更新的 URI 平衡哈希中提取松弛的其他缓存服务器将需要重新检索缓存的数据.也许不是什么大骗局,但我确实必须为我的系统记住这一点。

    【讨论】:

    • 但 URI 平衡似乎意味着:1)我不能对那些没有缓存的项目进行任何其他平衡(例如基于工作负载的平衡)并且
    • 但似乎 URI 平衡意味着我不能对那些未缓存的项目进行任何其他平衡(例如基于工作负载的平衡)?为此将任何非缓存请求转发回另一对 HAProxy 是否有意义?
    【解决方案2】:

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

    巴蒂斯特

    【讨论】:

    • 如果您可以包含文章中的相关信息,而不仅仅是链接到它,这个答案会更有用。
    • @Baptiste:博客文章的作者(你?)提出了一个有趣的架构。但我不确定他对“动态内容”的定义。例如,一个用户的主页可能包含 90% 的与其他用户共享的内容(横幅、页脚、广告、今日新闻……),而只有 10% 的真正个性化的内容(其中大部分可能不会每秒都在变化)。因此,最好使用 Varnish 的 ESI 功能来实际缓存用户主页的公共可缓存部分。 Varnish 不能缓存用户的个人但相当静态的数据吗?谢谢你的建议。
    【解决方案3】:

    为什么不使用 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 服务器

    【讨论】:

      【解决方案4】:

      当然是第一个!

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-07
        • 2010-09-22
        • 1970-01-01
        • 2012-06-11
        • 2019-01-26
        • 1970-01-01
        • 2018-03-01
        • 2019-03-21
        相关资源
        最近更新 更多