System Design Space
Граф знанийНастройки

Обновлено: 24 марта 2026 г. в 17:36

Back-of-Envelope Estimation (примерные оценки)

medium

Практический фреймворк быстрых оценок: трафик, RPS/QPS, RAM, постоянное хранилище (persistent storage), бюджеты задержек (latency budgets) и поиск главного узкого места (bottleneck).

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

Глава показывает, как back-of-the-envelope estimates помогают быстро увидеть, что насыщается первым - traffic, memory, disk, network или latency budget, и тем самым сэкономить время на раннем отборе решений и грубой capacity-модели.

Для system design interview это один из самых сильных сигналов зрелости: сначала назвать осмысленные допущения и главный constraint, а уже потом предлагать архитектуру, которая действительно отвечает на обнаруженный масштаб.

Практическая польза главы

Оценка за минуты

Быстро переводите продуктовый сценарий в числа: RPS/QPS, размер сообщения (payload), коэффициент пика (peak factor) и порядок инфраструктурных ограничений.

Главное узкое место (bottleneck)

Через оценки памяти, хранилища и сети (RAM/storage/network), а также бюджета задержки (latency budget), определяйте, какой слой упрется первым и где нужен архитектурный запас.

Формулировка решения (decision framing)

Сопоставляйте оценку с выбором паттернов: кэш, репликация, шардинг, асинхронная обработка (async processing) и ограничения SLA/SLO.

Подача на интервью (interview execution)

На интервью показывайте уверенную структуру: допущения, формулы, оценка рисков и аргумент следующего эволюционного шага.

Источник мышления

Designing Data-Intensive Applications

Хорошая опора для обсуждения пропускной способности (throughput), хранилища (storage) и компромиссов по задержке (latency trade-offs).

Читать обзор

Примерные оценки (Back-of-Envelope Estimation) — это инструмент первых 5 минут архитектурного разбора. Он не дает точных оценок емкости (capacity), но быстро показывает порядок величин, ограничители системы и зону максимального риска.

Цель: до выбора технологий понять, где именно система упрется первой — в RPS, рабочий набор в памяти (RAM working set), рост диска (disk growth), пропускную способность сети (network throughput) или бюджет задержки (latency budget) критичного пользовательского сценария (user journey).

Быстрые константы и единицы

Время

  • 1 день = 86 400 с (seconds)
  • 1 месяц ≈ 30 дней
  • Пик (peak) часто в 2-5 раз выше среднего

Трафик

  • RPS = запросы/день (requests/day) / 86 400
  • RPS_peak = RPS_avg * коэффициент пика (peak factor)
  • Разделяйте чтения и записи (read/write)

Байты

  • 1 KB = 10^3 B (приблизительно)
  • 1 MB = 10^6 B
  • 1 GB = 10^9 B

Пропускная способность

  • Байт/с (bytes/sec) = RPS * размер сообщения (payload)
  • Бит/с (bits/sec) = байт/с * 8
  • Учитывайте накладные расходы протокола (protocol overhead)

Память

  • RAM = горячий рабочий набор (hot working set)
  • Плюс накладные расходы соединений и сессий (connection/session overhead)
  • Оставляйте резерв 20-30% (headroom)

Хранилище

  • Хранилище/день (storage/day) = записи/день (writes/day) * размер строки (row size)
  • Учитывайте индексы и метаданные (index + metadata)
  • Умножайте на фактор репликации (replication factor)

Шаблон оценки за 5 шагов

1

Шаг 1

Зафиксируйте входные допущения

Количество пользователей, ключевые пользовательские сценарии (user journeys), соотношение чтений и записей (read/write ratio), размер запроса/ответа, целевые SLA/SLO.

2

Шаг 2

Переведите бизнес-метрики в нагрузку

Посчитайте средний и пиковый RPS/QPS (average/peak), добавьте коэффициент всплеска (burst factor) и отдельно выделите критический путь записи (write path).

3

Шаг 3

Оцените ресурсы по слоям

Оцените оперативную память (RAM) для горячих данных (hot data) и кэша, постоянное хранилище (persistent storage) на горизонт планирования, пропускную способность сети (network throughput) между сервисами и наружу.

