Абсолютную exactly-once доставку внешних email/push обещать нельзя без поддержки провайдера. Реалистичная схема — надёжные повторы и идемпотентный учёт эффекта.
Проектирование системы рассылки уведомлений
Абсолютную exactly-once доставку внешних email/push обещать нельзя без поддержки провайдера. Реалистичная схема — надёжные повторы и идемпотентный учёт эффекта.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разработать архитектуру центра рассылки, который обеспечивает доставку сообщений пользователям — как личных сообщений, так и системных уведомлений. Необходимо определить набор микросервисов, отвечающих за надёжную обработку и доставку сообщений с гарантией exactly‑once.
Ответ
Абсолютную exactly-once доставку внешних email/push обещать нельзя без поддержки провайдера. Реалистичная схема — надёжные повторы и идемпотентный учёт эффекта.
Центр включает API приёма, хранилище уведомлений, планировщик, очередь и адаптеры каналов. Событие сохраняют с уникальным notification_id и outbox; worker фиксирует попытки, статус и provider_message_id. Повторы используют один idempotency key, если провайдер его поддерживает.
При таймауте после фактической отправки результат может быть неизвестен: reconciliation предпочтительнее слепого повторения. Разделяйте «принято провайдером», «доставлено» и «прочитано». Ограничения частоты, пользовательские предпочтения и отписки проверяются перед отправкой. Внутренний inbox может дедуплицировать показ по ID, но это не делает внешнюю доставку универсально exactly-once.