Один Server Unit: 100 одновременных звонков, нагрузочный тест до 176% номинальной ёмкости

Один Server Unit нагрузили от одного звонка до 176% его номинальных 100 звонков: до номинальной ёмкости ответы держали «Стандарт», все звонки соединились.

Исследования

176%наибольшая проверенная нагрузка, доля номинальной ёмкости

Server Unit держит на себе весь голосовой стек клиента: обработку звонков, распознавание, языковую модель и синтез речи. Каждый блок несёт 100 одновременных звонков. Прежде чем это число попадёт в договор, его нужно проверить, поэтому мы построили нагрузочный тест и прогнали его дважды.

Мы хотели узнать, выдерживает ли блок свои номинальные 100 звонков так, чтобы ответы всё ещё звучали как разговор, и как он ведёт себя сверх них: при 120%, 150% и 176%.

Измерено на одном Server Unit с агентом-рекрутером и имитируемыми звонящими на том же блоке, по G.711 A-law через измерительный мост: 22 ступени нагрузки в 9 сериях, 22 018 ответов, около 129 часов разговора. Нагрузка указана как доля номинальной ёмкости (100 одновременных звонков), а время ответа как индекс, где один звонок равен 1,00.

Коротко: среднее время ответа остаётся в оценке «Стандарт» или выше до номинальной ёмкости, а с ранним стартом до примерно 117%. При 176% все звонки соединились и ни один не оборвался. На каждой ступени ответ получили более 99% реплик звонящих, а один раунд оптимизации под высокую нагрузку удвоил нагрузку, которую блок несёт в оценке «Стандарт».

Как мы измеряли

  • Имитируемые звонящие на том же блоке. Каждый разговор состоит из двух телефонных звонков: тестируемый агент и имитируемый звонящий. Двадцать имитируемых звонящих, у каждого свой голос, манера и настроение, спрашивают о вакансии, делают паузы и отвечают, как люди. Server Unit обслуживает оба конца каждого разговора, поэтому нагрузка на телефонию вдвое больше, чем создал бы настоящий разговор такого же размера.
  • Реалистичные зависимости. Внешние системы, к которым обращается агент, отвечают с фиксированной реалистичной задержкой.
  • Одни часы на линии. В тракте звука стоит измерительный мост. Он отмечает момент, когда фраза звонящего заканчивается, и момент, когда приходит первый звук ответа агента. Время ответа — это интервал между ними. Оно охватывает всё, что происходит внутри блока, включая паузу в конце реплики и передачу звука.
  • Ступени. Нагрузка растёт ступенями от одного разговора до 176% номинальной ёмкости. Каждая ступень две минуты устанавливается, затем измеряется не меньше пяти. Ступень с одним разговором идёт двадцать минут.
  • Ступень должна заслужить место. Ступень засчитывается, только если проходит восемь проверок: устойчивое состояние (вторая половина не медленнее первой), неудавшиеся реплики, исправность измерительного моста, перекрывающаяся речь, соответствие событий моста журналу агента, потерянная телеметрия, отказы в звонках и ограничители ресурсов.
  • Два режима. Мы измерили агента в стандартном режиме и с ранним стартом, при котором языковая модель начинает работать с распознанным текстом до формального закрытия реплики.

Что получилось

Диапазоны нагрузки

Оценки описывают, как звонящий воспринимает ответ. Каждая оценка заканчивается на своём индексе времени ответа.

Оценка ответа в стандартном режиме по диапазонам нагрузки; чем ниже индекс времени ответа, тем лучше.
Диапазон нагрузки Нагрузка, % номинальной ёмкости Оценка ответа Индекс до Что замечает звонящий
Низкая до 42 Платина 1,22 Ответы приходят почти с той же скоростью, что и на одном звонке
Умеренная 42–65 Золото 1,49 Быстрый ответ
Высокая 65–100 Стандарт 2,03 Естественная пауза; диапазон заканчивается на номинальной ёмкости
Пиковая 100–137 Минимум 2,71 Заметная пауза, но всё ещё разговор
Всплеск 137–176 Предел — Более долгая пауза, все звонки по-прежнему соединены

С ранним стартом каждый диапазон расширяется: «Платина» до примерно 57% номинальной ёмкости, «Золото» до примерно 78%, «Стандарт» до примерно 117%. Ранний старт мы измерили до 128% номинальной ёмкости.

Номинальная ёмкость достигнута

