Храните уведомление как устойчивое задание с временем отправки, статусом и уникальным ID. Планировщики выбирают наступившие задания порциями, а очередь и workers выполняют доставку.
Архитектурная задача: система отложенных нотификаций для бонусов (десятки миллионов пользователей)
Храните уведомление как устойчивое задание с временем отправки, статусом и уникальным ID. Планировщики выбирают наступившие задания порциями, а очередь и workers выполняют доставку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Храните уведомление как устойчивое задание с временем отправки, статусом и уникальным ID. Планировщики выбирают наступившие задания порциями, а очередь и workers выполняют доставку.
Разделите планирование по временным окнам/шардам, добавьте lease и повтор после сбоя. Перед отправкой проверяйте актуальность бонуса, согласия и отмену. Ограничивайте скорость по каналу и провайдеру, учитывайте часовой пояс. Для десятков миллионов пользователей нужны расчёт пиков, retention и метрики задержки; один Redis ZSET без восстановления не является всей архитектурой.