4

Шаг 4

Разложите бюджет задержки (latency budget)

Распределите бюджет p95/p99 по пограничному слою (edge), прикладному сервису (API), кэшу (cache), базе данных (DB) и внешним зависимостям. Сразу обозначьте самый дорогой сегмент.

5

Шаг 5

Найдите главное узкое место (bottleneck)

Определите, что ломается первым при росте в 5-10 раз (5-10x): процессор (CPU), память (memory), сеть (network), дисковые операции (storage IOPS), задержка координации (coordination latency) или операционная сложность (operational complexity).

Трафик (traffic) -> RPS/QPS: базовые формулы

Средняя и пиковая нагрузка (average/peak)

requests/day = DAU * requests_per_user/day
RPS_avg = requests/day / 86 400
RPS_peak = RPS_avg * peak_factor

Разделение чтений и записей (read/write split)

RPS_read = RPS_total * read_ratio
RPS_write = RPS_total * write_ratio
путь записи (write path) обычно задает требования к хранилищу (storage) и стоимости долговечности (durability cost)

Оперативная и постоянная память (RAM / persistent storage)

Оперативная память (RAM, working set)

Начинайте с горячих данных (hot data), которые нужны для достижения целевой задержки (target latency). Добавьте метаданные кэша (cache metadata), накладные расходы соединений и сессий (connection/session overhead) и минимум 20-30% запаса (headroom).

Горизонт постоянного хранилища (persistent storage horizon)

storage/day = writes/day * average_row_size
total/day = storage/day * replication_factor * (1 + index_overhead)
storage/N months = total/day * 30 * N

Пропускная способность сети и исходящий трафик (network throughput / egress)

Для каждого межсервисного перехода (hop) посчитайте: bytes/sec = RPS * payload. Затем переведите в бит/с (bits/sec) и добавьте накладные расходы (overhead): headers, TLS, retries, fan-out. Это сразу показывает, где потребуется сжатие, пакетирование (batching) или изменение контракта API.

Разложение бюджета задержки (latency budget decomposition)

Слой
p95 budget
Комментарий
Пограничный слой (Edge / LB)
10 ms
TLS + маршрутизация (routing)
Прикладной сервис (API service)
25 ms
бизнес-логика (business logic)
Кэш (Cache)
8 ms
чтение из горячего набора (hot read)
Основная БД (DB primary)
35 ms
критичный запрос (critical query)
Внешняя зависимость (External dependency)
20 ms
платежи/риск и др. (payment/risk/etc)

Если сумма бюджета (budget) уже близка к целевому SLO, именно хвостовая задержка (tail latency) и политика повторов (retry policy) станут главным риском, даже если средние метрики выглядят нормально.

4 мини-кейса с быстрыми выводами

Кейс 1: Сокращатель ссылок (URL Shortener)

  • 100M переадресаций/день (redirect/day)
  • размер ответа (payload) = 1.2KB
  • коэффициент пика (peak factor) = 3x

Расчет: RPS_avg ≈ 1 160, RPS_peak ≈ 3 500. Пиковый исходящий трафик (egress_peak) ≈ 3 500 * 1.2KB ≈ 4.2MB/s (~34Mbps) без учета накладных расходов TLS/headers.

Главная сложность: Критичная сложность обычно не в хранилище (storage), а в усилении чтений (read amplification), доле попаданий кэша (cache hit ratio) и p99 задержке (latency) на пути чтения (lookup path).

Кейс 2: Рассылка уведомлений (Notification fan-out)

  • 5M событий/день (events/day)
  • средний коэффициент рассылки (fan-out) = 8
  • размер доставляемого сообщения (delivery payload) = 0.8KB

Расчет: Операции доставки/день (delivery ops/day) = 40M, средняя нагрузка ≈ 463 ops/sec. При пике 6x получаем ~2.8K ops/sec по каналам доставки.

Главная сложность: Основная сложность: обратное давление (backpressure), шторм повторов (retry storm) и приоритизация каналов при деградации внешних провайдеров (downstream providers).