При 100 одновременных звонках среднее время ответа примерно вдвое больше, чем на одном звонке (индекс 2,02), и ответы остаются в оценке «Стандарт». С ранним стартом блок держит «Стандарт» примерно до 117% номинальной ёмкости.

Индекс ответа на каждом уровне нагрузки в стандартном режиме и с ранним стартом (чем ниже, тем лучше), 95-й процентиль к медиане и пропускная способность в долях от пика.
Нагрузка, % номинальной ёмкости Индекс ответа С ранним стартом 95-й процентиль / медиана Доля пропускной способности
1 звонок 1,00 0,88 1,73 0,01
24 1,07 — 1,61 0,38
36 1,15 — 1,61 0,55
50 1,30 1,14 1,69 0,74
64 1,48 — 1,72 0,94
80 1,75 — 1,70 1,00
96 1,97 1,71 1,62 0,98
112 2,20 — 1,69 0,94
128 2,52 2,21 1,68 0,99
152 3,02 — 1,60 0,91
176 3,34 — 1,71 0,81

Время ответа растёт медленнее нагрузки

Кривую мы описываем одним числом, эластичностью нагрузки: на сколько процентов растёт время ответа при росте нагрузки на один процент.

Как быстро время ответа растёт с нагрузкой; чем меньше, тем лучше.
Диапазон нагрузки, % номинальной ёмкости Эластичность Время ответа на +10% нагрузки
24–64 0,33 около 3%
64–128 0,77 около 8%
128–176 0,88 около 9%

Эластичность остаётся ниже 1 вплоть до 176%, и на кривой нет излома, после которого она резко идёт вверх. Клиент, который превышает номинальную ёмкость на 20%, получает заметно более долгую паузу, но система продолжает работать.

Хвост сохраняет пропорции

Медианный ответ и ответ на 95-м процентиле сохраняют одно соотношение на каждой ступени, от одного звонка до 176%:

Ответ на 95-м процентиле примерно в 1,6–1,7 раза больше медианного на каждой ступени нагрузки.

Медленные ответы растут вместе с остальными, поэтому клиент, знающий типичную паузу, может оценить и худшую.

Пропускная способность держится

Число ответов в секунду растёт с нагрузкой, достигает пика примерно при 80% номинальной ёмкости и остаётся в пределах 6% от пика с 64% до 128% от неё. При 176% блок всё ещё обрабатывает около 80% пиковой пропускной способности.

Звонки и медиа

  • Реплики с ответом. На каждой ступени ответ получили более 99% реплик звонящих.
  • Медиа. На измерительной линии не потерялось ни одного RTP-пакета ни на одной ступени.
  • Приём звонков. При 176% номинальной ёмкости одновременно было поднято 352 SIP-звонка. Все соединились, ни один не оборвался.
  • Модели. Очереди языковой модели и синтеза речи оставались пустыми на каждой ступени.

Раунд 1 и раунд 2

Мы провели тест, оптимизировали стек под высокую нагрузку и провели тест ещё раз. Оптимизация затронула тракт медиа, распределение детектора голоса между звонками, обработку тишины в синтезированной речи и момент запуска языковой модели.

Ёмкость до и после оптимизации; чем больше, тем лучше.
Показатель Раунд 1 Раунд 2
Ёмкость в оценке «Стандарт» около половины номинальной ёмкости номинальная ёмкость
Ёмкость в оценке «Золото» около 36% номинальной ёмкости около 65% номинальной ёмкости
Время ответа, один звонок исходное на 22% ниже
Время ответа при половине номинальной ёмкости исходное на 34% ниже
Пиковая пропускная способность исходная почти вдвое выше

Раунд 2 достиг номинальных 100 звонков, поэтому число в спецификации измеренное. Страница «Технологии» показывает, где нагрузочный тест находится в стеке. В заметке Voicecore (на английском) описан следующий шаг в обработке звука: ядро на Rust.

Условия теста

Измерено по G.711 на тестовой телефонной линии, с двадцатью имитируемыми звонящими и агентом-рекрутером; 94% первых фраз пришли из голосового кэша.

Читайте дальше

Следующий шаг

Получите ранний доступ к голосовым агентам Dialogist: мы приглашаем команды из листа ожидания по мере освобождения мощностей.

Лист ожидания

Мы подключаем команды постепенно. Напишем вам, когда подойдёт ваша очередь.