更喜欢满足其他人的要求

时间:2014-09-17 20:51:07

标签: ruby-on-rails passenger

我们已经设置了一个服务器来运行我们的rails 3 app。我们的应用程序中的一些网页必须处理大量数据并需要很长时间才能完成,其中一些甚至需要10分钟才能完成。

我们的服务器设置为一次只能满足六个请求。有时候,在高峰使用期间,服务器最终会陷入困境几分钟,因为它正在履行的请求是需要很长时间的请求。

几乎每个能够超过几秒钟的请求都有一个像domain / reports / some_thing这样的路由。

所以无论如何,我正在浏览design and architecture documentation,特别是3.1.2和3.2节,并且想知道是否有可能将ApplicationPool配置为在决定什么时更喜欢某些会话而不是其他会话会话返回RequestsHelper(主要基于请求url是/ reports / *)?

可能只允许6个进程中的4个处理带有/ reports / *等URL的请求是理想的。但是,简单地更喜欢所有其他请求,而不是那些像/ reports / *这样的网址可能非常实用。

P.S。我刚刚开始使用此应用程序的服务器方面。如果您需要更多详细信息,或者非常有可能,如果我要问X ...,请告诉我是否有更简单的方法...

P.P.S。我将重新审视那些速度很慢的页面,以尽量减少通过使用更客户端方法实现某些事情并可能通过为这些页面实现post / redirect / get结构来实现此类型的请求数量然而,这也需要时间,只会减少问题的频率......

1 个答案:

答案 0 :(得分:2)

Phusion Passenger作者在这里。你可以做的是使用passenger_app_group_name指令将你的应用程序分成多个应用程序进程组,例如一个/报告,一个用于其他一切。这样,每个应用程序进程组最终会有一个请求队列。如果/ reports的网址响应时间较长,则他们不会影响对所有其他网址的请求。

与其他人一样,使用工作队列系统也是一种有效的方法。这样你就可以将阻塞从HTTP服务器移到外部系统中。