Fork me on GitHub
1/11/2010

Mongrel2

Если бы не Александр Соловьев, то я бы прошел мимо Mongrel2. А всё потому, что первый Mongrel был Ruby-специфичным инструментом и никогда особо меня не интересовал.

Другое дело Mongrel2. Во-первых, он написан на C. Во-вторых, он не привязан ни к какому из языков. В-третьих, он использует ZeroMQ как транспорт.

По сути, Mongrel2 это балансирующий прокси, который парсит http и отдает запросы в виде сообщений в ZeroMQ и так же получает ответы.

Mongrel2 интересен несколькими моментами.

Быстрый. Все операции по парсингу http (сам Mongrel2) и передачи сообщений (ZeroMQ) берет на себя быстрый C-код.

Не привязан к языкам По сути, всё что вам нужно, чтобы начать работать с mongrel - это биндинг к ZeroMQ, которые есть для всех более-менее мажорных языков. Так что используя любой язык для работы с Mongrel (Erlang, Python, Ruby, Lua), вы уже получаете распарсенный запрос, причем с гарантией, что не получите специфичных для данного языка багов.

Асинхронные сообщения Это самая интересная фишка Mongrel2 и тут стоит остановиться чуть подробнее.

Дело в том, что современные балансировщики нагрузки работают как сервисы «переднего края», принимающие запросы, и как «командные центры», которые опеределяют, какому бэкенду следует отправить данный запрос. Как следствие, при добавлении бэкенда нужно донастраивать балансировщик.

Mongrel делает иначе — он принимает запрос и, ничего не зная о бэкендах и их количестве, ставит запрос в очередь. Запрос из очереди берет тот бэкенд, который освобождается первым.

Это действительно здорово, когда вы просто добавляете бэкенд и он сразу начинает работать.

Бэкенд является демоном, который подписывается на определенные сообщения в ZeroMQ, при получении обрабатывает и по готовности ответа шлет другое сообщение, на которое уже подписан Mongrel2. Если говорить о WSGI, то нужен коннектор между Mongrel2/ZeroMQ и WSGI-приложением (он вроде бы есть, и даже не в единственном экземпляре, но код OMG-OMG).

Итог. У Mongrel2 интересная концепция и он обещает быть весьма полезным на практике. Я бы не рискнул сейчас его ставить в продакшн, но вот поиграться — вполне.

P.S. А еще у Mongrel2 конфиг в SQLite :)

Комментарии

Все статьи