Сетевая нагрузка - объем трафика (данных, передаваемых по сети) за определенный период времени, а также степень использования сетевых ресурсов (например, пропускной способности или скорости связи). Это важный параметр для оценки производительности и эффективности сети, а также для планирования её масштабирования и расчета нагрузки и стоимости.
Приведем аналогию. Сетевая нагрузка - это, если как пропускная способность моста:
- Сколько машин одновременно могут ехать (Ограничения по соединениям)
- Сколько тонн груза пропустит мост за час (Объём трафика)
Ограничения по соединениям
Современный сервер — это как диспетчер на мосту: Обычный сервер может выдержать 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 - Среднее время сессии - как долго пользователь находится в системе (например, 10 минут), p -Среднее время активности в день - общее время работы сервиса (например, 24 часа = 1440 минут), k - пиковый коэффициент - во сколько раз нагрузка выше средней, например x2 – x5 (опционален), Q - среднее число запросов на пользователя.
Пример:
Дано:
DAU= 50 000 пользователей (в среднем каждый в день общается к системе 1 раз),
Средняя сессия = s = 15 минут,
Сервис работает 24 часа (p = 1440 минут),
k = 3.
Расчёт:
Количество одновременных соединений:
CCU= DAU ∗ s / p = 50000 ∗ 15 / 1440 = 520 соединений.
Пиковый 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 - Пиковая нагрузка на сеть (бит/с), S - средний размер одной единицы данных (например размер лога, сообщения, записи в БД) в Б, КБ, МБ и тд., k - пиковый коэффициент - во сколько раз нагрузка выше средней (опционален).
Чтобы перевести КБ, МБ, ГБ в Кбит, Мбит, Гбит - необходимо умножить на 8 (так как в 1 Байте 8 Бит).
Пример:
Дано:
RPS = 500 запросов/сек.
Каждый запрос имеет средний размер 1КБ (S_вх = 1КБ)
При ответе система отвечает данными по 5КБ (S_ исх = 1КБ)
Расчёт:
Входящий трафик:
R_вх = RPS ∗ S_вх = 500 ∗ 1КБ = 500 КБ/сек. ≈ 4000 Кбит/сек.
Исходящий трафик:
R_исх = RPS∗S_исх = 500∗5КБ = 2500КБ/сек. ≈ 20000 Кбит/сек.
Суммарный трафик:
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 - пиковый коэффициент - во сколько раз нагрузка выше средней (опционален).
dfdsfdf
Пример:
Дано:
В день N = 1000000 запросов в систему
Средний размер запроса 10КБ
Средний размер ответа 2КБ
Необходимо посчитать сетевой трафик за день и месяц при неизменном количестве запросов к системе за этот период.
Расчёт:
Так как одному запросу к систему соответствует и запрос с 10КБ и ответ с 2КБ, значит на 1 обращение к системе приходится 12КБ сетевого трафика.
Общий объем сетевого трафика за день
A = N∗S = 1000000 ∗ 12КБ = 12000000 КБ ≈12 ГБ за день.
Расчетаем сетевой трафик за месяц (30 дней): 30 ∗ 12ГБ = 360 ГБ за месяц.
Вывод: За день в нашей системе сетевой трафик составляет 12 ГБ, а за месяц 360 ГБ.
Стоимость
Зафиксируем, как мы будем считать итоговую стоимость трафика. Обычно для облачные провайдеры продают свои услуги по цене до 0.1$ за 1ГБ трафика.
Таким образом расчитав сетевой трафик на горизонте определенного времени можно вычислить сумму, которую придется заплатить. Таким образом обращаясь к нашему примеру в месяц расходуя 360ГБ графика мы потратим 360 * 0.1$ = 36$.
3. Нагрузка на сетевой канал
Нагрузка на сетевой канал - это насколько канал загружен в реальном времени — процент использования «полос» моста.
Считают в % от пропускной способности:
где L - нагрузка на сетевой канал, R - Пиковая нагрузка на сеть, B - пропускная способность.
Пример:
Канал 1 Гбит/с, текущий трафик 500 Мбит/с, следовательно Нагрузка на сетевой канал 50%.
При 90%+ начинаются проблемы (лаги, потери пакетов)и нужно срочно расширять канал добавляя сетевые инстансы.
Аналогия: Пробка на дороге: если машины занимают все полосы, движение замедляется.
Пример
Канал сервера: 100 Мбит/с.
Пиковый трафик: 60 Мбит/с (в час-пик).
Расчёт:
(60 / 100) ∗100%=60%
Вывод: Канал загружен на 60% — запас есть.
Пример:
У вас есть канал 1 Гбит/с (пропускная способность).
Сейчас через него идёт 600 Мбит/с трафика (пиковая нагрузка на сеть), следовательно нагрузка 60%.
Если трафик вырастет до 900 Мбит/с (90% нагрузки) — возможны провисания.
При 1 Гбит/с+ (100%+) — коллапс (потеря пакетов, обрывы).
Итог
1. Считаем заранее:
- RPS - количество запросов в секунду.
- CCU - количество одновременных соединений (Сразу можем прикинуть количество серверов по количеству одновременных запросов и лимиту одного сервера)
- R - пиковая нагрузка на сеть. (Сразу можно рассчитать количество сетевых инстансов и общую стоимость)
- A - сетевой трафик. (Сразу можно рассчитать стоимость графика для промежутка времени работы нашей системы)
- L - нагрузка на сетевой канал.
2. Выбирайте технологии под бюджет:
- 10K пользователей: Хватит пропускной способности канала 1 Гбит/сек.
- 1M+ пользователей: Потребуется 10 Гбит/сек. + CDN
3. Экономьте на трафике: Принимаем решение где можно применить сжатие + кэширование
- Просмотр VK Видео это ~500 МБ/час (HD).
- Телемост-конференция это ~1.5 ГБ/час (HD).
- Загрузка игры это 50 ГБ.
Спасибо за внимание)
P.S. Эта статья — лишь верхушка айсберга. Хотите научиться проектировать масштабируемые системы как Senior Engineer? Мой курс по System Design даст вам структурированный подход и уверенность на собеседованиях. Подписывайтесь!
https://stepik.org/a/240911
Промокод: DZEN20
👍 Ставьте лайки если хотите разбор других интересных тем.
👉 Подписывайся на IT Extra на Дзен чтобы не пропустить следующие статьи
________________________________________________________________________
👇
Понравилась статья? В нашем Telegram-канале ITextra мы каждый день делимся такими же понятными объяснениями, а также свежими новостями и полезными инструментами. Подписывайтесь, чтобы прокачивать свои IT-знания всего за 2 минуты в день!