Ruby on rails Apache+Passenger==HAProxy+Mogrel服务器(M/M/C队列)

Ruby on rails Apache+Passenger==HAProxy+Mogrel服务器(M/M/C队列),ruby-on-rails,passenger,thin,mongrel,Ruby On Rails,Passenger,Thin,Mongrel,我最近读了SoundCloud团队写的一篇很棒的博客文章。本文讨论了软件体系结构的演变 在“负荷分配和一点队列理论”一节中,Sean Treadway讨论了队列理论以及如何更好地使用队列 他写道: 我们想要一个从不排队的系统,但如果它排队了,那么等待 排队的时间很短。将M/M/c模式发挥到极致, 我们问自己:“我们怎样才能使c尽可能大?” 为此,我们需要确保单个Rails应用程序 服务器一次从未收到多个请求 我们将HAProxy添加到我们的基础架构中,将每个后端配置为最大连接数>1,并在所有主机

我最近读了SoundCloud团队写的一篇很棒的博客文章。本文讨论了软件体系结构的演变

在“负荷分配和一点队列理论”一节中,Sean Treadway讨论了队列理论以及如何更好地使用队列

他写道:

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

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

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

显然,他们使用的是HAProxy+Rails服务器,可能是Mongrel。 好的,HAProxy请求传入,只有在Mogrel/Thin可用时才发送给它

也许我完全错了;,但是Apache+乘客也做同样的事情,对吗?
一个队列Apache处理传入请求和C Workers子进程实际上将传入请求分发到机架后端,除非请求引用Apache自己处理的静态资源

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


我希望这会有所帮助。

Apache+Passenger确实会将传入的请求分发到机架后端,除非这些请求引用静态资源,而Apache自己会处理这些资源

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


我希望这能有所帮助。

谢谢@mosch。当您需要更多实例时,apache无法再处理它,您必须在上面添加一些东西,这意味着当乘客池中没有可用的子对象时,apache将清除传入的请求?apache没有排队吗?我的意思是,我不知道如何让apache将传入的请求分发到不同的主机。乘客正在为单个主机和一些机架应用程序处理此问题,这意味着乘客池位于本地主机上,但不会转发到其他主机。谢谢@mosch。当您需要更多实例时,apache无法再处理它,您必须在上面添加一些东西,这意味着当乘客池中没有可用的子对象时,apache将清除传入的请求?apache没有排队吗?我的意思是,我不知道如何让apache将传入的请求分发到不同的主机。乘客正在为单个主机和一些机架应用程序处理此问题,这意味着乘客池位于本地主机上,但不会中继到不同的主机。