2014-10-28 34 views
1

我使用Puma和Nginx运行我的Rubinius应用程序。按照url路径分开的线程

我想分开我的网址请求。

第一个用于api请求,第二个用于其他请求。

我认为Puma已经开通了线程,但我想确保web请求不会阻止某个线程在我的api请求期间导致停止。我想如果一个线程忙,Puma会创建另一个线程,但我想确保一个线程始终可用于api请求。

我的主要目的是为网址请求“保存”一个线程,这是我的用户最需要的。

谢谢你的光。

回答

0

由于彪马考虑分离线程中的每个请求,这里唯一的瓶颈就是这些线程访问数据库。除此之外,你不能保证某些线程比其他线程“更好”。

这里值得注意的一个可能的解决方案是使用nginx来处理它。假设您的应用正在提供内容http://some_host.comAPI可在http://some_host.com/api内提供。您可以配置nginx分别处理http://some_host.comhttp://some_host.com/api的请求。在这种情况下,您需要两个不同的Puma服务器实例。一个用于基本应用程序,另一个用于api请求。我的意思是当请求来到http://some_host.com时,它由Puma Ahttp://some_host.com/api/...处理,由Puma B处理。只要记住一件事,你可以通过分离的实例处理请求,但你仍然只有一个数据库,除非你正在缓存内容。还有另外一个问题。你缓存你的内容吗?如果不是,首先从缓存开始不是更好的办法吗?

+0

谢谢你的快速回答!在切换到Puma之前,我使用了2个Passenger(就像你为Puma描述的那样),但是在我看来,这不是最好的方法。我认为这有点脏。我对你所说的'some_host.com'和'some_host.com/api'完全一样。 API请求正在进行流式传输,我无法缓存这些数据,因为它始终是一个新内容。我想确保一个Web请求不会阻止流式传输(例如在上传一个大文件时)。 – BriceB 2014-10-28 16:57:51

+0

我看,有趣的情况。你流什么? – blelump 2014-10-28 17:06:14

+0

音乐,视频和很多新的内容。 – BriceB 2014-10-28 19:54:40

0

为什么不拆分主应用程序和API?这很容易成为两个不同的应用程序与Nginx的:

location/{ 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass  http://puma1; 
    } 


    location /api/ { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass  http://puma2/; 
    } 

请支付的关注斜杠第二位点proxy_pass,它有助于改写请求和忽略“/ API”前缀。