[Moscow.pm] процессы и AnyEvent: быстрая передача данных

Ivan Petrov i.petro.77.00 на gmail.com
Пн Янв 17 03:29:20 PST 2011


14 января 2011 г. 15:21 пользователь Dmitry Simonov <dsimonov на gmail.com>написал:

> А зачем тебе хорошая технология AnyEvent, которая вообще говоря не
> заточена под интерфейсные работы?
>

может я и правда решаю что-то не так, раз такие вопросы возникают

в данный момент есть такая задача:

имеем прокси сервер с поддержкой ICAP.
нужно по своим правилам модифицировать/мониторить весь проходящий сквозь
прокси http-траффик.

сперва пошли по обычному пути: каждый ICAP-запрос - обрабатывается в
префорке (Net::Serer). префорка вычитывает заголовки запроса и дергает
функцию обработчик с вычитанным, которая решает что делать с запросом:
менять или оставлять как есть.
ну и в БД логгирует и по правилам выбранным из БД принимает решения/делает
модификации.

так вот, эта модель получается довольно накладной по ресурсам.

тесты показывают что вариант на базе AnyEvent::Socket (tcp_server) к
ресурсам сильно менее требователен выходит (особенно если учесть что 99%
контента проходит сквозь это без модификации либо только с модификацией
заголовков). проблемы начинаются когда надо полученный ответ сервера
распарсить, модифицировать, собрать обратно в новый ответ. Блокирующих
операций при этом нет (БД в AnyEvent опять же), но парсинг/обработка
занимают иногда время что много клиентов скапливается в очереди на
обработку. тут собственно два пути: экстенсивный - увеличение числа
процессов слушающих соединения от клиентов. и интенсивный - вынос парсеров в
отдельные процессы (возможно даже на отдельные хосты, в перспективе).
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20110117/101b2ba1/attachment.html>


Подробная информация о списке рассылки Moscow-pm