Из Википедии, бесплатной энциклопедии
  (Перенаправлен из Publish-subscribe )
Перейти к навигации Перейти к поиску

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

Публикация – подписка является аналогом парадигмы очереди сообщений и обычно является частью более крупной системы промежуточного программного обеспечения, ориентированной на сообщения. Большинство систем обмена сообщениями поддерживают как модель pub / sub, так и модель очереди сообщений в своем API ; например, служба сообщений Java (JMS).

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

Фильтрация сообщений [ править ]

В модели публикации-подписки подписчики обычно получают только подмножество всех опубликованных сообщений. Процесс выбора сообщений для приема и обработки называется фильтрацией . Существует две распространенных формы фильтрации: по тематике и по содержанию.

В тематической системе сообщения публикуются в «темах» или именованных логических каналах. Подписчики в тематической системе будут получать все сообщения, опубликованные по темам, на которые они подписаны. Издатель отвечает за определение тем, на которые подписчики могут подписаться.

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

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

Топологии [ править ]

Во многих системах публикации / подписки издатели отправляют сообщения промежуточному брокеру сообщений или шине событий , и подписчики регистрируют подписки у этого брокера, позволяя брокеру выполнять фильтрацию. Брокер обычно выполняет функцию сохранения и пересылки для маршрутизации сообщений от издателей к подписчикам. Кроме того, брокер может определять приоритеты сообщений в очереди перед маршрутизацией.

Подписчики могут зарегистрироваться для получения определенных сообщений во время сборки, инициализации или выполнения. В системах с графическим интерфейсом пользователя можно запрограммировать подписчиков для обработки пользовательских команд (например, нажатия кнопки), что соответствует регистрации времени сборки. Некоторые платформы и программные продукты используют файлы конфигурации XML для регистрации подписчиков. Эти файлы конфигурации считываются во время инициализации. Самая изощренная альтернатива - это когда подписчиков можно добавлять или удалять во время выполнения. Этот последний подход используется, например, в триггерах базы данных , списках рассылки и RSS .

По промежуточного слоя службы распределения данных (DDS) посредник не используется. Вместо этого каждый издатель и подписчик в системе публикации / подписки обмениваются метаданными друг о друге с помощью многоадресной IP-рассылки . Издатель и подписчики кэшируют эту информацию локально и маршрутизируют сообщения на основе обнаружения друг друга в общей осведомленности. Фактически, для архитектуры без брокера требуется система публикации / подписки для построения оверлейной сети, которая обеспечивает эффективную децентрализованную маршрутизацию от издателей к подписчикам. Джон Кляйнберг показал, что эффективная децентрализованная маршрутизация требует навигационных топологий Small-World . Такие топологии Small-World обычно реализуются децентрализованными или федеративными системами публикации / подписки.[1] Системы публикации / подписки с учетом местоположения [2] создают топологии Small-World, которые направляют подписки через короткие расстояния и недорогие каналы, тем самым сокращая время доставки подписки.

История [ править ]

