Прежде всего, добро пожаловать в мир Zen-of-Zero, где латентность имеет наибольшее значение
ПРОЛОГ:
ZeroMQ был разработан Питером ХИНТЖЕНСОМ 'команда опытных мастеров - Martin SUSTRIK, которая будет названа первой. Дизайн был профессионально разработан, чтобы избежать ненужных задержек. Итак, спросить о наличии (ограниченной) настойчивости? Нет, сэр, не подтверждено - PUB/SUB
Масштабируемый шаблон формального шаблона обмена Архетип не будет иметь его встроенным, верно из-за дополнительных проблем и снижения производительности и масштабируемости (задержка надстройки, обработка надстройки, дополнительное управление памятью).
Если нужно (ограниченное) постоянство (при отсутствии соединений с агентами на удаленной стороне SUB), не стесняйтесь внедрять его на стороне приложения,или можно спроектировать и реализовать новый ZMTP-совместимый такой образец поведения Archetype, расширяющий структуру ZeroMQ, если такая работа переходит в стабильное и общедоступное состояние, но не запрашивает высокопроизводительный стандарт с латентной задержкой PUB/SUB
, имеющийотполировал почти линейную масштабируемость ad astra, чтобы измениться в этом направлении. Это определенно не тот путь.
Решение?
Сторона приложения может легко реализовать добавленную логику, используя круговые буферы с двумя указателями, работая в некотором роде (* на стороне приложения) - Постоянство-ПРОКСИ , но перед отправителем PUB
.
Ваш дизайн может быть успешнымв выдавливании дополнительного соуса из внутренних деталей ZeroMQ в случае, если ваш дизайн также использует недавно предоставленный встроенный компонент ZeroMQ- socket_monitor
для настройки дополнительного контрольного слоя и получения там поток событий , если смотреть "изнутри" на стороне PUB Context
- экземпляр, где некоторые дополнительные события, связанные с сетью и управлением соединением, могут пролить больше света на (* на стороне приложения) - Постоянство-ПРОКСИ
Тем не менее, имейте в виду, что
_zmq_socket_monitor()_
*Метод 1046 * поддерживает только транспорты с установлением соединения, то есть TCP, IPC и TIPC.
так что об этом можно забыть в случае, если планировалось использовать любой из чрезвычайно интересных транспортных классов { inproc:// | norm:// | pgm:// | epgm:// | vmci:// }
Heads up!
Есть неточные, если не ошибочные, сведения от почетного члена нашего Сообщества smac89 , который изо всех сил старался ответить на ваш дополнительный интерес, выраженный в комментарии:
"... zmq оптимизирует публикацию по темам? например, если вы продолжаете публиковать на скорости около 100 символов topic
быстро, действительно ли он отправляет topic
каждый раз или он сопоставляется с некоторым int и впоследствии отправляет int ...? "
говорю вам:
"Он всегда будет публиковать topic.
Когда я использую pub-sub
pattern, я обычно публикую сначала topic
, а затем реальное сообщение, поэтому в подписчике я просто читаю первый кадр , игнорирую его и затем читаю реальное сообщение "
ZeroMQ не работает таким образом. Нет ничего как «отдельный» <topic>
, за которым следует <message-body>
, а скорее как
TOPIC
и механизация тематическая фильтрация работает совсем по-другому.
1) Вы никогда не знаете, кто .connect()
-s:
, т. Е. Можно быть почти уверенным, что версия 2.x до версии 4.2+ будет по-разному обрабатывать фильтрацию тем (ZMTP: RFC определяет начальное квитирование версии с возможностью, чтобы позволить Context
-экземпляру решить, какую версию тематической фильтрации нужно будет использовать:
ver 2.x , используемая для перемещения всех сообщенийвсем одноранговым узлам, и пусть все SUB-стороны (из версии 2.x +) доставят сообщение (и пусть * SUB
-side * Context
-instance обрабатывает локальный * 1115Обработка фильтра * -list )
, тогда как
ver 4.2 + обязательно выполнит обработку фильтра topic
-list на ** стороне PUB Context
-instance (увеличивается загрузка ЦП, наоборот - сетевой транспорт), поэтому вашей стороне SUB никогда не будет доставлен байт «бесполезного» * 1124 * чтения «неподписанных» для сообщений.
2) (можете, но) нет необходимости разделять «тему» на первый кадр подразумеваемого таким образом многокадрового сообщения. Возможно, как раз наоборот (это довольно противоречивый шаблон для высокопроизводительной, распределенной системы с низкой задержкой.
Процесс фильтрации тем определен и работает побайтно , отСлева направо, сопоставление с шаблоном для каждого значения элемента списка тем повторяет полезную нагрузку доставленного сообщения.
Добавление дополнительных данных, дополнительная обработка управления кадрами только и только увеличивает сквозную задержкуи непроизводительные затраты. Никогда не стоит делать это вместо правильной распределенной системы проектных работ.
ЭПИЛОГ:
Нет ни легких побед, ни каких-либонизко висящие фрукты в профессиональном распределенных системах дизайне, тем меньше, если с малой задержкой или со сверхнизкой задержкой являются проектными целями.
С другой стороныУбедитесь, что ZeroMQ Framework был создан с учетом этого, и эти усилия увенчались стабильным, в конечном счете, хорошо сбалансированным набором инструментов для интеллектуального (по замыслу), быстрого (в рабочем состоянии)и) и масштабируемые (как может завидовать ад) службы сигнализации / обмена сообщениями, которые люди любят правильно использовать из-за этой мудрости дизайна.
Желаю вам жить счастливо с ZeroMQ, как есть, и не стесняйтесь добавлять любой дополнительный набор функций"перед" слоя ZeroMQ, внутри выбранного набора приложений.