我使用Puma和Nginx来运行我的Rubinius应用程序。
我想分开我的网址请求。
第一个是api请求,第二个是其他请求。
我认为Puma已经进行了线程化,但我想确保Web请求不会阻止线程在我的api请求期间导致停止。我想如果一个线程忙,Puma会创建另一个,但我想确保一个总是可用于api请求。
我的主要观点是"保存" url请求的线程,这是我的用户最需要的。
谢谢你的光明。
答案 0 :(得分:0)
由于Puma考虑了分离线程中的每个请求,因此这里唯一的瓶颈是这些线程的数据库访问。除此之外,你无法保证某些线程比其他线程“更好”。
值得注意的一个可能的解决方案是使用nginx
来处理它。假设您的应用正在http://some_host.com
上提供内容,而API
中的内容可在http://some_host.com/api
内使用。您可以将nginx
配置为分别处理http://some_host.com
和http://some_host.com/api
的请求。在这种情况下,您将需要两个独立的Puma
服务器实例。一个用于基本应用,一个用于api请求。我在这里的意思是当请求来到http://some_host.com
时,它由Puma A
处理,何时由http://some_host.com/api/...
处理,由Puma B
处理。
记住一件事,你可以通过分离的实例来处理请求,但是你仍然只有一个数据库,除非你正在缓存内容。这是另一个问题。你缓存你的内容了吗?如果没有,首先从缓存开始不是更大的想法吗?
答案 1 :(得分: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'前缀。