Операция выполнена!
Закрыть
Хабы: .NET, Asterisk, Linux, Микросервисы

Продолжая делиться опытом про разработку сложных высоконагруженных систем, хочу написать про разработку второго голосового робота, который стал крупным работающим проектом в масштабах страны.
Начинали мы с нуля, с эскизов. Задача была реализовать систему, обладающую следующими функциональными и техническими требованиями:
-поддержка разговора с абонентом в режиме реального времени
-адаптация на высокую нагрузку + масштабируемость (тысячи одновременных звонков)
-доп. фичи, в виде отправки расшифровки разговора абоненту, текстовые нотификации в телеграмм и прочее.
В качестве основного технологического стека (именно под голосовую часть) была выбрана связка Asterisk + .Net (главным образом потому что у самого был такой опыт, те Asterisk не оспаривался а вот под стек для программного решения были споры), а для масштабируемости - микросервисная архитектура, в том числе со сложными сервисами-оркестраторами.
Если кратко, описание решения выглядело примерно таким:
-сервис управления состоянием звонка (Asterisk REST API + web-сокеты). Управление звонком и получение его стейта в режиме реального времени;
-ряд сервисов по управлению непосредственно голосом: вывод TCP трафика, преобразование в GRPC, распознавание голоса, получение текстового ответа, синтезация ответа, отправка голоса обратно в канал (TCP). Итого, цепочка из ~ 7 сервисов с дуплексной передачей трафика;
-ряд сервисов по сохранению результатов - параметров звонка, расшифровки, самой голосовой записи.
Нас сильно подвела реализация .Net (6.0-7.0) GRPC, которая, как показала практика, не выдерживала нужных нам значений RPC. Если взять 1 звонок:
-пакеты по 320 байт
-каждые 20 мили секунд, или 50 раз в секунду (архитектура Asterisk)
-дуплексная передача, итого Х2
-работа сервиса в режиме прокси, еще Х2
-500 одновременных звонков на 1 под в цепочке
Итого RPC = 5022* 500 = 10 тыс / сек , те кол-во сетевых операций чтения/записи GRPC пакетов.
.Net же показывал более-менее стабильные результаты до 50 звонков (те в 10 раз ниже ожидаемого). Далее начинались деградации (задержка времени между пакетами), которая накапливалась и доходила до неприличных 70 мсек (вместо 20).

Читать далее
Читайте также
СТАТЬ АВТОРОМ
НОВОСТИ

ПИШИТЕ

Техническая поддержка проекта ВсеТут

info@vsetut.pro