Моему приложению Rails необходимо вызывать RESTful API партнера для каждого запроса, который он получает по действию конкретного контроллера. Мне нужно передать специфичные для запроса параметры (например, IP, user-agent и т. Д.) В партнерский API и вернуть ответ, который я получаю, пользователю. Поскольку вызов API партнера очень специфичен для пользователя, я не могу кэшировать ответ, полученный от API партнера (например, в memcached). Мое требование - отвечать пользователю за 1500 мс или меньше.
Приложение My Rails достигает стены с точки зрения количества запросов / секунду, потому что каждый монгрел блокируется, пока партнерский API не возвращает ответ. В недавнем тесте производительности я видел, как сервер выполняет всего 5 запросов в секунду (работает 5 шавок).
У меня есть несколько идей о том, что делать:
1) Ускорение реакции партнерского API. На самом деле, я могу лишь сильно дернуть этот рычаг - даже при очень тяжелой работе со стороны партнера среднее время отклика составляет 200 мс.
2) Ограничить время ожидания возврата партнерского API. Я попытался использовать Rails :: Timeout, но он допускает периоды ожидания только с точностью до секунды. Есть ли способ сделать тайм-аут в миллисекундах?
3) Есть ли способ поставить вызовы в API-интерфейс партнера в очередь, выполнять их асинхронно? В Java я бы использовал потоки для той же задачи.
Спасибо за вашу помощь!