根据URL路径分隔线程



我正在使用彪马和Nginx来运行我的Rubinius应用程序。

我想分开我的URL请求。

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

我认为彪马已经实现了线程化,但我想确保web请求不会阻塞线程,这会导致在我的API请求过程中停止。我想,如果一个线程很忙,彪马会创建另一个线程,但我想确保一个线程总是可用于API请求。

我在这里的主要观点是";保存";URL请求的线程,这是我的用户最需要的。

Puma考虑到每个请求都在独立的线程中,这里唯一的瓶颈是这些线程对数据库的访问。除此之外,您不能保证某些线程比其他线程"更好"。

这里值得注意的一个可能的解决方案是使用nginx来处理它。假设您的应用程序在http://some_host.com上提供内容,而APIhttp://some_host.com/api中可用。您可以将nginx配置为分别处理http://some_host.comhttp://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"前缀。