intermediate
Pub/sub
Используйте pub/sub для ephemeral fan-out только когда missed messages и отсутствие replay acceptable.
Redis pub/sub — fire-and-forget fan-out: publishers шлют в имена каналов; subscribers, онлайн в этот момент, получают сообщения. Нет persistence, acknowledgment и replay — пропущенные сообщения теряются.
# терминал подписчика
SUBSCRIBE live:scores
# терминал издателя
PUBLISH live:scores '{"match":9,"score":"2-1"}'
# подписка по паттерну
PSUBSCRIBE notifications:*
| Pub/sub уместен | Не используйте pub/sub | |-----------------|------------------------| | Live UI updates | Payment или order workflows | | Эфемерные уведомления | Audit или event sourcing | | Низколатентный broadcast | Consumers могут быть offline | | Подсказки invalidation кэша | Нужна durability между регионами |
Pub/sub в классическом режиме занимает соединение Redis — в проде часто отдельное subscriber-соединение. Для durable нагрузок — Streams, внешний broker или outbox из БД.
На интервью: явно назовите гарантии доставки — at-most-once, без backlog для медленных consumers.
Типовые ошибки: pub/sub как job queue; нет reconnect/backoff; огромные payload на горячих каналах; критичная логика без идемпотентности.
Компромисс — минимальная latency broadcast vs нулевая durability: pub/sub для подсказок и live fan-out, не для работы, которая должна пережить рестарты или медленных consumers.
Чеклист:
- Подтвердите, что потеря сообщений допустима.
- Отдельное соединение для subscribers.
- Маленькие стабильные по схеме payload.
- Назовите durable альтернативу при росте требований.