Как оценить суточный объем операций по отправке уведомлений в онлайн-школе?

«Как оценить суточный объем операций по отправке уведомлений в онлайн-школе?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Объем операций зависит от количества активных пользователей и их активности. Оценку можно провести по метрикам.

Примерный расчет:

  1. Базовые метрики:
    • Активные пользователи: 10 000
    • Среднее число уведомлений на пользователя в день: 3 (напоминания об уроках, новые задания, сообщения в чате)
    • Итого: 10 000 * 3 = ~30 000 уведомлений/день.
  2. Пиковые нагрузки:
    • Начало семестра/учебного года: +50% (до ~45 000/день).
    • Период экзаменов или дедлайнов: +30% (до ~39 000/день).

Архитектурные подходы для масштабирования:

  • Очереди сообщений: Использование RabbitMQ, Kafka или Amazon SQS для асинхронной и отказоустойчивой отправки.
  • Батчинг: Группировка уведомлений для отправки одним запросом к внешнему сервису (например, Firebase Cloud Messaging).
  • Мониторинг: Реализация счетчика для отслеживания метрик в реальном времени.
// Пример простого счетчика на AtomicLong
import java.util.concurrent.atomic.AtomicLong;

public class NotificationCounter {
    private final AtomicLong dailyCounter = new AtomicLong(0);

    public void logNotificationSent() {
        dailyCounter.incrementAndGet();
    }

    public long getDailyCount() {
        return dailyCounter.get();
    }

    public void resetCounter() {
        dailyCounter.set(0);
    }
}

В крупных проектах объем может достигать миллионов уведомлений в день, что требует распределенной архитектуры и балансировки нагрузки.