При решении реальных задач по System Design или при прохождении собеседования, обязательным этапом является расчет нагрузки и стоимости на вашу IT-Систему. Давайте разберемся что это за этап и почему он так важен?

Зачем нужен расчет нагрузки?

1. Определение требований к инфраструктуре

Сколько серверов, ядер CPU, оперативной памяти, дискового пространства и пропускной способности сети потребуется.

Пример:
Если система должна обрабатывать 10000 RPS, а один сервер выдерживает 1000 RPS, то нужно 10+ серверов (с учетом запаса).

2. Предотвращение перегрузки и отказов

Без расчета можно столкнуться с ситуацией, когда система падает под пиковой нагрузкой (например, во время Black Friday).

Пример:
Если не учесть пиковый фактор, серверы не справятся с наплывом пользователей.

3. Оптимизация архитектуры

Позволяет выбрать правильные технологии (например, SQL vs NoSQL, кеширование, шардинг).

Пример:
Если система read-heavy (в основном используется для чтения данных, а не для записи), выгоднее использовать Redis + репликацию БД, а не мощные SQL-серверы.

4. Планирование масштабирования

Горизонтальное (добавление серверов) vs вертикальное (апгрейд железа).

Пример:
Если нагрузка растет линейно, можно использовать автоскейлинг (автоматическое масштабирование ресурсов IT-инфраструктуры) в облаке (виртуальное пространство, где хранятся и обрабатываются данные).

Зачем нужен расчет стоимости?

1. Бюджетирование и экономическая эффективность

Нельзя проектировать систему, которая будет стоить $1M/месяц, если бизнес−модель рассчитана на $100K прибыли.

Пример:
Выбор между облаком и bare-metal - услуга аренды выделенного физического сервера (облако гибче, но дороже на больших масштабах).

2. Сравнение архитектурных решений

Иногда более сложное решение (например, Kafka вместо RabbitMQ) оправдано, если оно дешевле в долгосрочной перспективе.

Пример:
S3 хранилище против своей файловой системы – S3 проще, но при больших объемах своё хранилище может быть дешевле.

3. Избежание "дорогих" ошибок

Некоторые технологии имеют скрытые затраты.

Пример: 
DynamoDB с оплатой за запросы может разорить при высокой нагрузке

4. Обоснование инвестиций

Если система требует $500к/год, нужно понять, окупится ли она.

Пример:
Кеширование через Redis может снизить нагрузку на БД и сэкономить $200к/год на серверах.

Что будет, если пропустить этот этап?

1. Система упадет при нагрузке (например, нехватка CPU/RAM под пиком).
2. Переплата за ресурсы (например, аренда мощных серверов "на всякий случай").
3. Невозможность масштабирования (например, БД без шардинга упрется в лимиты).

Расчет нагрузки и стоимости — это баланс между производительностью и затратами. Без него система либо не справится с нагрузкой, либо разорит компанию неоптимизированными расходами.

Приступим к расчетам:

Пользовательский трафик

Как прикинуть нужный объём трафика? Грубо говоря, надо понять:

1. Кто будет пользоваться системой?

  • Если это внутренний корпоративный сервис, то считаем по числу сотрудников + запас на новых.

  • Если публичный сайт, то смотрим, сколько людей сидит на аналогичных площадках.

2. Что они там будут делать?

  • Сколько времени в день проводят в системе?

  • Какие файлы загружают/скачивают (фото, видео, документы)?

  • Сколько места это займёт на серверах?

Пример:
Соцсеть для 1000 пользователей:
Каждый заливает по 5 фото в день (10 МБ) → 50 ГБ трафика в день.
Плюс хранение: 50 ГБ × 30 дней = 1.5 ТБ в месяц.

RPS

Давайте зафиксируем основную метрику, которая поможет в расчете нагрузки со стороны пользователей. Ссылаясь на пользовательский трафик, мы можем рассчитать RPS (Requests Per Second) - количество запросов в секунду. Рассчитывается по формуле: 

RPS = {DAU * Q \over x} * k,

