Задайте бюджет задержки для трафика реального времени через VPN
Начните с предельного срока, который должно соблюдать приложение, затем измерьте одностороннюю задержку и джиттер в заданных условиях. Среднее без порога для опоздавших пакетов ничего не доказывает.
Жалобы на VPN в реальном времени требуют срока, по которому можно фиксировать сбой, а «низкая задержка» — не срок. Решите, что должен обеспечить разговор или удалённый сеанс, затем измерьте путь относительно этого требования в заданных условиях. Без порога для опоздавших пакетов любой результат спорен. Распределение ниже — проектное решение, и оно существует, чтобы измерению было что ответить.
Запишите срок, прежде чем трогать зонд
Срок задаёт приложение и его пользователи, а не маркетинговая страница поставщика. Живой голосовой вызов, сеанс удалённого рабочего стола и ночная резервная копия выдерживают совершенно разные времена ожидания, и важный отказ обычно находится в хвосте, а не в медиане. Запишите число вместе с рабочей нагрузкой, к которой оно относится.
Затем распределите его. Захват и пакетирование потребляют часть бюджета, канал доступа и туннель — другую часть, буфер де-джиттера приёмника намеренно удерживает пакеты, а обработка приложения забирает остальное. Называние этих этапов удерживает шифрование туннеля в пропорции, вместо того чтобы делать его подозреваемым по умолчанию для каждого медленного пакета.
Наконец определите контракт измерения в четырёх строках: конечные точки и направление, форма трафика, условия во время прогона и результат, о котором вы сообщите. Тихая воскресная выборка и загруженная вторничная выборка отвечают на разные вопросы, поэтому укажите, какую вы собрали. Если вы не можете заполнить все четыре строки, прогон не готов начаться. Этот контрольный список ещё и делает два отчёта сопоставимыми спустя месяцы, когда никто уже не помнит, что ещё нёс канал.
Распределите бюджет по каждому этапу
Таблица — это подсказка для планирования, а не собранные данные. Заполните владельца для каждой строки до первого зонда, потому что владелец — тот, кому вы звоните, когда этап превышает свою долю.
| Stage | What it contributes | Who owns it |
|---|---|---|
| Capture and packetization | Encoder frame size, aggregation | Application owner |
| Tunnel and transit | Encryption, queueing, path length | Network owner |
| Receiver buffer | Deliberate waiting to absorb variation | Application owner |
| Application processing | Decode and render time | Application owner |
Две строки обычно удивляют людей. Буфер приёмника — не дефект, когда добавляет задержку, потому что он выполняет работу, для которой настроен. А доля туннеля часто меньше очереди перед ним, особенно на канале загрузки, который насыщается во время отправки.
Когда у этапа нет владельца, бюджет — фикция. Назначьте его до измерения, иначе следующее совещание пройдёт в спорах о том, чьё число неверно.
Измерьте одностороннюю задержку честными часами
Односторонняя задержка — то число, которое важно для срока, и для неё нужны синхронизированные часы на обоих концах. Метрика односторонней задержки требует указать вместе с результатом метод синхронизации, разрешение и оценённое смещение. Два несинхронизированных хоста могут выдать очень точное число для неверной величины.
Захватите несколько сотен пакетов, а не горсть, и запишите состояние часов в тот же момент:
$ ntpq -p
$ owping -c 300 -i 0.2 10.90.0.1
$ ping -c 200 -i 0.2 10.90.0.1 | tail -n 3
Время кругового обхода — отдельное измерение, а не два односторонних значения, сложенные вместе. Деление RTT пополам предполагает симметричные пути и симметричные очереди, а туннель поверх мобильного канала загрузки регулярно ломает оба предположения. Сообщайте RTT как RTT и держите его вне одностороннего бюджета.
Сообщите хвост и опоздавшие пакеты
Обобщите распределение: медиану, 95-й и 99-й процентили, худший случай, потери и число пакетов, пришедших позже, чем допускает срок. Среднее — наименее полезное из этих чисел для нагрузки реального времени, потому что гладкое среднее может скрыть хвост, который портит каждый третий вызов.
Вариация задержки напрямую питает буфер приёмника. Больше буферизации скрывает вариацию и добавляет ожидание, поэтому поток может выглядеть стабильным, превышая свой срок. Выберите формулировку вариации, укажите интервал, на котором вы измеряли, и сохраняйте её согласованной между прогонами.
Повторите прогон с репрезентативным перекрёстным трафиком. Путь, который укладывается в бюджет в простое и не укладывается в окно резервного копирования, сообщил вам нечто полезное о планировании, чего не выявило бы ни одно отдельное тихое измерение. Записывайте условия рядом с результатом, иначе следующий инженер сравнит две выборки, которые никогда не были сопоставимы.
Примите проект, когда измеренный хвост укладывается в бюджет при той нагрузке, которую вы действительно запускаете, и отклоните его, назвав в отчёте этап, вышедший за предел.