Как оценить суточный объем операций (RPS/обращений) в приложении онлайн-школы?

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

Ответ

Точный объем операций зависит от масштаба, функционала и активности пользователей. Оценка строится на метриках и предполагаемой нагрузке.

Методы оценки и сбора данных:

  1. Инструментация приложения: Внедрение счетчиков для ключевых действий.

    // Пример с использованием AtomicLong
    public class OperationMetrics {
        private static final AtomicLong dailyOperations = new AtomicLong(0);
    
        public void recordUserLogin(User user) {
            dailyOperations.incrementAndGet();
            // ... логика входа
        }
        public void recordVideoView(Lesson lesson) {
            dailyOperations.incrementAndGet();
            // ... логика просмотра
        }
        public static long getDailyCount() {
            return dailyOperations.get();
        }
    }
  2. Использование систем мониторинга:
    • Prometheus + Grafana: Для сбора и визуализации метрик (например, http_requests_total).
    • Application Performance Management (APM): Такие инструменты, как Datadog или New Relic, автоматически собирают трассировки и метрики.
  3. Анализ логов и БД: Агрегация записей в таблице логов событий или подсчет записей в аудит-таблицах за день.

Оценочные диапазоны для онлайн-школы:

  • Небольшой проект (до 1 000 активных пользователей): 10 000 – 100 000 операций/день.
  • Средний проект (1 000 – 10 000 пользователей): 100 000 – 2 000 000 операций/день.
  • Крупный проект (10 000+ пользователей): 2 000 000 – 10 000 000+ операций/день.

Типы операций с разной частотой (пример):

  1. Высокая частота: Просмотр страниц, API-запросы клиента, запросы к статике. (Тысячи в час на пользователя).
  2. Средняя частота: Запуск/завершение видео, отправка сообщений в чат, ответ на тест. (Сотни в день на пользователя).
  3. Низкая частота: Оплата курса, загрузка домашнего задания, регистрация. (Единицы в неделю на пользователя).

Для точной оценки необходимо проанализировать:

  • Среднее количество сессий на пользователя в день.
  • Количество бизнес-действий за сессию.
  • Пиковые нагрузки (например, начало учебного года, время после рассылки).