The Pub-sub Abstraction
Что такое система pub-sub?
Publish-subscribe (pub-sub) система — это асинхронный метод взаимодействия между сервисами, который популярен в бессерверных и микросервисных архитектурах. В системе pub-sub сообщения могут отправляться асинхронно различным подсистемам системы. Все сервисы, подписанные на модель pub-sub, получают сообщение, которое отправлено в систему.
Пример
Например, когда известный спортсмен публикует пост в Instagram или делится твитом, все его подписчики получают обновление. В этом случае спортсмен является издателем (publisher), его пост или твит — это сообщение (message), а все его подписчики — подписчики (subscribers).

Мотивация
Аппаратная инфраструктура распределенных систем состоит из миллионов машин. Использование pub-sub системы для асинхронной передачи сообщений увеличивает масштабируемость. Производители (producers) и потребители (consumers) рассоединены и работают независимо, что позволяет масштабировать и развивать их отдельно. Декуплинг (разделение) компонентов — производителей и потребителей — обеспечивает большую масштабируемость, поскольку добавление или удаление любого компонента не влияет на другие компоненты.
Как спроектировать систему pub-sub?
Мы разделили проектирование системы pub-sub на следующие уроки:
- Введение: В этом уроке мы рассмотрим случаи использования системы pub-sub, определим ее требования и спроектируем API.
- Дизайн: В этом уроке мы рассмотрим два варианта дизайна системы pub-sub: один с использованием очередей сообщений, а другой — с брокером.
Introduction to Pub-sub
Система pub-sub предлагает асинхронное взаимодействие, и вот несколько примеров, где она может быть полезна:
Улучшенная производительность
Система pub-sub обеспечивает push-распространение информации, что устраняет необходимость в регулярных проверках изменений со стороны получателей сообщений. Это способствует более быстрому времени отклика и снижает задержку доставки сообщений.
Обработка логов и данных
Pub-sub помогает в обработке большого количества логов и данных о взаимодействии пользователей. Эти данные могут быть использованы для анализа поведения пользователей. Мы можем передавать большое количество данных в систему pub-sub, которая затем может доставить их в любую аналитическую систему для понимания пользовательских паттернов поведения. Например, крупные сервисы, такие как Meta, используют систему pub-sub под названием Scribe для определения того, кто нуждается в данных, и для удаления или архивации обработанных или ненужных данных. Это необходимо для управления огромными объемами данных.
Мониторинг в реальном времени
Сырые или обработанные сообщения приложения или системы могут быть предоставлены нескольким приложениям для мониторинга системы в реальном времени.
Репликация данных
Система pub-sub может использоваться для распределения изменений. Например, в протоколе лидер-последователь лидер отправляет изменения своим последователям через систему pub-sub. Это позволяет последователям асинхронно обновлять свои данные. Распределенные кэши также могут обновляться, получая м одификации асинхронно. Приложения, такие как WhatsApp, которые позволяют просматривать один и тот же разговор на нескольких устройствах, могут эффективно работать с использованием pub-sub, где разные устройства могут выступать как издателем, так и подписчиком.

What are the similarities and differences between a pub-sub system and queues?
Details
The pub-sub system and queues are similar because they deliver information that’s produced by the producer to the consumer. The difference is that only one consumer consumes a message in the queue, while there can be multiple consumers of the same message in a pub-sub system.
How are producers and consumers decoupled from one another in a pub-sub system?
Details
Producers don’t know who’ll end up reading their information. They just send it to the system, and it is read by the consumer. The system acts as a decoupling layer between the producers and consumers. Producers are not affected by slow consumers, the count of consumers, or the failure of consumers. We can scale them independently.