Что такое отправка сообщений по модели «издатель – подписчик» (Pub/Sub)
Обмен сообщениями по модели «издатель – подписчик» (Pub/Sub) – это асинхронный метод связи, позволяющий разработчикам легко создавать в облаке сложные с точки зрения архитектуры приложения с широкими функциональными возможностями. В современной облачной архитектуре приложения разделяют на небольшие независимые стандартные блоки – сервисы. Обмен сообщениями по модели Pub/Sub обеспечивает мгновенные уведомления о событиях для этих распределенных систем. Он поддерживает масштабируемую и надежную связь между независимыми программными модулями.
Как работает обмен сообщениями pub/sub
Система «издатель – подписчик» (pub/sub) состоит из четырех ключевых компонентов.
Сообщения
Сообщение – это коммуникационные данные, передаваемые от отправителя к получателю. Типы данных сообщений могут быть любыми – от строк до сложных объектов, представляющих текст, видео, данные датчиков, аудио или другой цифровой контент.
0368 — Twitch pub/sub and webhooks
Темы
Каждое сообщение имеет тему, связанную с ним. Тема действует как канал-посредник между отправителями и получателями. Система ведет список получателей, которые заинтересованы в сообщениях на эту тему.
Подписчики
Абонент – это получатель сообщения. Подписчики должны зарегистрироваться (или подписаться) на интересующие их темы. Они могут параллельно выполнять разные функции или делать что-то другое с сообщением.
Издатели
Издатель – это компонент, который отправляет сообщения. Он создает сообщения по теме и отправляет их только один раз всем подписчикам этой темы. Это взаимодействие между издателем и подписчиками является отношением «один ко многим». Издателю не нужно знать, кто использует передаваемую им информацию, а подписчикам не нужно знать, откуда приходит сообщение.
Каковы особенности системы обмена сообщениями pub/sub
Приложения, разработанные по схеме «издатель – подписчик» (pub/sub), имеют раздельную логику приложения и коммуникации. Инфраструктура обмена сообщениями разделяет доставку сообщений между издателями и подписчиками и передает сообщения разным подписчикам асинхронно.
Система связи pub/sub имеет следующие ключевые особенности.
Push-доставка
Обмен сообщениями pub/sub мгновенно отправляет асинхронные уведомления о событиях, когда сообщения публикуются в теме. Подписчики получают уведомление о появлении сообщения.
Множественные протоколы доставки
Темы подключаются к различным типам конечных точек, таким как очереди сообщений, бессерверные функции, HTTP-серверы и адреса электронной почты.
Fanout
Этот сценарий происходит, когда сообщение отправляется в тему, а затем реплицируется и передается на несколько конечных точек. Fanout обеспечивает асинхронные уведомления о событиях, которые, в свою очередь, позволяют выполнять параллельную обработку.
Pub/Sub Best Practices: Subscribing
Фильтрация
Функция фильтрации позволяет абоненту создать политику фильтрации сообщений. Таким образом, они будут получать только те уведомления, которые их интересуют, а не каждое сообщение, опубликованное в данной теме.
Мультиплексирование
В некоторых случаях издатели также могут быть подписчиками. Вы можете мультиплексировать потоки сообщений и создавать системы, которые связаны между собой внутренне согласованным образом.
Каковы преимущества обмена сообщениями между пабами?
Модель «издатель – подписчик» (pub/sub) позволяет реализовать архитектуру, управляемую событиями, которая необходима в ряде современных приложений. Вы можете использовать события для запуска и взаимодействия между развязанными сервисами. Событие – это изменение состояния или обновление, например, помещение товара в корзину.
Обмен сообщениями pub/sub предоставляет значительные преимущества разработчикам, создающим приложения, которые зависят от событий реального времени. Ниже мы приводим некоторые из этих преимуществ.
Исключение функции опроса
Темы сообщений обеспечивают мгновенную доставку на основе push, устраняя необходимость для потребителей сообщений периодически проверять новую информацию и обновления или создавать для этого опросы. Это способствует ускорению времени отклика и уменьшению задержки доставки, которая может быть особенно проблематичной в системах, где задержки недопустимы.
Динамическое нацеливание
Шаблон pub/sub упрощает, делает более естественным и менее подверженным ошибкам процесс обнаружения сервисов. Вместо того чтобы вести реестр пиров, чтобы приложение могло отправлять сообщения, издатель просто публикует сообщения в теме. Затем любая заинтересованная сторона подписывает свою конечную точку на эту тему и начинает получать эти сообщения. Несколько абонентов могут меняться, обновляться или исчезать, и система динамически подстраивается.
Разделение и масштабирование независимо друг от друга
Pub/sub делает программное обеспечение более гибким. Издатели и подписчики разделены и работают независимо друг от друга, что позволяет вам развивать и масштабировать их независимо друг от друга. Вы можете принять решение обрабатывать заказы одним способом в этом месяце, а в следующем – другим. Добавление или изменение функциональности не вызовет эффекта пульсации во всей системе, потому что pub/sub позволяет изменять принцип совместной работы.
Упрощение общения
Код для коммуникаций и интеграции – один из самых сложных для написания. Модель «издатель – подписчик» снижает сложность за счет удаления всех соединений «точка – точка» с одним соединением с темой сообщения. Тема будет управлять подписками, чтобы решать, какие сообщения должны быть доставлены на конечные точки. Меньшее количество обратных вызовов приводит к ослаблению взаимозависимости, а также к тому, что код легче поддерживать и расширять.
Надежность
Сервисы обмена сообщениями pub/sub часто обеспечивают очень высокую долговечность и минимум однократную доставку, храня копии одного и того же сообщения на нескольких серверах.
Безопасность
Темы сообщений проверяют подлинность приложений, которые пытаются опубликовать содержимое, и позволяют использовать зашифрованные конечные точки для защиты сообщений при передаче по сети.
В каких случаях используется обмен сообщениями pub/sub
Ниже мы описываем популярные случаи использования системы обмена сообщениями «издатель – подписчик» (pub/sub).
Выполнение параллельной асинхронной обработки
События, опубликованные в теме сообщений, могут побудить нескольких работников одновременно выполнять необходимые, но не связанные между собой задачи.
Доставка оповещений о приложениях и системах
Мгновенная доставка критических обновлений и асинхронных уведомлений о событиях затронутым компонентам приложения и вашим пользователям.
Управление асинхронными рабочими процессами
Передавайте события между приложениями, перемещайте данные между хранилищами данных, обновляйте распределенные кэши или обновляйте записи в бизнес-системах.
Баланс рабочих нагрузок
Пакетные задания для массовой обработки или разбиение крупной задачи на множество мелких и использование очереди сообщений для разделения работы между несколькими работниками.
Вход в несколько систем
Записывайте события для последующего анализа, собирайте журналы для операций и безопасности или архивируйте их, чтобы выполнить требования по резервному копированию или соблюдению нормативных требований.
Использование fanout для репликации
Репликация данных между производственной средой и средой разработки или разработка и тестирование с использованием реальных данных.
Бессерверные приложения
Направляйте асинхронные уведомления о событиях в распределенные функции и очереди сообщений для координации компонентов вашего бессерверного приложения.
Потоковая передача данных IoT
Шаблон pub/sub – это очень мощный способ взаимодействия устройств Интернета вещей (IoT). Устройства могут легко передавать данные на внутренние системы или друг другу.
В чем разница между очередями сообщений и обменом сообщениями pub/sub
Очередь сообщений – это форма асинхронной коммуникации, применяемая в бессерверных и микросервисных архитектурах. Сообщения хранятся в очереди, пока не будут обработаны и удалены. Очереди сообщений требуют, чтобы отправитель знал, с кем он обменивается сообщениями. Упорядочивание сообщений также может стать причиной проблем с трафиком в системе.
В отличие от нее модель «издатель – подписчик» (pub/sub) обеспечивает большую гибкость. Несколько заинтересованных абонентов могут получать сообщения одновременно и асинхронно. Издателям не нужно знать, кто является их подписчиками. Обработка сообщений является более масштабируемой и надежной, а также обеспечивает лучшую производительность.
Как AWS может поддержать ваши требования к передаче сообщений pub/sub
Amazon Web Services (AWS) имеет два сервиса, которые вы можете использовать для различных приложений с моделью «издатель – подписчик» (pub/sub).
API «издатель-подписчик» (Pub/Sub)
AWS AppSync – это полностью управляемый сервис для создания бессерверных API GraphQL и pub/sub, которые упрощают разработку приложений. Вы можете создать единую конечную точку, чтобы безопасно запрашивать, обновлять или публиковать данные.
API «издатель-подписчик», созданные на основе AWS AppSync, предоставляют возможность публиковать обновления данных в режиме реального времени в клиентах API с подпиской по бессерверным подключениям WebSocket. Вы можете создавать увлекательные впечатления в реальном времени для различных сценариев использования. Например, можно предоставлять актуальные результаты игр, финансовые данные, участие аудитории, голосование или функции, учитывающие местоположение, такие как карты и маркетинговые push-уведомления.
Ниже приведены примеры того, что можно выполнять с помощью AWS AppSync.
- Доступ к данным из одного или нескольких источников либо микросервисов с помощью одного сетевого запроса.
- Взаимодействие с данными и их обновление – даже в автономном режиме – с помощью синхронизации данных в автономном режиме, управления версиями и разрешения конфликтов.
- Оплата только запросов к своему API и сообщений, доставляемых подключенным клиентам в режиме реального времени.
Отправка сообщений по модели «издатель – подписчик» (Pub/Sub)
Простой сервис уведомлений Amazon (Amazon SNS) упрощает создание приложений с использованием модели обмена сообщениями pub/sub. Вы можете отправлять сообщения из своих приложений клиентам или другим приложениям масштабируемым и экономически эффективным способом.
Amazon SNS предлагает несколько функций:
- высокую пропускную способность для обмена push-уведомлениями между распределенными системами, микросервисами и бессерверными приложениями на основе событий по модели «многие ко многим»;
- шифрование сообщений и конфиденциальность трафика;
- распределение возможностей по категориям AWS, таким как аналитика, вычисления, контейнеры, базы данных, Интернет вещей (IoT), машинное обучение (ML), безопасность и хранилище.
Начните работу с Pub/Sub на AWS, создав бесплатный аккаунт AWS уже сегодня.
Источник: aws.amazon.com
Что такое Pub / Sub? Объяснение обмена сообщениями публикации / подписки
Изучение
На чтение 11 мин Просмотров 3к. Опубликовано 11.09.2021
Обмен сообщениями Publish / Subscribe, известный как pub / sub, представляет собой асинхронный метод связи между сервисами, используемый в бессерверных архитектурах и архитектурах микросервисов. По сути, модель Pub / Sub включает в себя:
- Издатель, который отправляет сообщение
- Подписчик, который получает сообщение через брокера сообщений.
В этой статье мы увидим, как работает pub / sub, рассмотрим плюсы и минусы и варианты использования, а также поделимся учебным пособием по настройке простого обмена сообщениями pub / sub.
Основы обмена сообщениями pub / sub
В связи с популярностью развязанных приложений и приложений на основе микросервисов правильная связь между компонентами и службами имеет решающее значение для общей функциональности приложения. Обмен сообщениями Pub / Sub помогает в этом двумя важными способами:
- Позволяет разработчикам легко создавать независимые приложения с помощью надежного метода связи.
- Предоставление пользователям возможности легко создавать архитектуры, управляемые событиями.
Модель pub / sub позволяет асинхронно транслировать сообщения по нескольким разделам приложений.
Основной компонент, обеспечивающий эту функциональность, называется темой. Издатель отправит сообщения в тему, а тема мгновенно отправит сообщение всем подписчикам. Это то, что отличает модель Pub / Sub от традиционных брокеров сообщений, где очередь сообщений будет пакетировать отдельные сообщения, пока пользователь или служба не запросит эти сообщения и не получит их.
Какое бы сообщение ни было в модели Pub / Sub, оно будет автоматически отправлено всем подписчикам. Единственное исключение — созданные пользователями политики для подписчиков, которые будут фильтровать сообщения.
Такой подход позволяет создавать сервисы, управляемые событиями, без постоянного запроса сообщений в очереди сообщений. Это также позволяет разработчикам создавать разные изолированные функции, используя одно и то же сообщение (данные). Которые могут выполняться параллельно с возможностью обслуживания нескольких подписчиков.
Шаблон Pub / Sub изолирует издателей от подписчиков, поэтому издателям не нужно знать, где используется сообщение, в то время как подписчику не нужно знать об издателе. Это помогает органически улучшить общую безопасность приложения.
Преимущества шаблона публикации / подписки
Распределенное приложение на основе микросервисов, разработанное с использованием шаблона pub / sub, приносит пользу всей организации, от архитекторов программного обеспечения до инженеров по обеспечению качества.
Вот преимущества pub / sub:
Несвязанные / слабосвязанные компоненты
Pub / Sub позволяет легко разделить логику взаимодействия и приложения, тем самым создавая изолированные компоненты. Это приводит к:
- Создание более модульных, надежных и безопасных программных компонентов или модулей
- Повышение качества кода и ремонтопригодности
Улучшенная видимость в масштабах всей системы
Простота шаблона pub / sub означает, что пользователи могут легко понять поток приложения.
Шаблон также позволяет создавать отдельные компоненты, которые помогают нам получить представление о потоке информации с высоты птичьего полета. Мы можем точно знать, откуда поступает информация и куда она доставляется, без явного определения источника или назначения в исходном коде.
Связь в реальном времени
Pub / sub доставляет сообщения подписчикам мгновенно с помощью push-доставки, что делает его идеальным выбором для требований связи почти в реальном времени. Это устраняет необходимость в любом опросе для проверки сообщений в очередях и сокращает задержку доставки приложения.
Легкость развития
Поскольку pub / sub не зависит от языка программирования, протокола или конкретной технологии, любой поддерживаемый брокер сообщений может быть легко интегрирован в него с использованием любого языка программирования. Кроме того, Pub / Sub можно использовать в качестве моста для обеспечения связи между компонентами, созданными с использованием разных языков, путем управления межкомпонентной связью.
Это приводит к простой интеграции с внешними системами без необходимости создавать функции для облегчения связи или беспокоиться о последствиях для безопасности. Мы можем просто опубликовать сообщение в теме и позволить внешнему приложению подписаться на эту тему, устраняя необходимость прямого взаимодействия с базовым приложением.
Повышенная масштабируемость и надежность
Этот шаблон обмена сообщениями считается эластичным — нам не нужно заранее определять количество издателей или подписчиков. Их можно добавить в нужную тему в зависимости от использования.
Разделение между коммуникацией и логикой также упрощает устранение неполадок, поскольку разработчики могут сосредоточиться на конкретном компоненте, не беспокоясь о том, что это повлияет на остальную часть приложения.
Pub / sub также улучшает масштабируемость приложения, позволяя изменять архитектуру брокеров сообщений, фильтры и пользователей, не затрагивая базовые компоненты. С pub / sub новая реализация обмена сообщениями — это просто вопрос изменения темы, если форматы сообщений совместимы даже со сложными архитектурными изменениями.
Улучшения тестируемости
Благодаря модульности всего приложения тесты могут быть нацелены на каждый модуль, создавая более оптимизированный конвейер тестирования. Это резко снижает сложность тестового примера за счет нацеливания тестов на каждый компонент приложения.
Шаблон pub / sub также помогает легко понять происхождение и назначение данных и информационного потока. Это особенно полезно при тестировании вопросов, связанных с:
- Повреждение данных
- Форматирование
- Безопасность
Недостатки паттерна pub / sub
Pub / Sub — надежный сервис обмена сообщениями, но он не лучший вариант для всех требований. Далее кратко рассмотрим некоторые недостатки этого паттерна.
Излишняя сложность в небольших системах
Pub / sub необходимо правильно настроить и поддерживать. Там, где масштабируемость и независимый характер не являются жизненно важными факторами для вашего приложения, внедрение Pub / Sub будет пустой тратой ресурсов и приведет к ненужной сложности для небольших систем.
Потоковое мультимедиа
Pub / sub не подходит при работе с такими мультимедиа, как аудио или видео, поскольку они требуют плавной синхронной потоковой передачи между хостом и получателем. Поскольку он не поддерживает синхронную сквозную связь, обмен сообщениями pub / sub не подходит для:
- Видео-конференция
- VOIP
- Общие приложения для потоковой передачи мультимедиа
Примеры использования для обмена сообщениями «публикация / подписка»
Итак, когда же самое время использовать pub / sub?
Шаблон Pub / Sub может использоваться в различных отраслях для облегчения распределенной связи в реальном времени. Например, автоматизация — ключевая область, в которой выигрывает от этого шаблона.
В следующих разделах описаны распространенные варианты использования Pub / Sub.
IoT (Интернет вещей)
Для умных устройств нам нужен надежный и эффективный способ сбора и распространения информации. Управляющий узел или сервер могут публиковать обновления. Которые будут автоматически доставляться на все подписанные устройства IoT.
Конечные пользователи IoT-устройства также могут выступать в качестве издателей и публиковать уведомления, информацию датчиков и т.д. В облаке, о котором затем будет уведомлен пользователь.
Системный мониторинг и уведомления о событиях
Pub / sub позволяет пользователям создавать темы для сбора системной информации и подталкивать их к интерфейсам визуализации и уведомлений.
Это очень полезно при крупномасштабном развертывании:
- Сообщения можно разделить на разные темы.
- Все серверы или службы могут публиковать данные в этих общих темах без необходимости в отдельных конвейерах уведомлений.
Twitch Extensions. Пишем свое расширение для взаимодействия со зрителями
Два года назад разработчики стриминговой платформы Twitch представили новый способ взаимодействия стримеров и зрителей — Twitch Extensions. Эта система позволяет разработчикам дополнять и улучшать интерфейс как сайта, так и мобильного приложения, создавая различные интерактивные элементы. Я расскажу, как работают эти расширения и как при желании создать свое.
Бэкенд
Самое важное — интерактивность и налаженное взаимодействие между пользователями и стримером. Для этого нам понадобится хороший сервер.
У расширений Twitch такой сервер называется Extension Backend Service (EBS). В отличие от фронтенда, ответственность за непрерывную работу которого берет на себя Twitch, хостинг и размещение EBS стриминговым сервисом не обеспечивается — а значит, эту проблему нам нужно решать самостоятельно.
Бэк состоит из нескольких частей.
- Общение с пользователями и верификация JWT. Twitch для каждого человека, который активирует расширение, генерирует уникальный токен JWT, подписанный секретным ключом. Это позволяет идентифицировать пользователя, не раскрывая его персональных данных, и отделять настоящих зрителей от ботов, спама и DDoS.
- Обработка действий пользователей внутри расширения. Это может быть, например, подсчет голосов зрителей или работа с базой данных.
- Взаимодействие с Twitch API и в первую очередь с PubSub — сервисом, который позволяет фронтенду и бэкенду общаться без задержек.
Здесь мы используем популярное и надежное решение — ExpressJS. Для хостинга бэкенда можно использовать любой сервис, даже собственный компьютер. Для небольших разработок нам пригодится сервис Heroku, который, помимо хостинга, предоставит удобоваримый URL.
Фронтенд
Фронтенд каждого расширения состоит из одного или нескольких экранов (view), они бывают разных типов и вместе составляют пользовательский интерфейс.
- Mobile extension — специальный блок, предназначенный для показа внутри официального приложения Twitch с помощью WebView.
- Video-overlay extension — виджет, который накладывается поверх всего видео (максимум на один стрим).
- Video-component extension — блок, который занимает лишь часть видеопотока. Стример может расположить его на свое усмотрение.
- Panel extension — полностью настраиваемая панель, которая отображается не поверх видео, а внизу, вместе с другими панелями.
Кроме различных view, предназначенных для зрителей, есть также два view для самого стримера, которые нужны для управления расширением.
- Live-config (Live Dashboard) — настройки, доступные в прямом эфире, прямо в дашборде — там же, где и все остальные самые необходимые элементы управления.
- Config (Configuration) — параметры, которые устанавливаются при инсталляции расширения (или в отдельном меню всех расширений).
На самом деле каждый из этих view — это не более чем специально оформленный тег или отдельный WebView (для телефонов), который занимается отображением своего интерфейса и обработкой действий пользователя. Именно поэтому, чтобы упростить разработку фронтенда, мы используем React.
Разработка своего расширения
Теперь давай я на примере покажу, как написать основу для собственного расширения. Пусть это будет онлайновое голосование с обновлением голосов в реальном времени.
Упростить разработку расширений для Twitch помогает специальное приложение, которое работает в Windows, macOS или Linux. Оно называется Twitch Developer Rig и нужно исключительно для создания и тестирования расширений.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник: xakep.ru