2013-05-03 2 views
3

Я хотел бы знать, если zmq уже решает следующую проблему (или) приложение, сидящее поверх zmq, должно позаботиться об этом.Как подтолкнуть все данные к поздним подписчикам?

1) Центральный издатель, который публикует данные для всех подписчиков. Эти данные носят статический характер, что-то вроде конфигурации. Данные могут быть изменены в любой момент времени.
2) Несколько подписчиков подписываются на письма от этого издателя. Издатель может присоединиться в любой момент времени.
3) Если данные изменяются, издатель должен просто опубликовать diff для существующих подписчиков.
4) Если подписчик подключается позже, издатель должен опубликовать все данные (текущую конфигурацию) новому подписчику.

Руководство Zeromq предлагает следующее для решения синдрома Slow Joiner, но это не решает проблемы выше. http://zguide.zeromq.org/page:all#Slow-Subscriber-Detection-Suicidal-Snail-Pattern

ответ

2

Проблема, которую я вижу с вашей настройкой, заключается в том, что она требует, чтобы все подписчики имели одно и то же состояние. Если все подписчики находятся в версии 7 и вы публикуете diff с 7 по 8, все они обновляются до версии 8. Но для этого требуется жестко связанная синхронизация состояний между узлами. Как бы вы справились с ситуацией, когда подписчики не синхронизировались?

Рассмотрим эту альтернативную установку:

  • «издатель» имеет один МАРШРУТИЗАТОР сокет, который он связывает
  • каждый «абонент» имеет один ДИЛЕРА разъем, который подключается к роутеру
    • может» t используйте гнездо REQ, потому что это запретит отправку «обновлений-подсказок» (подробности следует)
  • , когда абонент i присоединяется к t он сеть, он посылает «обновить» запрос на издатель, так что издатель знает о личности абонента и его текущей версии version[i]
    • издатель отвечает и переформатирование, необходимого для приведения подписчика i до даты
  • , если изменения данных издателя (т.е., Новая версия) он посылает «Update-подсказку» для всех известных абонентов
    • когда абонент получает «Update-подсказку,» он выполняет «Update» Запрос
  • (необязательно) абоненты периодически отправлять «обновить» запрос (нечастый опрос)

Этого подход имеет следующие преимущества:

  • издатель сервер; абоненты - это клиенты
  • Издатель никогда не инициирует отправку каких-либо фактических данных - он реагирует только на запросы клиентов (то есть «подсказки обновления» не учитываются при отправке фактических данных)
  • подписчиков все независимо сохраняя актуальность (возможная согласованность), даже если они могут быть не синхронизированы с перерывами
+0

Несколько вопросов: 1. Зачем посылать «подсказку обновления» вместо прямой отправки текущего состояния? 2. Может ли «издатель» обнаружить «подписчика», покидающего сеть, чтобы он больше не пытался отправлять обновления? – khuttun

3

Образец клонирования из Руководства делает именно то, что вы хотите.

Смежные вопросы