Основы оценки нагрузки

Базовый System Design
≈ 3 мин чтения

Оценка начинается с допущений

В реальном проекте точные цифры часто неизвестны заранее. На собеседовании их может вообще не быть в условии. Это не мешает проектированию: мы явно задаём разумные допущения, считаем на их основе и при необходимости потом пересчитываем модель с другими значениями.

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

DAU = 10,000,000
uploads_per_user_per_day = 2
average_object_size = 2 MB

Сначала продуктовые величины, потом технические

Обычно вводные приходят на языке продукта: активные пользователи, сообщения в день, просмотры, загружаемые файлы, срок хранения. Для архитектуры их нужно перевести в величины, которые описывают нагрузку на систему.

  • операции за день превращаются в запросы в секунду;
  • объекты и их размер — в объём хранения;
  • частота запросов и размер ответа — в сетевой трафик;
  • средние значения дополняются оценкой пиков.

Важно не считать всё подряд. Оцениваем только те величины, которые помогают ответить на архитектурный вопрос. Если размер данных никак не влияет на обсуждаемое решение, нет смысла тратить время на сложную модель хранения.

Следи за единицами

Большая часть ошибок в быстрых расчётах возникает не из-за математики, а из-за смешивания единиц. Секунды путаются с днями, байты — с битами, мегабайты — с мегабитами. Поэтому полезно писать единицы прямо в формуле.

requests/day ÷ 86,400 s/day = requests/s
objects/day × bytes/object = bytes/day
requests/s × bytes/request = bytes/s

Единицы здесь работают как проверка: если после сокращения получилось то, что мы хотели измерить, формула, скорее всего, составлена правильно.

Округление полезнее ложной точности

Для System Design обычно важнее порядок величин, чем число с четырьмя знаками после запятой. Если получилось 1 973 запроса в секунду, разумнее продолжать расчёт с примерно 2 000 RPS. Так модель остаётся понятной, а накопление случайной точности не создаёт иллюзию, будто исходные данные были известны идеально.

Полезно также отделять факт от допущения. Если в условии сказано «20 миллионов активных пользователей в день» — это входное значение. Если мы решили, что каждый делает в среднем три чтения — это уже наше допущение, и его стоит назвать вслух.

Хорошая оценка должна быть пересчитываемой. Если кто-то скажет, что средний объект весит не 2 MB, а 5 MB, должно быть понятно, какую величину заменить и как изменится результат.