Николя Пиёль (Nicolas Piël) опубликовал (http://nichol.as/zeromq-an-introduction) введение в технологию ZeroMQ (http://www.zeromq.org/) (0MQ), позволяющую организовать быстрый асинхронный обмен сообщениями между высоконагруженными приложениями и интересную тем, что сетевое взаимодействие организовано через новый уровень сетевого стека, который может использовать в качестве транспорта TCP, PGM, IPC и т.п. API библиотеки напоминает обычные сокеты, поддерживается передача сообщений в направлениях точка-точка, издатель-подписчики, запрос-ответ, возможна параллельная рассылка. Система очень быстрая, тесты производительности (http://www.zeromq.org/area:results) показали способность обработать на обычном сервере более 8 млн. сообщений в секунду.
Ниже представлен перевод вводной статьи по ZeroMQ:ZeroMQ (http://www.zeromq.org/) - это библиотека обмена сообщениями (Messaging Queue, MQ), которая без особых усилий позволяет создавать сложные коммуникационные решения. Сначала эта п...
URL: http://nichol.as/zeromq-an-introduction
Новость: http://www.opennet.me/opennews/art.shtml?num=27137
Любопытно. Нужно будет поковырять на досуге.
Сразу скажу, что в питоновских примерах очень не очевиден вариант с подпиской: setsockopt(zmq.SUBSCRIBE, str(messagetype)), в котором messagetype, судя по всему (документации пока нет),- есть первое слово в msg. В PyroES по крайней мере можно швырять произвольные объекты (понятно, с синхронизацией кода объектов на серверах и клиентах, иначе - никак), в которых как хочешь задавай messagetype, хоть через свойство, хоть через object.__class__.__name__ дергай.
PyroES работает только python-объектами, что сильно ограничивает область использования. На самом деле отстутвие типа это как раз сильная сторона ZeroMQ. Как было описано можно использовать любой формат данных. С учетом, что ZeroMQ перетендует на самую скоростную реализацию обмена сообщениями, до кучи стоит сразу рассмотреть наиболее скоростной формат для обмена данными - MessagePack (http://msgpack.org/), который декларируется как в 4 раза более быстрый чем Protocol Biffers от Google. ZeroMQ+MessagePack = SuperJetMQ :)
Просто как раз над этим и занимась, статья в тему.
в SUBSCRIBE передаётся бинарная строка с которой должно начинаться сообщение.Само сообщение в этом случае должно быть разделено нулевым байтом на 2 части:
<"NAME">\x00<"BODY">
Если в SUBSCRIBE передать строку с завершающим нулём, то будет полное соответствие, если без - то по началу строки. Если на примере, то примерно так:
возьмём N сообщений:
"/queue/1\x00body"
"/queue/2\x00body"
...
"/queue/10\x00body"И маски:
"/queue/" - получит все сообщения,
"/queue/1" - получит 1 и 10е сообщения
"/queue/1\x00" - получит только 1е сообщение
Ну не все так радужно, как написано, в смысле производительности. Вот тут что-то люди сравнивали http://mnb.ociweb.com/mnb/MiddlewareNewsBrief-201004.html. Хотя наверно все зависит от того чего хочешь достичь меряя производительность разных систем. :)
Действительно, не всё так радужно в данном случае. С другой стороны, у конкурентов я что-то не вижу поддержки UDP и мультикаста, да и реализация на полутора десятков языковых интерфейсов - тоже жирный плюс. Кроме того, тот же DDS использует Corba... Лично мне её разворачивать не очень хочется. В общем, штука интересная, буду иметь в виду.
> Кроме того, тот же DDS использует Corba... Лично мне её разворачивать не очень хочется. В общем, штука интересная, буду иметь в виду...кто юзал TAO тот в цирке не смеется? Это да, есть такое :)
В TAO есть и UDP и мултикаст, и еще несколько протоколов (shared memory, UNIX sockets, etc), но смеяться не будем, грех. :)
На замену CORBA можно попробовать ZeroC Ice - мне в свое время понравилось. Не без своих проблем мидлварь конечно, но куда приятнее и понятнее корбы.
Да мне замена корбы как-то без надобности. Я гляжу в сторону чего-то легковеснго и и просто натстраиваемого. В этом плане ZeroMQ приятно вполне. Ну и полтора десятка биндингов, включая перл и эрланг - радуют.
А айс... Я как слышу слово "платформа", сразу понимаю - что-то здоровое, неудобопонятное и навязывающее свои правила игры. Языков маловато, примерчиков мелких не видно - верный признак, что не просто использовать. Возможносте масса - только обычно нужно что-то гораздо более простое.
>Да мне замена корбы как-то без надобности. Я гляжу в сторону чего-то
>легковеснго и и просто натстраиваемого. В этом плане ZeroMQ приятно вполне.
>Ну и полтора десятка биндингов, включая перл и эрланг - радуют.Я писал на обоих, у каждого свои плюсы, надо неплохо изучить оба, чтобы суметь сделать правильный выбор для конкретной задачи.
>А айс... Я как слышу слово "платформа", сразу понимаю - что-то здоровое,
Ну не такое оно и здоровое. Ядро весьма компактно, по сравнению с CORBA и вовсе миниатюрно! :)
>неудобопонятное и навязывающее свои правила игры. Языков маловато,
Вполне понятное, если немного почитать документацию и блог. Языков мне хватало.
> примерчиков мелких не видно - верный признак, что не просто использовать.Примеры простые вроде были. Сложности возникали обычно при попытках скрестить с каким-нить Qt, у которого свой mail-loop, но тут проблемы и с ZeroMQ будут примерно такие же на самом-то деле.
> Возможносте масса - только обычно нужно что-то гораздо более простое.разные решения, для разных задач.
>>Да мне замена корбы как-то без надобности. Я гляжу в сторону чего-то
>>легковеснго и и просто натстраиваемого. В этом плане ZeroMQ приятно вполне.
>>Ну и полтора десятка биндингов, включая перл и эрланг - радуют.
>
>Я писал на обоих, у каждого свои плюсы, надо неплохо изучить оба,
>чтобы суметь сделать правильный выбор для конкретной задачи.
>Ну, на перле я пишу, к эрлангу присматриваюсь, так как сфера деятельности соответствующая. Но это я просто привёл примеры пары явно интересных мне языков, биндингов для которых под айс я не увидел.
>>А айс... Я как слышу слово "платформа", сразу понимаю - что-то здоровое,
>
>Ну не такое оно и здоровое. Ядро весьма компактно, по сравнению с
>CORBA и вовсе миниатюрно! :)А по сравнению с Asio/ZeroMQ - большое весьма.
>Примеры простые вроде были. Сложности возникали обычно при попытках скрестить с каким-нить
>Qt, у которого свой mail-loop, но тут проблемы и с ZeroMQ
>будут примерно такие же на самом-то деле.Примеров не нашел, правда, больше 5 минут не искал. А main-loop... Хорошо только fd комбинируются, всё остальное с чудесами :-)
>разные решения, для разных задач.
Святая правда.
Есть только одна мелочь: модель лицензирования. GPL или коммерческая. Как в свою бытность - Qt. Первое отпадает как класс, второе - как договоритесь. А так - да, наверное, приятная вещь.
Что-то забыли про лицензию написать - LGPL она. Любопытно - примеры выпущены под лицензией GPL, что несколько странно и необычно (хотя я эти примеры не видел ещё).
> Кроме того, тот же DDS использует Corba...DDS конкурирующая технология и может взаимодействовать с CORBA, но реализация у нее независимая (по крайней мере в тех реализациях которые я знаю). В общем и целом DDS немного другой взгляд на вещи на которые раньше смотрели через CORBA.
>> Кроме того, тот же DDS использует Corba...
>
>DDS конкурирующая технология и может взаимодействовать с CORBA, но реализация у нее
>независимая (по крайней мере в тех реализациях которые я знаю). В
>общем и целом DDS немного другой взгляд на вещи на которые
>раньше смотрели через CORBA.Конкретно openDDS использует Corba - http://www.opendds.org/faq.html#DDS_and_CORBA
Чем это лучше spread?
>Чем это лучше spread?Для начала это просто разные решения. spread я не использовал, но доку почитал.
spread - это судя по всему миддлварь, zmq - это теперь просто библиотека которая даёт по сути обычный socket api к более хитрым вариантам сетевого взаимодействия.
PS: Ну а если вы хотите знать какой-то конкретный плюс, то в FAQ написано, что spread может посылать сообщения размером до приблизительно 100kb, у zmq таких ограничений нет.
PPS: у zmq больше биндингов к разным языкам, у spread python bindings давно протухли.
PPPS: а так же разработка spread по сути дела издохла, а zmq активно развивается.
> PPS: у zmq больше биндингов к разным языкам, у spread python bindings давно протухли.Ну само по себе абсолютное количество биндингов - десять! двадцать! сто!!! - это сферический конь в том самом. Это все равно что абстрактное 'количество поддерживаемых платформ NetBSD'. Ага. А вот как начнешь работать с конкретным нужным биндингом там и полезут все косяки и грабли. Хотя в релизе типа 'поддерживаем'. Это так, мысли в слух.
>> PPS: у zmq больше биндингов к разным языкам, у spread python bindings давно протухли.
>
>Ну само по себе абсолютное количество биндингов - десять! двадцать! сто!!! -
>это сферический конь в том самом. Это все равно что абстрактное
>'количество поддерживаемых платформ NetBSD'. Ага. А вот как начнешь работать с
>конкретным нужным биндингом там и полезут все косяки и грабли. Хотя
>в релизе типа 'поддерживаем'. Это так, мысли в слух.Дык это всё понятно, но товарищ аноним хотел что-то узнать, я ему что-то и ответил! :)