Сеть для диагностики бэкенда
Пользователь жалуется: «сайт тормозит». Часть причин — не в SQL и не в алгоритме, а в пути пакета от клиента до сервера и обратно. Бэкенд-разработчик должен отличать медленный код от медленной сети.
База: сеть и интернет, HTTP.
Уровни, которые вас касаются
На каждом hop добавляется задержка. Время ответа API = обработка на сервере + сеть туда-обратно + очередь на балансировщике.
Ключевые метрики
| Метрика | Что означает | Типичный симптом |
|---|---|---|
| RTT (Round-Trip Time) | Время туда-обратно до узла | Высокий RTT → долгий TTFB даже при лёгком коде |
| Latency | Задержка доставки | «Плавающее» время ответа |
| Jitter | Разброс задержки | Нестабильный UX, таймауты на мобильных сетях |
| Packet loss | Потеря пакетов | Ретрансмиссии TCP, «зависания» |
| Bandwidth | Пропускная способность | Долгая загрузка больших тел, не коротких API |
Важно: TCP при потерях снижает скорость (контроль перегрузки). UDP (DNS, QUIC/HTTP3) ведёт себя иначе — потери могут проявляться как ошибки без повторной доставки на уровне приложения.
TCP и HTTP в двух словах
- SYN → SYN-ACK → ACK — установление соединения (один RTT и больше).
- Keep-Alive — повторное использование TCP для нескольких HTTP-запросов; без него каждый запрос платит handshake.
- HTTP/2 — мультиплексирование потоков в одном TCP; меньше head-of-line blocking, чем в HTTP/1.1 с множеством соединений.
- TLS — дополнительные RTT на handshake (смягчается session resumption).
Если API вызывается тысячи раз в секунду с коротким телом, оптимизация JSON может дать меньше, чем пул соединений к БД и keep-alive к upstream.
Симптом → гипотеза
| Наблюдение | Вероятная причина | Что проверить |
|---|---|---|
| Медленно только из одного региона | Маршрут, CDN, гео-реплика | Трассировка, DNS на региональный IP |
| Медленно только на мобильном | Высокий RTT/джиттер | Перцентили p95/p99, размер ответа |
| Таймауты пачками | Потери, перегрузка LB, исчерпание портов | Метрики LB, ss, лимиты |
| Быстро с сервера, медленно снаружи | Firewall, NAT, неверный DNS | curl с хоста vs с ноутбука |
| Быстро без TLS, медленно с TLS | Сертификат, цепочка, CPU | Профиль TLS, HTTP/2 |
Инструменты разработчика
| Инструмент | Назначение |
|---|---|
| DevTools → Network | Водопад запросов, TTFB, размер |
curl -w (см. пример ниже) | Время DNS/connect/TTFB с сервера |
dig, host | Записи DNS, TTL, неверный A/AAAA |
ping, traceroute / tracert | RTT по хопам (ICMP может быть заблокирован) |
| Логи прокси (Nginx) | $request_time, upstream time |
Глубокий разбор пакетов (tcpdump, анализ в GUI) — задача инженера по эксплуатации; разработчику достаточно уметь заказать такой анализ с воспроизводимым request_id.
С сервера (или из CI на staging):
curl -s -o /dev/null -w \
"dns:%{time_namelookup}s connect:%{time_connect}s ttfb:%{time_starttransfer}s total:%{time_total}s code:%{http_code}\n" \
https://api.example.com/health
TTFB (Time To First Byte) в DevTools — время до первого байта ответа. В логах Nginx поле $request_time ближе к полной обработке на upstream. Если TTFB высокий, а $request_time низкий — ищите сеть/CDN; если оба высокие — бэкенд или БД.
DNS — частый скрытый виновник
Каждый новый хост в цепочке микросервисов → резолвинг имени. Проблемы:
- слишком большой TTL (Time To Live) записи DNS — после смены IP клиенты ещё долго ходят на старый адрес;
- нет кэша резолвера в приложении;
- IPv6 AAAA есть, но маршрут до IPv6 сломан (fallback замедляет).
Файл /etc/hosts на staging — легитимный способ подменить маршрут для отладки.
Практические рекомендации для API
- Таймауты на исходящие вызовы (connect + read) — всегда явные.
- Идемпотентность и retry только на безопасных операциях — иначе дубли при ретрансмиссии TCP не спасут бизнес-логику.
- Сжатие (
gzip,brotli) для крупных JSON — экономит bandwidth, тратит CPU. - CDN для статики; API — ближе к пользователю через edge только если есть смысл (часто API остаётся в одном регионе).
- Смотрите p95/p99, не среднее — сеть «длинным хвостом» портит UX.
Связанные темы
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Клиентская часть приложения: HTML, CSS, JavaScript, фреймворки, работа с API. Node.js используется как среда сборки (Vite, Webpack), но не является частью клиентской логики в браузере. ★ Серверная часть (Backend) — невидимый для пользователя слой приложения, отвечающий за бизнес-логику, хранение и обработку данных, а также взаимодействие с внешними системами. Метрики веб-приложений: QPS, TPS, latency, перцентили, трассировка и примеры инструментирования для объективной оценки производительности. Матрица навыков серверной разработки веб-приложений по уровням junior → middle → middle+ с привязкой к материалам энциклопедии. Большинство бэкендов в продакшене работают на Linux (или совместимых системах). Регистрация, сброс пароля, счета, уведомления — email остаётся надёжным каналом, когда push и мессенджеры недоступны. Один и тот же бизнес можно вывести в интернет разными способами. От выбора зависят: формат API, кэширование, SEO, сложность деплоя и то, что именно пишет бэкенд-разработчик. Три слоя наблюдаемости: метрики показывают симптом, логи — причину, аудит — кто что сделал. Что писать в продакшене и чего избегать. Краткие итоги раздела «Фронтенд и бэкенд». Чек-лист раздела Фронтенд и бэкенд — вопросы для самопроверки в энциклопедии Вселенная IT.Фронтенд
Бэкенд
Метрики производительности веб-приложений
Компетенции бэкенд-разработчика
Linux для бэкенд-разработчика
Исходящая почта на бэкенде
Типы веб-приложений и роль бэкенда
Наблюдаемость бэкенда — метрики, логи и аудит
Итоги
Чек-лист самопроверки