【发布时间】:2011-01-08 11:55:45
【问题描述】:
我的 Rails 应用需要针对特定控制器操作收到的每个请求调用合作伙伴的 RESTful API。我需要将特定于请求的参数(例如 IP、用户代理等)传递给合作伙伴 API,并将我得到的响应返回给用户。由于对合作伙伴 API 的调用非常特定于用户,因此我无法缓存从合作伙伴 API 返回的响应(例如,在 memcached 中)。我的要求是在 1500 毫秒或更短的时间内响应用户。
我的 Rails 应用程序在每秒请求数方面遇到了墙,因为每个 mongrel 都会被阻塞,直到合作伙伴 API 返回响应。在最近的一次性能测试中,我看到一台服务器每秒只能勉强 5 个请求(运行 5 个 mongrel)。
我有一些关于该怎么做的想法:
1) 让合作伙伴 API 响应更快。实际上,我只能拉这么多——即使合作伙伴非常努力,平均响应时间也是 200 毫秒。
2) 限制我等待合作伙伴 API 返回的时间。我尝试使用 Rails::Timeout,但它只允许以秒为单位的等待时间。有没有办法让超时以毫秒为单位?
3) 有没有办法对合作伙伴 API 的调用进行排队,让它们异步执行?在 Java 中,我会使用线程来完成相同的任务。
感谢您的帮助!
【问题讨论】:
-
关于#3:有人推荐使用delayed_job吗?我可以依靠它在一定的时间间隔内处理作业吗?
标签: ruby-on-rails api asynchronous timeout