Нужен событийный поток изменений остатков, индекс подписок и ограниченная доставка уведомлений. Уведомлять следует о значимом появлении товара, с дедупликацией и лимитами на пользователя.
Описание системы:
Нужен событийный поток изменений остатков, индекс подписок и ограниченная доставка уведомлений. Уведомлять следует о значимом появлении товара, с дедупликацией и лимитами на пользователя.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Описание системы: Компания обслуживает сеть собственных магазинов и управляет состоянием ассортимента магазинов.
Требуется:
- Пользователь может подписываться на наименование товара.
- Присылать сообщение пользователю, если товар появляется в системе (например, магазин наполняет сток или произошел возврат).
- Не перегружать пользователя коммуникациями, чтобы избежать большого шума от push-уведомлений.
- От момента обновления стока до получения push-уведомления — SLA 1 минута.
Задача: спроектировать систему, которая реализует описанный функционал с учетом масштабов — количество айтемов на платформе 200 тыс., MAU 120 млн.
Ответ
Нужен событийный поток изменений остатков, индекс подписок и ограниченная доставка уведомлений. Уведомлять следует о значимом появлении товара, с дедупликацией и лимитами на пользователя.
Храните подписки по товару и нужному магазину/региону, а события остатков публикуйте через outbox. Обработчик выявляет переход «недоступен → доступен», находит подписчиков и создаёт задания доставки. Популярные товары требуют шардированного fan-out и ограничения скорости.
Для снижения шума используйте cooldown, объединение событий и предпочтения пользователя. Одноминутный бюджет разделите между фиксацией, очередью и push-провайдером; фактическую доставку на отключённое устройство гарантировать нельзя. MAU 120 млн недостаточно для sizing: нужны число подписок, частота изменений, пики и допустимые задержки. Контролируйте lag, дубли, повторную недоступность товара и отписку перед отправкой.