Страница 1 из 1

ZeroMQ для LabVIEW

Добавлено: 30 апр 2019, 21:13
Vitekkz88
Привет всем! Недавно познакомился с новой для меня технологией передачи данных - ZeroMQ. На форуме нет такой темы, хотя технология очень интересная и поддерживается многими языками программирования, в том числе и в LabVIEW. Технология поставляется в виде бесплатной библиотеки, является кроссплатформенной и позволяет создавать распределенные и параллельные приложения. Целевое применение: активный сетевой и/или межпроцессный обмен данными. В основе этой технологии лежат программные интерфейсы – сокеты, и обмен сообщениями(MQ – Message Queue, очередь сообщений).
Немного информации из истории, открытых источников и описания библиотеки:
Николя Пиeль (Nicolas Piël) опубликовал введение в технологию ZeroMQ (0MQ), позволяющую организовать быстрый асинхронный обмен сообщениями между высоконагруженными приложениями. Сетевое взаимодействие организовано через новый уровень сетевого стека, который может использовать в качестве транспорта TCP, UDP, PGM, IPC и т.п. Система очень быстрая, тесты производительности показали способность обработать на обычном сервере более 8 млн. сообщений в секунду.(интересен размер сообщений и конфиг сервера, т.к. этой информации не приводится).
Производительность
ZeroMQ действительно работает существенно быстрее, чем большинство реализаций AMQP, и это достигается:
1)отсутствием поддержки AMQP и соответствующих этому протоколу издержек
2)использованием эффективных транспортов, например широковещательного протокола с гарантированной доставкой или оригинальной разработки ZeroMQ - набора вызовов для многопотоковой рассылки сообщений нескольким адресатам.
3)использованием агрегированной отправки нескольких сообщений в одном TCP-пакете, это тоже разработка ZeroMQ, что позволяет не только минимизировать издержки сетевого протокола, но и уменьшить количество системных вызовов.
3)Простота использования. С помощью API ZeroMQ передача сообщения действительно проще, чем при использовании сокетов, где необходимо следить за длиной сокетного буфера, а в ZeroMQ - просто инициировать отправку сообщения. Дробление (или агрегация) и отправка делается API в отдельном потоке, асинхронно с выполнением пользовательского кода. Асинхронная природа методов ZeroMQ особенно удобна для реализации механизмов событийной обработки. Немаловажным удобством в ZeroMQ является отказ от типизации сообщений передаваемых интерфейсом - сообщения никак не интерпретируются интерфейсом. Таким образом, через ZeroMQ можно передавать что угодно, например сообщения JSON или двоичные форматированные данные типа BSON, Protocol Buffers или Thrift, не чувствуя при этом никаких неудобств.
Масштабируемость
Являясь низкоуровневым интерфейсом, ZeroMQ, тем не менее, предоставляет множество опций, например сокет ZeroMQ может быть подключенным к нескольким адресатам и равномерно распределять нагрузку по сети(в том числе поддержка стратегии «Справедливая очередь» и «Сбалансированная нагрузка»). Другая возможность - это входное мультиплексирование, когда один сокет может получать сообщения от множества отправителей. В ZeroMQ реализована децентрализованная схема обмена сообщениями. Это, в комбинации с высокой производительностью, дает возможность построения распределенных систем любой сложности. Нам не нужно заботиться, кто должен быть запущен первым: сервер или клиент. Передача данных в формате сообщений освобождает разработчиков от необходимости синхронизации приёма потока данных. Мы можем запускать клиентское приложение на нескольких машинах одновременно и это не вызовет никаких коллизий на стороне сервера при отправке ему запросов и получении ответа клиентом. Так же один клиент способен подключаться и обрабатывать все входящие сообщения либо фильтровать только необходимые.

Работа с библиотекой предполагает использование её с двух сторон: как на стороне клиента, так и на стороне сервера. Однако, среда разработки значения не имеет. Как правило, новые версии библиотеки дорабатываются в плане новых паттернов и типов сокетов, сохраняя при этом обратную совместимость. Авторы рекомендуют использовать одну и ту же версию библиотеки, как на стороне клиента, так и на стороне сервера. Линк на описание технологии: : http://zguide.zeromq.org/page:all#ZeroM ... al-Carrier
Автор LabVIEW-обёртки оригинальной библиотеки: http://labview-zmq.sourceforge.net/?home

Личный опыт использования
В настоящий момент реализовано несколько проектов с использованием ZeroMQ на стороне LabVIEW в качестве клиента и приложений на С/C++ в качестве сервера. При построении приложений с множеством сервисов и использованием различных платформ разработок – технология оправдала себя полностью как в плане простоты использования, так и в плане гибкости разработки/удобстве сопровождения ПО. Так же производитель говорит о возможности скомпилировать библиотеку для использования её на ARM. К сожалению, у меня нет cRIO, чтобы развернуть приложение с использованием ZeroMQ, однако я нашел информацию и гайд по этому вопросу с положительным результатом.
P.S.:если тема будет интересна, то напишу продолжение о принципах обмена сообщениями, о самих сообщениях, о динамическом обнаружении, рассмотрим понятие «сетевой брокер» и другие ньансы использования LabVIEW-обёртки для ZeroMQ-библиотеки. Фидбэк приветствуется!

Re: ZeroMQ для LabVIEW

Добавлено: 07 июл 2020, 18:33
alextman
День добрый!
Мне эта тема очень интересна. Если не трубно поделитесь своими познаниями в этой области

Re: ZeroMQ для LabVIEW

Добавлено: 08 июл 2020, 19:46
Vitekkz88
alextman писал(а): 07 июл 2020, 18:33 День добрый!
Мне эта тема очень интересна. Если не трубно поделитесь своими познаниями в этой области
Здравствуйте! Какие у Вас возникли вопросы? Что-то не получается? Какие-то трудности с архитектурой проекта с использованием ZeroMQ?
Опишите свою задачу и цели, тогда попробуем разобраться.

Re: ZeroMQ для LabVIEW

Добавлено: 20 июл 2021, 22:49
Artem.spb
Если говорить о голом :labview: , то есть ли преимущества по сравнению с Network Stream и сетевыми переменными?

Re: ZeroMQ для LabVIEW

Добавлено: 21 июл 2021, 23:53
Borjomy_1
Если нет поддержки типизации данных, то голый TCP read/write чем не устраивает? :dntknw: