URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 68353
[ Назад ]

Исходное сообщение
"Введение в систему обмена сообщениями ZeroMQ "

Отправлено opennews , 30-Июн-10 10:35 
Николя Пиёль (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


Содержание

Сообщения в этом обсуждении
"Введение в систему обмена сообщениями ZeroMQ "
Отправлено klalafuda , 30-Июн-10 10:35 

Любопытно. Нужно будет поковырять на досуге.

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено Аноним , 30-Июн-10 10:38 
Сразу скажу, что в питоновских примерах очень не очевиден вариант с подпиской: setsockopt(zmq.SUBSCRIBE, str(messagetype)), в котором messagetype, судя по всему (документации пока нет),- есть первое слово в msg. В PyroES по крайней мере можно швырять произвольные объекты (понятно, с синхронизацией кода объектов на серверах и клиентах, иначе - никак), в которых как хочешь задавай messagetype, хоть через свойство, хоть через object.__class__.__name__ дергай.

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено Omniton , 30-Июн-10 13:06 
PyroES работает только python-объектами, что сильно ограничивает область использования. На самом деле отстутвие типа это как раз сильная сторона ZeroMQ. Как было описано можно использовать любой формат данных. С учетом, что ZeroMQ перетендует на самую скоростную реализацию обмена сообщениями, до кучи стоит сразу рассмотреть наиболее скоростной формат для обмена данными - MessagePack (http://msgpack.org/), который декларируется как в 4 раза более быстрый чем Protocol Biffers от Google. ZeroMQ+MessagePack = SuperJetMQ  :)
Просто как раз над этим и занимась, статья в тему.

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено oxyum , 30-Июн-10 18:31 
в 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е сообщение


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено const_cast , 30-Июн-10 14:31 
Ну не все так радужно, как написано, в смысле производительности. Вот тут что-то люди сравнивали http://mnb.ociweb.com/mnb/MiddlewareNewsBrief-201004.html. Хотя наверно все зависит от того чего хочешь достичь меряя производительность разных систем. :)

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено Crazy Alex , 30-Июн-10 15:12 
Действительно, не всё так радужно в данном случае. С другой стороны, у конкурентов я что-то не вижу поддержки UDP и мультикаста, да и реализация на полутора десятков языковых интерфейсов - тоже жирный плюс. Кроме того, тот же DDS использует Corba... Лично мне её разворачивать не очень хочется. В общем, штука интересная, буду иметь в виду.

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено klalafuda , 30-Июн-10 16:06 
> Кроме того, тот же DDS использует Corba... Лично мне её разворачивать не очень хочется. В общем, штука интересная, буду иметь в виду.

..кто юзал TAO тот в цирке не смеется? Это да, есть такое :)


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено const_cast , 30-Июн-10 18:50 
В TAO есть и UDP и мултикаст, и еще несколько протоколов (shared memory, UNIX sockets, etc), но смеяться не будем, грех. :)

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено oxyum , 30-Июн-10 18:32 
На замену CORBA можно попробовать ZeroC Ice - мне в свое время понравилось. Не без своих проблем мидлварь конечно, но куда приятнее и понятнее корбы.

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено Crazy Alex , 30-Июн-10 20:12 
Да мне замена корбы как-то без надобности. Я гляжу в сторону чего-то легковеснго и и просто натстраиваемого. В этом плане ZeroMQ приятно вполне. Ну и полтора десятка биндингов, включая перл и эрланг - радуют.
А айс... Я как слышу слово "платформа", сразу понимаю - что-то здоровое, неудобопонятное и навязывающее свои правила игры. Языков маловато, примерчиков мелких не видно - верный признак, что не просто использовать. Возможносте масса - только обычно нужно что-то гораздо более простое.

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено oxyum , 30-Июн-10 20:23 
>Да мне замена корбы как-то без надобности. Я гляжу в сторону чего-то
>легковеснго и и просто натстраиваемого. В этом плане ZeroMQ приятно вполне.
>Ну и полтора десятка биндингов, включая перл и эрланг - радуют.

Я писал на обоих, у каждого свои плюсы, надо неплохо изучить оба, чтобы суметь сделать правильный выбор для конкретной задачи.

>А айс... Я как слышу слово "платформа", сразу понимаю - что-то здоровое,

Ну не такое оно и здоровое. Ядро весьма компактно, по сравнению с CORBA и вовсе миниатюрно! :)

>неудобопонятное и навязывающее свои правила игры. Языков маловато,

Вполне понятное, если немного почитать документацию и блог. Языков мне хватало.
> примерчиков мелких не видно - верный признак, что не просто использовать.

Примеры простые вроде были. Сложности возникали обычно при попытках скрестить с каким-нить Qt, у которого свой mail-loop, но тут проблемы и с ZeroMQ будут примерно такие же на самом-то деле.
> Возможносте масса - только обычно нужно что-то гораздо более простое.

