Re: Хочется странного (синхронно/асинхронные запросы)
Alexandre Snarskii
snar на snar.spb.ru
Ср Апр 25 10:38:40 UTC 2012
On Wed, Apr 25, 2012 at 10:13:33AM +0400, Andrey Velikoredchanin wrote:
> Всем привет!
>
> Появилась необходимость в конверторе синхронных HTTP запросов в асинхронные. По
> идее, задача как раз для nginx, поэтому сюда и пишу.
>
> Работать должно примерно так:
>
> 1. На определенный урл поступает HTTP запрос;
> 2. Конвертер сохраняет запрос вместе с его сокетом в буфер с определенным
> идентификатором;
> 3. Запрос с присоединенным идентификатором передается в модуль асинхронной
> обработки (обычный fastcgi который регистрирует запрос в очереди на обработку и
> закрывает коннект);
> 4. По окончанию обработки, модуль асинхронной обработки отправляет на второй
> определенный урл (урл конвертера) через HTTP запрос идентификатор запроса из
> п.2 и результатирующий ответ на первый запрос;
> 5. Конвертер извлекает из буфера ждущих соединений нужный сокет и отдает в него
> результатирующий ответ.
>
> Необходимость проистекает из-за высокой нагрузки и многообразия алгоритмов
> обработки запросов.
>
> Может быть, если не nginx, то есть какие-то другие решения?
Я не уверен, что хорошо понял задачу, но я бы посмотрел в сторону
https://github.com/calio/beanstalkd-nginx-module
в примерно следующем сценарии:
Начальный запрос поступает на простой fastcgi который делает необходимую
предобработку и формирование таски в beanstalk'е (в частности, с указанием
уникальной "очереди ответа"), после чего возвращает "управление" в nginx
с помощью X-Accel-Redirect на спец. location, который и ждет появления
ответа в этой самой уникальной очереди. А уж кто и как обрабатывает
задачи из очередей beanstalk'а - совершенно отдельный вопрос.
PS: не факт, что оно заработает, никогда не тестировал. В частности,
совершенно не уверен, что модуль работы с beanstalk'ом умеет ожидать
ответов по нескольким очередям "в одном соединении".
--
In theory, there is no difference between theory and practice.
But, in practice, there is.
Подробная информация о списке рассылки nginx-ru