Кейс 3: Кэш ленты (Timeline cache)

  • 10M DAU
  • 20 чтений ленты на пользователя в день (timeline reads/user/day)
  • рабочий набор (working set) = 15% пользователей

Расчет: Чтения/день (reads/day) = 200M, средний RPS ≈ 2 315. Активные пользователи в горячем контуре (hot users) ≈ 1.5M. При 8KB на объект кэша (cached item) это ~12GB базового горячего набора (hot set) без накладных расходов (overhead).

Главная сложность: Ключевая сложность: удержать нужную долю попаданий (hit ratio) и контролировать инвалидацию кэша (cache invalidation) без эффекта шторма запросов (stampede).

Кейс 4: Сервис заказов (пиковые записи, write-heavy)

  • 30M заказов/день (orders/day)
  • размер строки (row size) = 2.5KB
  • фактор репликации (replication factor) = 3

Расчет: Чистый объем записей/день (raw writes/day) ≈ 75GB. С учетом RF=3 получаем 225GB/day + индексы/метаданные (index/metadata, часто +30-60%).

Главная сложность: Главный риск: задержка пути записи (write path latency) и горизонт роста хранилища (storage growth horizon), а не только текущий QPS.

Как быстро понять главную сложность задачи

Ограничение по процессору (CPU-bound)

Высокая загрузка (utilization) при умеренном вводе-выводе (I/O): тяжелая бизнес-логика, сериализация, шифрование.

Ограничение по памяти (memory-bound)

Высокая текучесть объектов (churn), паузы сборщика мусора (GC pauses), промахи кэша (cache misses), рост хвостовой задержки (tail latency) при ограниченном бюджете RAM (RAM budget).

Ограничение по хранилищу (storage-bound)

Растет глубина очереди (queue depth), достигается насыщение IOPS на чтение/запись, операции уплотнения и сброса (compaction/flush) начинают доминировать.

Ограничение по сети (network-bound)

Межсервисные вызовы и рассылка в несколько получателей (fan-out) съедают бюджет задержки (latency budget), растет число повторных передач (retransmit) и чувствительность к потере пакетов (packet loss sensitivity).

Антипаттерны примерных оценок

Считать только средние значения и игнорировать пиковый трафик (peak traffic) и поведение во всплесках (burst behavior).

Не разделять путь чтения и записи (read/write path): усреднение прячет реальные узкие места (bottlenecks).

Оценивать хранилище (storage) без накладных расходов индексов (index overhead), фактора репликации (replication factor) и горизонта хранения (retention horizon).

Рисовать красивую схему до оценки бюджета задержки (latency budget) и ограничений емкости (capacity constraints).

Не добавлять операционный запас (operational headroom), будто система всегда работает в идеальных условиях.

Хорошая сессия примерных оценок (estimation session) заканчивается не только цифрами, но и явным ответом: что ограничивает систему первым и как это масштабировать.

Связанные главы

  • Принципы проектирования масштабируемых систем - задает базовую рамку (framework) для качества сервиса и системных компромиссов.
  • Балансировка трафика - помогает связать расчет пикового RPS (peak RPS) с реальной стратегией распределения трафика.
  • Стратегии кэширования - углубляет оценку рабочего набора в памяти (RAM working set), доли попаданий (hit ratio) и стоимости промаха кэша (cache miss).
  • Репликация и шардинг - покрывает рост хранилища (storage growth), горячие шарды (hot shards) и перераспределение (rebalancing) после оценок емкости (capacity).
  • Event-Driven Architecture - добавляет расчет пропускной способности и очереди накопления (throughput/backlog) для асинхронных конвейеров (pipeline) и очередей.
  • URL Shortener - практический кейс, где примерные оценки (back-of-envelope) сразу переводятся в архитектурные решения.
  • Notification System - показывает расчет рассылки в несколько получателей (fan-out) и влияние семантики доставки (delivery semantics) на размер инфраструктуры.
  • Rate Limiter - дополняет главу механизмами контроля всплесков трафика (burst traffic) и защитой критичного пути (critical path).

Чтобы отмечать прохождение, включи трекинг в Настройки