Найти в Дзене
IT Еxtra

Расчет сетевого трафика, чтобы не переплачивать на интерент!

Сетевая нагрузка - объем трафика (данных, передаваемых по сети) за определенный период времени, а также степень использования сетевых ресурсов (например, пропускной способности или скорости связи). Это важный параметр для оценки производительности и эффективности сети, а также для планирования её масштабирования и расчета нагрузки и стоимости. Приведем аналогию. Сетевая нагрузка - это, если  как пропускная способность моста: Сколько машин одновременно могут ехать (Ограничения по соединениям) Сколько тонн груза пропустит мост за час (Объём трафика) Ограничения по соединениям Современный сервер — это как диспетчер на мосту: Обычный сервер может выдержать 10K-100K одновременных подключений. Пример:
Nginx на 8 ядрах держит ~50K соединений Проблема: Каждое новое соединение требует ресурсов CPU/RAM, следовательно при 100K+ одновременных подключениях нужны: Оптимизация (epoll/kqueue). epoll и kqueue – это системы для управления файловыми дескрипторами, которые позволяют программам эффективно
Оглавление

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

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

  1. Сколько машин одновременно могут ехать (Ограничения по соединениям)
  2. Сколько тонн груза пропустит мост за час (Объём трафика)

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

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

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

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

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

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

-2

где 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 основных понятия, которые связаны с кол-вом информации, которая проходит по сети: Пропускная способность, сетевой трафик и нагрузка на сетевой канал. Давайте рассмотрим их по отдельности

IT Extra

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+ Гбит/с. Используется для супермпьютеров. Очень дорого.

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

-3

где 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 ГБ/мес.

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

-4

​где 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. Нагрузка на сетевой канал

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

-5

где 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 минуты в день!

IT Extra