2

我最近阅读了 SoundCloud Team 的一篇很棒的博文。这篇文章讨论了软件架构演进。

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

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

他写了:

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

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

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

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

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

4

1 回答 1

0

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

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

我希望这会有所帮助。

于 2012-09-02T16:34:54.413 回答