разные решения, для разных задач.


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено Crazy Alex , 30-Июн-10 20:32 
>>Да мне замена корбы как-то без надобности. Я гляжу в сторону чего-то
>>легковеснго и и просто натстраиваемого. В этом плане ZeroMQ приятно вполне.
>>Ну и полтора десятка биндингов, включая перл и эрланг - радуют.
>
>Я писал на обоих, у каждого свои плюсы, надо неплохо изучить оба,
>чтобы суметь сделать правильный выбор для конкретной задачи.
>

Ну, на перле я пишу, к эрлангу присматриваюсь, так как сфера деятельности соответствующая. Но это я просто привёл примеры пары явно интересных мне языков, биндингов для которых под айс я не увидел.

>>А айс... Я как слышу слово "платформа", сразу понимаю - что-то здоровое,
>
>Ну не такое оно и здоровое. Ядро весьма компактно, по сравнению с
>CORBA и вовсе миниатюрно! :)

А по сравнению с Asio/ZeroMQ - большое весьма.

>Примеры простые вроде были. Сложности возникали обычно при попытках скрестить с каким-нить
>Qt, у которого свой mail-loop, но тут проблемы и с ZeroMQ
>будут примерно такие же на самом-то деле.

Примеров не нашел, правда, больше 5 минут не искал. А main-loop... Хорошо только fd комбинируются, всё остальное с чудесами :-)

>разные решения, для разных задач.

Святая правда.


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено klalafuda , 01-Июл-10 09:56 

Есть только одна мелочь: модель лицензирования. GPL или коммерческая. Как в свою бытность - Qt. Первое отпадает как класс, второе - как договоритесь. А так - да, наверное, приятная вещь.

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено gkv311 , 30-Июн-10 15:25 
Что-то забыли про лицензию написать - LGPL она. Любопытно - примеры выпущены под лицензией GPL, что несколько странно и необычно (хотя я эти примеры не видел ещё).

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено const_cast , 30-Июн-10 18:44 
> Кроме того, тот же DDS использует Corba...

DDS конкурирующая технология и может взаимодействовать с CORBA, но реализация у нее независимая (по крайней мере в тех реализациях которые я знаю). В общем и целом DDS немного другой взгляд на вещи на которые раньше смотрели через CORBA.


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено Crazy Alex , 30-Июн-10 20:13 
>> Кроме того, тот же DDS использует Corba...
>
>DDS конкурирующая технология и может взаимодействовать с CORBA, но реализация у нее
>независимая (по крайней мере в тех реализациях которые я знаю). В
>общем и целом DDS немного другой взгляд на вещи на которые
>раньше смотрели через CORBA.

Конкретно openDDS использует Corba - http://www.opendds.org/faq.html#DDS_and_CORBA


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено аноним , 30-Июн-10 23:30 
Чем это лучше spread?

"Введение в систему обмена сообщениями ZeroMQ "
Отправлено oxyum , 01-Июл-10 01:11 
>Чем это лучше spread?

Для начала это просто разные решения. spread я не использовал, но доку почитал.

spread - это судя по всему миддлварь, zmq - это теперь просто библиотека которая даёт по сути обычный socket api к более хитрым вариантам сетевого взаимодействия.

PS: Ну а если вы хотите знать какой-то конкретный плюс, то в FAQ написано, что spread может посылать сообщения размером до приблизительно 100kb, у zmq таких ограничений нет.
PPS: у zmq больше биндингов к разным языкам, у spread python bindings давно протухли.
PPPS: а так же разработка spread по сути дела издохла, а zmq активно развивается.


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено klalafuda , 01-Июл-10 10:01 
> PPS: у zmq больше биндингов к разным языкам, у spread python bindings давно протухли.

Ну само по себе абсолютное количество биндингов - десять! двадцать! сто!!! - это сферический конь в том самом. Это все равно что абстрактное 'количество поддерживаемых платформ NetBSD'. Ага. А вот как начнешь работать с конкретным нужным биндингом там и полезут все косяки и грабли. Хотя в релизе типа 'поддерживаем'. Это так, мысли в слух.


"Введение в систему обмена сообщениями ZeroMQ "
Отправлено oxyum , 01-Июл-10 10:15 
>> PPS: у zmq больше биндингов к разным языкам, у spread python bindings давно протухли.
>
>Ну само по себе абсолютное количество биндингов - десять! двадцать! сто!!! -
>это сферический конь в том самом. Это все равно что абстрактное
>'количество поддерживаемых платформ NetBSD'. Ага. А вот как начнешь работать с
>конкретным нужным биндингом там и полезут все косяки и грабли. Хотя
>в релизе типа 'поддерживаем'. Это так, мысли в слух.

Дык это всё понятно, но товарищ аноним хотел что-то узнать, я ему что-то и ответил! :)