Рисунок 1. Архитектура
Медиа прокси - это вспомогательный модуль, отсутствующий в стандартной поставке Asterisk. Он был спроектирован и разработан нашей компанией с нуля.
Его назначением является ускорение обработки медиа потоков, текущих через систему. Для некоторых бизнес приложений, например, Оптовой перепродажи, это очень важно, потому что оптовики обрабатывают сотни одновременных сессий.
Проблема со стандартным методом обработки медиа потоков заключается в том, что для обработки одного пакета (приема и отправки) происходит несколько переключений контекста (между ядром и приложением) и несколько копирований самого пакета в памяти, что забирает значительное кол-во ресурсов процессора при большом кол-ве одновременных соединений.
Улучшение производительности достигается за счет короткого медиа пути, поскольку Медиа прокси работает полностью в режиме ядра операционной системы. Таким образом, не делается переключений контекста между режимами ядра и приложения и ненужного копирования для обработки одного голосового пакета. Совместно с режимом FreeBSD "быстрый форвардинг" это дает скорость, ограниченную только возможностями системы как TCP/IP-маршрутизатора. CPU задействован практически только для подсчета контрольных сумм и маршрутизации.
Хотя в целом идея не нова (FreeBSD уже имеет NAT(Network Address Translation) и маршрутизацию в ядре), при применении ее в VoIP мы получаем значительное улучшение производительности и это является единственным способом поддерживать высокую медиа нагрузку через систему (кроме кластеризации).
Медиа прокси поддерживает:
Медиа прокси активируется только когда:
Тестирование показало впечатляющие результаты: до 1100 одновременных сессий с g711 кодеком (максимальная нагрузка) и двухсторонним аудио проходили через единственную Core 2 Duo систему.
Таблица 1. Сравнение технологий соединения каналов.
Технология соединения | Кол-во сессий |
---|---|
Самостоятельное. Голос идет напрямую от пира к пиру. | неограниченное |
Перекодировка. Медиа формат перекодируется между соединенными каналами в режиме приложения. | зависит от кодеков |
Джиттер Буфер. Медиа пакеты проходят через джиттер буфер в режиме приложения для сглаживания задержек. | 380 |
Пакет к пакету. Медиа пакеты копируются в режиме приложения между соединенными каналами. | 580 |
Медиа прокси. Медиа пакеты проходят только через ядро операционной системы. | 1100 |