Одной из первых публично описанных систем публикации и подсистем была «новостная» подсистема Isis Toolkit, описанная на симпозиуме Ассоциации вычислительной техники (ACM) по принципам операционных систем (SOSP '87) в 1987 году в статье «Использование виртуальных ресурсов». Синхронность в распределенных системах . 123–138 ». [3]

Преимущества [ править ]

Слабая связь [ править ]

Издатели слабо связаны с подписчиками и даже не должны знать об их существовании. Поскольку тема находится в центре внимания, издателям и подписчикам разрешается игнорировать топологию системы. Каждый из них может продолжать работать в обычном режиме независимо от другого. В традиционной парадигме тесной связи клиент-сервер клиент не может отправлять сообщения на сервер, пока серверный процесс не запущен, а также сервер не может получать сообщения, если клиент не запущен. Многие системы публикации / подписки разделяют не только местонахождение издателей и подписчиков, но и временно. Распространенной стратегией, используемой аналитиками промежуточного программного обеспечения с такими системами публикации / подписки, является снятие издателя, чтобы позволить подписчику проработать отставание (формарегулирование пропускной способности ).

Масштабируемость [ править ]

Pub / sub обеспечивает лучшую масштабируемость, чем традиционный клиент-сервер, за счет параллельной работы, кэширования сообщений, древовидной или сетевой маршрутизации и т. Д. Однако в некоторых типах тесно связанных корпоративных сред большого объема, таких как системы масштабирование до центров обработки данных с тысячами серверов, совместно использующих инфраструктуру pub / sub, существующие системы поставщиков часто теряют это преимущество; масштабируемость для общедоступных / дополнительных продуктов при высокой нагрузке в этих условиях является исследовательской задачей.

С другой стороны, за пределами корпоративной среды парадигма pub / sub доказала свою масштабируемость до объемов, намного превышающих объемы одного центра обработки данных, обеспечивая распределенный обмен сообщениями в Интернете через протоколы веб-синдикации, такие как RSS и Atom . Эти протоколы синдикации допускают более высокую задержку и отсутствие гарантий доставки в обмен на способность даже веб-сервера низкого уровня распространять сообщения (потенциально) на миллионы отдельных узлов-подписчиков.

Недостатки [ править ]

Наиболее серьезные проблемы с системами публикации / подписки являются побочным эффектом их главного преимущества: отделения издателя от подписчика.

Проблемы с доставкой сообщений [ править ]

Система pub / sub должна быть тщательно спроектирована, чтобы иметь возможность предоставлять более сильные системные свойства, которые могут потребоваться конкретному приложению, например гарантированную доставку.

  • Брокер в системе публикации / подписки может быть спроектирован так, чтобы доставлять сообщения в течение определенного времени, но затем прекращать попытки доставки, независимо от того, получил ли он подтверждение успешного получения сообщения всеми подписчиками. Разработанная таким образом система pub / sub не может гарантировать доставку сообщений любым приложениям, которым может потребоваться такая гарантированная доставка. Более тесная связь конструкций такой пары издателя и подписчика должна быть обеспечена за пределами архитектуры публикации / подписки для обеспечения такой гарантированной доставки (например, требуя от подписчика публиковать сообщения о получении).
  • Издатель в системе публикации / подписки может предположить, что подписчик слушает, хотя на самом деле это не так. Завод может использовать систему публикации / подписки, в которой оборудование может публиковать сведения о проблемах или сбоях для подписчика, который отображает и регистрирует эти проблемы. Если регистратор выходит из строя (выходит из строя), издатели проблем с оборудованием не обязательно получат уведомление об отказе регистратора, а сообщения об ошибках не будут отображаться или записываться каким-либо оборудованием в системе публикации / подсистемы. Это также проблема проектирования альтернативных архитектур обмена сообщениями, таких как система клиент / сервер. В системе клиент / сервер при выходе из строя регистратора ошибок система получит указание на отказ регистратора ошибок (сервера). Однако система клиент / сервер должна будет справиться с этим отказом, подключив резервные серверы журналов к сети или динамически порождая резервные серверы журналов.Это усложняет дизайн клиента и сервера, а также архитектуру клиент / сервер в целом. Однако в системе pub / sub к системе могут быть добавлены избыточные подписчики регистрации, которые являются точными копиями существующего регистратора, чтобы повысить надежность регистрации без какого-либо воздействия на какое-либо другое оборудование в системе. В системе pub / sub функция гарантированной регистрации сообщений об ошибках может быть добавлена ​​постепенно, после реализации основных функций регистрации сообщений о проблемах с оборудованием.В системе pub / sub функция гарантированной регистрации сообщений об ошибках может быть добавлена ​​постепенно, после реализации основных функций регистрации сообщений о проблемах с оборудованием.В системе pub / sub функция гарантированной регистрации сообщений об ошибках может быть добавлена ​​постепенно, после реализации основных функций регистрации сообщений о проблемах с оборудованием.

Шаблон публикации / подписки хорошо масштабируется для небольших сетей с небольшим количеством узлов издателей и подписчиков и небольшим объемом сообщений. Однако по мере роста количества узлов и сообщений вероятность нестабильности увеличивается, ограничивая максимальную масштабируемость публикации / подсети. Примеры нестабильности пропускной способности в больших масштабах включают:

  • Скачки нагрузки - периоды, когда абонент запрашивает насыщение пропускной способности сети, за которыми следуют периоды низкого объема сообщений (недостаточно используемая пропускная способность сети)
  • Замедления - по мере того, как все больше и больше приложений используют систему (даже если они обмениваются данными по отдельным каналам публикации / подканала), поток сообщений к отдельному подписчику будет замедляться.

Для систем pub / sub, которые используют брокеров (серверы), аргумент для брокера для отправки сообщений подписчику является внутриполосным и может быть предметом проблем с безопасностью. Брокеры могут быть обмануты, отправив уведомления не тому клиенту, что усилит запросы на отказ в обслуживании для клиента. Сами брокеры могут быть перегружены, поскольку они выделяют ресурсы для отслеживания созданных подписок.

Даже с системами, которые не полагаются на брокеров, подписчик может получать данные, на получение которых он не уполномочен. Неавторизованный издатель может иметь возможность вводить неправильные или опасные сообщения в систему публикации / подписки. Это особенно верно для систем, которые транслируют или многоадресно рассылают свои сообщения. Шифрование (например, безопасность транспортного уровня (SSL / TLS)) может предотвратить несанкционированный доступ, но не может предотвратить внесение вредоносных сообщений авторизованными издателями. Архитектуры, отличные от pub / sub, такие как системы клиент / сервер, также уязвимы для авторизованных отправителей сообщений, которые ведут себя злонамеренно.

См. Также [ править ]

  • Atom , еще один хорошо масштабируемый протокол веб-синдикации
  • Служба распространения данных (DDS)
  • Событийно-ориентированное программирование
  • Архитектура высокого уровня
  • Протокол управления группами Интернета (IGMP)
  • Брокеры сообщений
  • Очередь сообщений
  • Образец наблюдателя
  • Проблема производителя и потребителя
  • Технология push [1]
  • RSS , хорошо масштабируемый протокол веб-синдикации
  • Usenet
  • WebSub , реализация pub / sub

Ссылки [ править ]

  1. ^ а б Чен, Чен; Ток, Йоав; Гирдзияускас, Шарунас (2018). «BeaConvey: совместный дизайн наложения и маршрутизации для тематической публикации / подписки в сетях Small-World Networks» . Материалы 12-й Международной конференции ACM по распределенным и событийным системам - DEBS '18 . Гамильтон, Новая Зеландия: ACM Press: 64–75. DOI : 10.1145 / 3210284.3210287 . ISBN 9781450357821. S2CID  43929719 .
  2. ^ Рахимиан, Фатемех; Ле Нгуен Хуу, Тхинь; Гирдзияускас, Шарунас (2012), Гёшка, Карл Михаэль; Haridi, Саиф (ред.), "Регион-Осведомленность в Равный-Peer Publish / Subscribe сети", распределенных приложений и взаимодействующих систем , Springer Berlin Heidelberg, 7272 , стр 45-58,. Дои : 10.1007 / 978-3 -642-30823-9_4 , ISBN 9783642308222
  3. ^ Бирман, К .; Джозеф, Т. (1987). «Использование виртуальной синхронности в распределенных системах». Материалы одиннадцатого симпозиума ACM по принципам операционных систем - SOSP '87 . С. 123–138. DOI : 10.1145 / 41457.37515 . ISBN 089791242X. S2CID  7739589 .

Внешние ссылки [ править ]

  • Amazon SNS - сервис Pub / Sub от AWS
  • Сервисная шина Azure - служба Pub / Sub от Microsoft Azure
  • Google Cloud Pub / Sub - служба Pub / Sub от Google Cloud Platform
  • IBM MQ
  • XMPP XEP-0060: публикация-подписка
  • Брокер сообщений MQTT с парадигмой публикации и подписки
  • Портал OMG DDS
  • Опубликовать пример подписки на C ++
  • Synapse - это платформа C ++, реализующая шаблон публикации-подписки.