где DAU - количество уникальных пользователей за день, x - количество секунд в выбранном диапазоне, Q - среднее число запросов на пользователя в день, k - пиковый коэффициент (опционален). По аналогии можно считать и для MAU и WAU.

Пример:

Дано:

  • DAU100000 активных пользователей в день.

  • Каждый пользователь делает 50 запросов за день = Q (например, 10 страниц × 5 API-запросов).

  • Пиковый коэффициент = 5 = k (в час-пик нагрузка в 5 раз выше средней).

  • В дне x = 86400 секунд.

Расчет:

Средний RPS за день:

RPS = {DAU * Q \over 86400} = {100000 * 50 \over 86400} \approx 58запросов/сек.

Пиковый RPS:

 58 * 5 = 290 запросов/сек.

Вывод: Сервер должен выдерживать \approx290RPS в самые загруженные моменты.

Сетевой трафик

Сетевая нагрузка - объем трафика (данных, передаваемых по сети) за определенный период времени, а также степень использования сетевых ресурсов (например, пропускной способности или скорости связи). Это важный параметр для оценки производительности и эффективности сети, а также для планирования её масштабирования и расчета нагрузки и стоимости.

Приведем аналогию. Сетевая нагрузка - это, если  как пропускная способность моста:  

  1. Сколько машин одновременно могут ехать (ограничения по соединениям)  

  2. Сколько тонн груза пропустит мост за час (объём трафика)  

Ограничения по соединениям  

Современный сервер — это как диспетчер на мосту: Обычный сервер может выдержать 10K-100K одновременных подключений.  

Пример:
Nginx на 8 ядрах держит ~50K соединений  


Проблема: Каждое новое соединение требует ресурсов CPU/RAM, следовательно при 100K+ одновременных подключениях нужны:  

  • Оптимизация (epoll/kqueue). epoll и kqueue – это системы для управления файловыми дескрипторами, которые позволяют программам эффективно ожидать и обрабатывать события ввода-вывода. kqueue – это механизм, используемый в операционных системах BSD (FreeBSD, OpenBSD, macOS), а epoll – в Linux

  • Кластеризация (использование нескольких серверов).

Отразим формулу для расчета количества одновременных соединений - CCU (Concurrent Users):

CCU = {DAU * s \over p} * k,

где CCU - число пользователей, одновременно активных на сервере. (теоретический максимум), DAU - количество активных пользователей за день, sСреднее время сессии -  как долго пользователь находится в системе (например, 10 минут), p- Среднее время активности в день - общее время работы сервиса (например, 24 часа = 1440 минут), k - пиковый коэффициент - во сколько раз нагрузка выше средней, например  x2–x 5 (опционален).

Пример:

Дано:

  • DAU= 50 000 пользователей,

  • Средняя сессия = s = 15 минут,

  • Сервис работает 24 часа (p = 1440 минут),

  • k = 3.

Расчёт:

  1. Количество одновременных соединений:

    CCU = {DAU*s \over p}= {50000 * 15 \over 1440} = 520 соединений.

  2. Пиковый CCU:
    520∗3=1560 соединений.

Вывод:
В пиковые часы сервер должен выдерживать 
≈1560 одновременных соединений.

Стоимость

Можно взять в расчет, то что в данный момент средняя цена одного сервера от 1500$ до 4000$. И такой сервер можно выдерживать до 100К активных соединений

Объем трафика 

Тут есть 3 основных понятия, которые связаны с кол-вом информации, которая проходит по сети: Пропускная способностьсетевой трафик и нагрузка на сетевой канал. Давайте рассмотрим их по отдельности

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

Максимальная скорость канала (пропускная способность) — максимальное количество информации, которое можно передать по каналу связи за единицу времени. Аналогия: сколько «полос» на этом мосту. Измеряется в мегабитах в секунду (Мбит/с) или гигабитах (Гбит/с).

Пример:
Домашний интернет 100 Мбит/с = ~12.5 МБ/с реальной скорости. (Так как в одном байте 8 бит, то для перевода из Мбит в МБ необходимо разделить число на 8)
Серверный канал 1 Гбит/с = ~125 МБ/с.

