Прямой ответ
Задержка и пропускная способность описывают разные свойства канала, поэтому проблема с временем отклика не решается увеличением пропускной способности.
| Показатель | Что измеряет | Единица |
|---|---|---|
| Задержка | Время до ответа на один пакет | Миллисекунды |
| Пропускная способность | Объём данных в единицу времени | Мегабиты в секунду |
| Время до первого байта | Время до начала получения ответа | Миллисекунды |
# Задержка до узла
ping -c 10 host
# Время до первого байта и общее время запроса
curl -sS -o /dev/null -w 'ttfb: %{time_starttransfer}\ntotal: %{time_total}\n' \
Увеличение пропускной способности сокращает время передачи объёма, но не влияет на время до первого байта, которое определяется задержкой. О базовой диагностике — в статье про ping и traceroute.
Распределение значений и выбор метрики
Задержка варьируется между обращениями, поэтому единичное измерение не отражает опыт пользователя.
Среднее значение. Не отражает долю обращений с высокой задержкой, поскольку редкие длительные значения теряются в среднем. Метрика, рассчитанная по среднему, не показывает проблемную долю.
Процентиль. Значение, ниже которого находится определённая доля обращений, поэтому редкие длительные задержки учитываются. О расчёте процентилей — в статье про процентили метрик.
Джиттер. Различие задержки между обращениями определяет пригодность канала для операций, чувствительных к равномерности.
Практическое следствие: диагностика задержки выполняется по распределению значений, а не по среднему либо единичному измерению.
Отдельный аспект — этапы запроса. Время до первого байта включает разрешение имени, установку соединения, согласование и обработку запроса, поэтому задержка локализуется по таймингам этапов. О диагностике по таймингам — в статье про HTTP-заголовки.
Три признака того, что проблема в задержке, а не в пропускной способности.
Время до первого байта велико при малом объёме ответа. Объём передачи не определяет время, поэтому увеличение пропускной способности не помогает.
Много мелких обращений. Каждое обращение включает задержку, поэтому общее время определяется числом обращений, а не объёмом.
Задержка растёт на определённом участке пути. Трассировка показывает участок, на котором время возрастает.
Влияние задержки на архитектуру обращений
Задержка определяет, как число обращений влияет на общее время, поэтому архитектура учитывает стоимость каждого обращения.
Последовательные обращения. Каждое обращение включает задержку, поэтому общее время растёт пропорционально числу обращений. Объединение запросов сокращает число обращений.
Параллельные обращения. Задержка overlaps, поэтому общее время определяется самым длительным обращением. Ограничение определяется числом одновременных соединений.
Повторное использование соединения. Установка соединения и согласование выполняются один раз, поэтому последующие обращения не включают эти этапы.
Практическое следствие: сокращение числа обращений влияет на общее время сильнее, чем увеличение пропускной способности, при малом объёме данных.
Распространённая ошибка — увеличение пропускной способности канала при проблеме с задержкой. Объём передачи мал, поэтому время определяется задержкой, а не объёмом.
Отдельный аспект — географическое расположение. Задержка определяется физическим расстоянием и числом промежуточных узлов, поэтому сокращение расстояния до источника данных влияет сильнее, чем изменение параметров канала.
Влияние промежуточных узлов на задержку
Каждый промежуточный узел добавляет время обработки, поэтому число узлов в пути определяет суммарную задержку.
Обработка на промежуточном узле. Узел получает пакет, определяет направление и передаёт дальше, поэтому обработка добавляет время к каждому переходу.
Очередь на узле. Пакет ожидает передачи при загруженном канале, поэтому время ожидания добавляется к задержке. Загруженность узла определяет величину добавления.
Число переходов. Трассировка пути показывает число промежуточных узлов, поэтому суммарная задержка определяется произведением времени перехода на число узлов.
Практическое следствие: сокращение числа промежуточных узлов снижает задержку, поэтому расположение источника данных ближе к потребителю влияет сильнее, чем изменение параметров канала.
Практика: диагностика задержки
1. Измерьте время до первого байта. Показатель включает задержку и обработку, поэтому определяет долю ожидания.
2. Снимите тайминги этапов. Задержка локализуется по распределению времени между разрешением, соединением и обработкой.
3. Оцените распределение значений. Процентиль учитывает редкие длительные задержки, которые теряются в среднем.
4. Выполните трассировку пути. Участок, на котором время возрастает, определяет место проблемы.
5. Сравните объём ответа и время. Малый объём при большом времени указывает на задержку, а не на пропускную способность.
6. Сократите число обращений. Объединение запросов влияет на общее время сильнее, чем увеличение пропускной способности.
7. Используйте повторное использование соединения. Установка соединения и согласование выполняются один раз.
Рекомендации:
- Различайте задержку и пропускную способность. Увеличение пропускной способности сокращает время передачи объёма, но не время до первого байта.
- Учитываем число обращений. Каждое обращение включает задержку, поэтому общее время растёт пропорционально числу обращений.
- Проверяйте распределение значений. Среднее не отражает долю обращений с высокой задержкой.
- Фиксируйте метрику времени до первого байта. Показатель отражает опыт пользователя точнее, чем общее время передачи.
- Пересматривайте при изменении расположения источника. Задержка определяется расстоянием, поэтому изменение размещения влияет на время.
Практический сценарий: увеличение пропускной способности не ускорило интерфейс
Контекст: канал был расширен, но время отклика интерфейса не изменилось.
- Диагностика. Тайминги показали, что основное время приходится на этап до первого байта, при этом объём ответов был мал. Каждое действие выполняло несколько последовательных обращений, каждое из которых включало задержку.
- Причина. Проблема заключалась в задержке, а не в пропускной способности. Объём передачи был мал, поэтому расширение канала не влияло на время. Число последовательных обращений определяло общее время.
- Действия. (а) Измерили время до первого байта и объём ответов, чтобы отличить задержку от пропускной способности; (б) объединили несколько последовательных обращений в одно, чтобы сократить число задержек; (в) включили повторное использование соединения, чтобы исключить установку соединения для каждого обращения; (г) перевели независимые обращения на параллельное выполнение; (д) зафиксировали метрику времени до первого байта как контролируемую величину.
- Результат. Время отклика сократилось, поскольку число последовательных обращений уменьшилось.
Вывод: увеличение пропускной способности не влияет на время до первого байта, которое определяется задержкой. Сокращение числа последовательных обращений влияет на общее время сильнее, чем расширение канала.
FAQ
Чем задержка отличается от пропускной способности? Задержка измеряет время до ответа на один пакет, пропускная способность — объём данных в единицу времени. Увеличение пропускной способности не сокращает задержку.
Почему среднее значение задержки не подходит? Редкие длительные значения теряются в среднем, поэтому доля обращений с высокой задержкой не отражается. Процентиль учитывает такие значения.
Что влияет на общее время при малом объёме данных? Число обращений, поскольку каждое включает задержку. Объединение запросов сокращает общее время сильнее, чем расширение канала.
Как локализовать участок с высокой задержкой? Трассировкой пути, которая показывает время до каждого промежуточного узла. Участок с возрастанием времени определяет место проблемы.
Источники: ping man page, curl man page, traceroute man page — ссылки в шапке.