我正在使用彪马和Nginx来运行我的Rubinius应用程序。
我想分开我的URL请求。
第一个用于API请求,第二个用于其他请求。
我认为彪马已经实现了线程化,但我想确保web请求不会阻塞线程,这会导致在我的API请求过程中停止。我想,如果一个线程很忙,彪马会创建另一个线程,但我想确保一个线程总是可用于API请求。
我在这里的主要观点是";保存";URL请求的线程,这是我的用户最需要的。
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
处理。
只需记住一件事,您可以通过分离的实例来处理请求,但您仍然只有一个数据库,除非您正在缓存内容。还有一个问题。您是否缓存内容?如果不是,那么先从缓存开始不是更好的主意吗?
为什么不拆分主应用程序和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"前缀。