Аналогия: Ширина шоссе: 2 полосы (100 Мбит/с) vs 8 полос (1 Гбит/с).

Рассмотрим популярные технологии для передачи данных:

1. Витая пара (Cat6) с пропускной способностью 10 Гбит/с. Используется в Офисах и дата-центрах. Стоимость 0.5$/метр

2. Оптоволокно с пропускной способностью 40-100 Гбит/с. Используется для магистральных каналов. Стоимость 10000$/порт

3. Infiniband — высокоскоростная коммутируемая компьютерная сеть, используемая в высокопроизводительных вычислениях, 
имеющая очень большую пропускную способность и низкую задержку. Пропускная способность 200+ Гбит/с. Используется для супермпьютеров. Очень дорого.

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

R=RPS∗S∗k,

где R -  Пиковая нагрузка на сеть (бит/с), S - средний размер одной единицы данных (например размер лога, сообщения, записи в БД) в Б, КБ, МБ и тд.

Чтобы перевести КБ, МБ, ГБ в Кбит, Мбит, Гбит - необходимо умножить на 8 (так как в 1 Байте 8 Бит).

Пример:

Дано

  • RPS = 500 запросов/сек.

  • Каждый запрос имеет средний размер 1КБ (S_{вх}= 1КБ)

  • При ответе система отвечает данными по 5КБ (S_{исх}= 1КБ) 

  • Пиковый коэффициент не учитываем.

Решение

  1. Входящий трафик:
     R_{вх}=RPS∗S_{вх} = 500∗1КБ=500 КБ/сек. ≈ 4000 Кбит/сек.

  2. Исходящий трафик: R_{исх}=RPS∗S_{исх}=500∗5КБ=2500 КБ сек.≈20000 Кбит/сек.

  3. Суммарный трафик: 
    R_{общ} = R_{вх} + R_{исх} = 4000+20000=24000 Кбит/сек. ≈24 Мбит/сек.

Вывод:
Для нашей системы пиковая нагрузка на сеть составляет 24 Мбит/сек.

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

Сетевой инстанс

Тут речь заходит о Сетевом инстансе - это виртуальный или физический сервер, настроенный для обработки сетевых запросов (например, веб-трафика, API, загрузки файлов). Его ключевая характеристика — Пропускная способность сети (измеряется в Гбит/с), которая определяет, сколько данных он может передавать/принимать в секунду.

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

Стоимость

Считаем что 1 сетевой инстанс в среднем имеет пропускную способность 1Гбит/сек и стоит около 300$ в месяц.

Пример:
Рассмотрим пример выше где наша расчеты показали, что пиковая нагрузка на сеть составляет 24Мбит/сек. - это значит что нам потребуется 1 сетевой инстанс с пропускной способностью 
1Гбит/сек за 300$. Если бы например R = 1.5Гбит/сек., то это бы означало, что нам необходимо иметь 2 сетевых инстанса на 2Гбит/сек за 600$.

2. Сетевой трафик

Сетевой трафик - это фактический объём переданных данных — сколько «груза» проехало по дороге за определенное время. Считаем в гигабайтах (ГБ) или терабайтах (ТБ) за период (день/месяц). Считается так - общий объем информации который проходит по сети (на запись и чтение).

Пример:
Вы скачали фильм (5 ГБ) → ваш трафик +5 ГБ.
Сервер отдал 1000 пользователям по 1 МБ → 1 ГБ трафика.

Аналогия:
Количество машин, проехавших по шоссе за месяц.

Пример для сервиса ссылок:
1 млн переходов в месяц.
Каждая страница редиректа весит 10 КБ (HTML + скрипты).
API-запросы (создание ссылок) — 5 КБ на операцию (100 тыс. созданий).
Расчёт:
Переходы: 1 000 000 × 10 КБ = 10 000 000 КБ ≈ 10 ГБ.
API: 100 000 × 5 КБ = 500 000 КБ ≈ 0.5 ГБ.
Итого: 10.5 ГБ/мес.

Формула расчета сетевого графика:

A = N * S * k,

