среда, 9 декабря 2009 г.

Системы очередей для взаимодействия приложений

Собственно, идея состоит в реализации парадигмы вопрос-ответ. Очевидны два случаяя - ответ получаем сразу или когда-нибудь потом. Как пример, синхронная система - http, асинхронная - imap.

Вики излагает более подробно, см.
Message queue

Есть продакшен реализации и стандарты, например,
Red Hat Enterprise MRG
Этот монстр реализует стандарт AMQP. Замечу, что спецификация стандарта содержит почти 300 страниц.
В дебиане есть эрланг-реализация этого стандарта в пакете rabbitmq-server. Разработчики проекта RabbitMQ обещают надежность 9 девяток, что означает не более 3-х секунд недоступности системы в столетие, во что ни один здравомыслящий человек не поверит. К примеру, сто лет назад компьютеров еще не было, а через сто лет и таком проекте давно забудут. Так что мы обратимся к более адекватным идеям и реализацим.

Вот реализация попроще и без гарантии доставки сообщения: Gearman
Иллюстрации красивые и понятные, а вот архитектура системы подкачала: вместо стандартизированного протокола - наслоения API. Ну, пусть сами с ними и работают.

Так, картина более-менее прояснилась, посмотрим теперь, что есть для AOLServer. Модули посмотрим здесь и еще кое-где.
Нижеследующая реализация основана на встроенной функции ns_http, которая, признаться, документирована лишь частично, так что пример ее использования будет не лишним.
Nsxmlrpc
Сама реализация здесь: xmlrpc.tcl

Про Digital City разговор отдельный, потому ограничусь ссылкой на презентацию Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site
В рамках этого проекта также есть модуль очереди: Networked Small Object Broker (nsob)

Вероятно, что-то найдется и для NaviServer, но я не смотрел.

Теперь к вопросу об интеграции AOL Server с внешней системой, в частности, qmail. Рекомендуемый источник познания, к которому следует припасть для работы с qmail, это Life with qmail.

Непосредственно связка AOL + qmail упоминается вот где:
Installing WebMail ACS 3.3
ArsDigita Server Architecture Auditing

Резюме: задачи на асинхронную обработку могут передаваться средствами qmail, а для синхронной подойдет функция ns_http из AOL Server с методом POST (без xmlrpc и других наворотов, разумеется).

Плюсы: используются стандартные протоколы и утилиты.

Минусы: оверхед на взаимодействие. Но необходимость передачи более чем тысяч сообщений в секунду между узлами одного приложения может возникнуть только при очень паршивой архитектуре. А трата миллисекунды времени на запуск задачи, выполняемой час, вполне допустима.

Upd.

tcl-mq: POSIX Message Queues for Tcl. (Tcl package)

1 комментарий:

Lev комментирует...

Erlang/RabbitMQ действительно хорошие. Не смотри на 9 девяток — это относится к Erlang, а не RabbitMQ. По скорости — примерно 20k RPS на средней современной машине.


(C) Alexey Pechnikov aka MBG, mobigroup.ru