我们有一个在 Unicorn(2 个 worker)和 nginx 上运行的 Rails 应用程序。我们希望集成一个第 3 方 API,其中处理单个请求需要 1 到 20 秒。如果我们只是创建一个新的控制器来代理该服务,整个应用程序都会受到影响,因为只需要 2 个人通过我们的 API 向该服务发出请求,并且在 20 秒内其余用户无法访问我们的其余部分应用程序。
我们正在考虑两种解决方案。
- 创建一个单独的 node.js 服务器,它将执行对 3rd 方 API 的所有请求。在这种情况下,我们只会使用 Rails 进行身份验证/授权,并且我们会使用 X-Accel-Redirect 标头通过 nginx 将请求重定向到节点(如此处所述http://blog.bitbucket.org/2012/08/24/隔离服务/)
- 用瘦或彩虹替换独角兽!并继续在我们的 Rails 应用程序中进行代理,然后大概可以让我们处理更多的并发连接。
哪种解决方案可能会更好?或者还有什么我们可以做的。
我个人认为节点偶数循环更适合这里的工作,因为在选项 2 中,我们仍然会阻塞许多线程并等待 HTTP 请求完成,而在选项 1 中,我们可能会在等待慢速的同时执行更多请求那些要完成的。
谢谢!