【问题标题】:Apache+Passenger == HAProxy + Mogrel Servers (M/M/C Queue)Apache+Passenger == HAProxy + Mogrel 服务器(M/M/C 队列)
【发布时间】:2012-08-27 02:32:15
【问题描述】:

我最近阅读了 SoundCloud 团队撰写的一篇很棒的博文。这篇文章讨论了软件架构的演变。

http://backstage.soundcloud.com/2012/08/evolution-of-soundclouds-architecture/

“负载分布和一点队列理论”部分中,Sean Treadway 谈到了队列理论以及如何更好地使用队列。

他写道:

我们想要一个从不排队的系统,但如果它确实排队,等待 排队的时间很短。将M/M/c模型发挥到极致, 我们问自己“我们如何才能使 c 尽可能大?”

为此,我们需要确保单个 Rails 应用程序 服务器一次不会收到多个请求

我们将 HAProxy 添加到我们的基础架构中,将每个后端的最大连接数配置为 > 1,并在所有主机上添加我们的后端进程,以通过对 HTTP 请求进行排队来减少驻留等待时间直到任何主机上的任何后端进程可用

显然,他们正在使用 HAProxy + Rails 服务器(可能是 Mongrel)。 好的,HAProxy 对传入的请求进行排队,并且仅在可用时分派给 Mogrel/Thin。

也许我完全错了;),但是 Apache + Passenger 做同样的事情,对吗? 一个队列(Apache 处理传入请求)和 C Workers(子进程)

【问题讨论】:

    标签: ruby-on-rails passenger thin mongrel


    【解决方案1】:

    Apache + Passenger 确实将传入请求分发到机架后端(除非请求引用静态资源,Apache 自己处理)。

    只要一台主机可以运行所有(!)机架实例,此模型就可以工作。当您需要更多实例时,apache 无法再处理它,您必须在上面放置一些东西(通常是 HAProxy)。但是,apache 的功能远不止提供基于机架的应用程序。因此,用更轻量级的东西(例如 nginx)替换它是有意义的,尤其是因为您为每个拥有的主机部署一次。

    希望对你有所帮助。

    【讨论】:

    • 谢谢@mosch。 “当您需要更多实例时,apache 无法再处理它,您必须在上面放置一些东西”意味着当乘客池中没有可用的子节点时,apache 将清除传入的请求? apache 没有入队吗?
    • 我的意思是我不知道有一种方法可以让 apache 将传入请求分发到不同的主机。乘客正在为单个主机和一些机架应用程序处理此问题(意味着乘客池位于本地主机上),但它不会中继到不同的主机 (AFAIK)。
    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2014-03-23
    • 2017-12-28
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多