где A - сетевой трафик за выбранный промежуток времени (Байт), N - количество операций/событий в единицу времени (например в день),  S - средний размер одной операции в Байтах (например размер лога, сообщения, записи в БД).

Пример:

Дано:

  • В день N = 1000000 запросов в систему

  • Средний размер запроса 10КБ

  • Средний размер ответа 2КБ

Необходимо посчитать сетевой трафик за день и месяц при неизменном количестве запросов к системе за этот период. 

Решение

  1. Так как одному запросу к систему соответствует и запрос с 10КБ и ответ с 2КБ, значит на 1 обращение к системе приходится 12КБ сетевого трафика.

  2. Общий объем сетевого трафика за день A=N∗S=1000000∗12КБ=12000000 КБ ≈ 12ГБ в день.

  3. Расчетаем сетевой трафик за месяц (30 дней): 
    30∗12ГБ=360 ГБ за месяц.

Вывод
За день в нашей системе сетевой трафик составляет 12 ГБ, а за месяц 360 ГБ.

Стоимость

Зафиксируем, как мы будем считать итоговую стоимость трафика. Обычно для облачные провайдеры продают свои услуги по цене до 0.1$ за 1ГБ трафика.

Таким образом расчитав сетевой трафик на горизонте определенного времени можно вычислить сумму, которую придется заплатить. Таким образом обращаясь к нашему примеру в месяц расходуя 360ГБ графика мы потратим 360 * 0.1 = 36$.

3. Нагрузка на сетевой канал

Нагрузка на сетевой канал - это насколько канал загружен в реальном времени — процент использования «полос» моста. Считают в % от пропускной способности: 

L = {R \over B} * 100\%,

где L - нагрузка на сетевой канал, R - Пиковая нагрузка на сеть, B - пропускная способность.

Пример:
Канал 1 Гбит/с, текущий трафик 500 Мбит/с, следовательно Нагрузка на сетевой канал 50%.
При 90%+ начинаются проблемы (лаги, потери пакетов) и нужно срочно расширять канал добавляя сетевые инстансы.

Аналогия: Пробка на дороге: если машины занимают все полосы, движение замедляется.

Пример
Канал сервера: 100 Мбит/с.
Пиковый трафик: 60 Мбит/с (в час-пик).
Расчёт:

{60 \over 100} * 100\% = 60\%

Вывод: Канал загружен на 60% — запас есть.

Пример:
У вас есть канал 1 Гбит/с (пропускная способность).
Сейчас через него идёт 600 Мбит/с трафика (пиковая нагрузка на сеть), следовательно нагрузка 60%.
Если трафик вырастет до 900 Мбит/с (90% нагрузки) — возможны провисания.
При 1 Гбит/с+ (100%+) — коллапс (потеря пакетов, обрывы).

Итог  

Считаем заранее:  

  • RPS - количество запросов в секунду.

  • CCU - количество одновременных соединений (Сразу можем прикинуть количество серверов по количеству одновременных запросов и лимиту одного сервера)

  • R - пиковая нагрузка на сеть. (Сразу можно рассчитать количество сетевых инстансов и общую стоимость)

  • A - сетевой трафик. (Сразу можно рассчитать стоимость графика для промежутка времени работы нашей системы)

  • L - нагрузка на сетевой канал.

Спасибо за внимание!

PS

Если вам понравилась эта статься (я пойму это по реакции), то в ближайшее время выйдет новый материал, где мы обсудим как считать нагрузку на хранилище.

PPS

Если вы хотите не только быстро расчитывать нагрузку и стоимость вашей системы, но и принимать взвешенные архитектурные решения, которые выдержат миллионы пользователей и не сломаются при первой же проблеме. С гордостью представляю вам свой новый курс: C нуля до проектирования систем уровня senior-инженера.Специально для Habr действует промокод 20% HABR20 . Этот курс — не просто сборник советов для собеседований. Это ваш путь от базовых концепций до проектирования сложных, высоконагруженных систем, которые работают в условиях реального мира. Здесь нет «волшебных таблеток» — только глубокое понимание принципов, разбор реальных кейсов и практика. 

Комментарии (0)