ZeroMQ (также обозначаемый как ØMQ , 0MQ или ZMQ ) - это библиотека асинхронного обмена сообщениями , предназначенная для использования в распределенных или параллельных приложениях. Он предоставляет очередь сообщений , но в отличие от промежуточного программного обеспечения , ориентированного на сообщения , система ZeroMQ может работать без специального брокера сообщений . API библиотеки спроектирован так, чтобы напоминать сокеты Беркли .
Разработчики) | iMatix |
---|---|
Стабильный выпуск | 4.3.4 [1] / 17 января 2021 г . |
Репозиторий | |
Написано в | C ++ |
Платформа | Кроссплатформенность |
Тип | Очередь сообщений , структура параллелизма |
Лицензия | LGPLv3 + с исключением статического связывания |
Веб-сайт | zeromq |
ZeroMQ разработан большим сообществом участников, основанным iMatix, которому принадлежат доменное имя и товарные знаки. Для многих популярных языков программирования существуют сторонние привязки.
Технология
ZeroMQ API предоставляет сокеты (своего рода обобщение традиционных IP и сокетов домена Unix ), каждый из которых может представлять соединение « многие ко многим» между конечными точками . Работая с детализацией по сообщениям, они требуют использования шаблона обмена сообщениями и особенно оптимизированы для этого типа шаблона.
Основные шаблоны ZeroMQ:
- Запрос – ответ
- Подключает набор клиентов к набору сервисов. Это шаблон удаленного вызова процедур и распределения задач.
- Опубликовать – подписаться
- Связывает набор издателей с набором подписчиков. Это шаблон распределения данных.
- Двухтактный (трубопровод)
- Соединяет узлы по схеме разветвления / разветвления, которая может иметь несколько шагов и циклов. Это параллельный шаблон распределения и сбора задач.
- Эксклюзивная пара
- Соединяет две розетки эксклюзивной парой. (Это расширенный низкоуровневый шаблон для конкретных случаев использования.)
Каждый шаблон определяет определенную топологию сети. Запрос-ответ определяет так называемую «служебную шину», публикация-подписка определяет «дерево распределения данных», а push-pull определяет «параллельный конвейер». Все шаблоны намеренно разработаны таким образом, чтобы их можно было бесконечно масштабировать и, таким образом, можно было использовать в масштабе Интернета. [2]
Любое сообщение через сокет обрабатывается как непрозрачный двоичный объект данных. Доставка подписчику может быть автоматически отфильтрована по ведущей строке большого двоичного объекта. Доступные виды транспорта сообщений включают TCP , PGM (надежную многоадресную рассылку), межпроцессное взаимодействие ( IPC ) и межпотоковое взаимодействие (ITC).
Базовая библиотека ZeroMQ работает очень хорошо благодаря своей внутренней потоковой модели и может превзойти обычные приложения TCP с точки зрения пропускной способности за счет использования метода автоматической пакетной обработки сообщений. [3] [4]
ZeroMQ реализует ZMTP, протокол передачи сообщений ZeroMQ. [5] ZMTP определяет правила обратной совместимости, расширяемые механизмы безопасности, кадрирование команд и сообщений, метаданные соединения и другие функции транспортного уровня. Все больше проектов реализуют ZMTP напрямую в качестве альтернативы использованию полной реализации ZeroMQ. [6]
История
Генеральный директор iMatix Питер Хинтьенс зарегистрировал домен zeromq.org в мае 2007 года и начал проект ZeroMQ вместе с Мартином Сустриком, который был его архитектором и ведущим разработчиком до декабря 2011 года.
30 марта 2010 года Хинтьенс объявил, что iMatix (первоначальный разработчик протокола Advanced Message Queuing Protocol ) покинет рабочую группу AMQP и не планирует поддерживать AMQP / 1.0 в пользу значительно более простого и быстрого ZeroMQ. [7] [8]
В 2011 году ЦЕРН исследовал способы унификации решений промежуточного программного обеспечения, используемых для работы ускорителей ЦЕРН. В исследовании CERN сравнивались две реализации с открытым исходным кодом: CORBA , Ice , Thrift , ZeroMQ, YAMI4, [9] RTI и Qpid (AMQP), и ZeroMQ получил наивысший балл, в частности, за его универсальность, включая легкую адаптируемость к LynxOS . [4]
В начале 2012 года два первоначальных разработчика разделили ZeroMQ как Crossroads I / O. [10] [11] Мартин Сустрик запустил nanomsg, [12] переработку базовой библиотеки ZeroMQ. [13]
В августе 2012 года Донмин Ю объявил о своей чистой Java-конверсии ZeroMQ, JeroMQ. [14] Это послужило поводом для создания новых полнофункциональных портов ZeroMQ, таких как NetMQ для C # [15] и zmq.rs для Rust. [16]
В марте 2013 года Питер Хинтьенс объявил о новом проекте протокола ZMTP на уровне проводов, который привносит в ZeroMQ расширяемые механизмы безопасности. [17] Вскоре после этого Мартин Хертон реализовал механизм аутентификации и шифрования CurveZMQ [18] в основной библиотеке.
Процесс разработки
Сообщество ZeroMQ в основном использует Контракт на строительство Коллективного кодекса (C4) [19] в качестве контракта на разработку. C4 вдохновлен процессами Википедии и моделью GitHub fork + pull request . Он фокусируется на упрощении участия новых участников и уменьшении зависимости от старых участников.
Смотрите также
- Xitami
- Gearman
- Эндуро / X
- MQTT
Рекомендации
- ^ "Выпуск 4.3.4" . 17 января 2021 . Проверено 2 февраля 2021 года .
- ^ Уровень масштабируемости попадает в интернет-стек
- ^ «Почему ØMQ имеет более высокую пропускную способность, чем TCP, хотя он построен на основе TCP?» . ZeroMQ FAQ . Проверено 8 июня 2013 года .
- ^ а б «Тенденции в области промежуточного программного обеспечения и лидеры рынка 2011» . Проверено 8 июня 2013 года .
- ^ «Протокол передачи сообщений ZeroMQ» . Проверено 8 июня 2013 года .
- ^ «Поиск на GitHub: ZMTP» . Проверено 8 июня 2013 года .
- ^ «iMatix прекратит поддержку OpenAMQ к 2011 году» . почтовый ящик openamq-dev. Архивировано из оригинала на 2016-03-05 . Проверено 5 сентября 2018 года .
- ^ «Что не так с AMQP (и как это исправить)» . iMatix Corporation . Проверено 14 июля 2012 года .
- ^ «Инспирель ЯМИ4» . Проверено 14 июля 2012 года .
- ^ «ZeroMQ и Crossroads I / O: раздвоение торговых марок» . LWN.net . Проверено 14 июля 2012 года .
- ^ «Перекресток ввода / вывода» . Проверено 14 июля 2012 года .
- ^ "наномсг" . Проверено 8 июня 2013 года .
- ^ «Почему я должен [sic] писать ZeroMQ на C, а не на C ++» .
- ^ "jeromq - java pojo zeromq" . Список рассылки zeromq-dev . Проверено 23 мая 2013 года .
- ^ "NetMQ" . GitHub . Проверено 23 мая 2013 года .
- ^ "zmq.rs" . GitHub . Дата обращения 24 октября 2020 .
- ^ «Защита ZeroMQ: проект протокола ZMTP v3.0» . Hintjens.com . Проверено 23 мая 2013 года .
- ^ curvezmq.org
- ^ «Коллективный кодекс строительного договора (C4.1)» . ZeroMQ RFC . Проверено 23 мая 2013 года .
Внешние ссылки
- Официальный веб-сайт
- Сообщество ØMQ на GitHub
- Мартин Сустрик, Мартин Лучина (20 января 2010 г.). 0MQ: новый подход к обмену сообщениями - LWN.net
- ZeroMQ is the Answer (доклад на конференции PHP UK 2012)
- ZeroMQ введение
- Почему ZeroMQ? (вступительное видео)
- ZeroMQ: Modern & Fast Networking Stack (обзор с примерами Ruby)
- ØMQ: Теоретическая основа