【发布时间】: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