[Из песочницы] Программные IP-АТС и нагрузочное тестирование
Всем доброго дня! Вот уже несколько лет я занимаюсь IP-телефонией и стал замечать, что хоть и Интернет полон информации, я говорю не только про российский сегмент, но найти иной раз нужную можно только на каком-либо «заброшенном форуме», а то ее и вовсе нет. Если информации о IP-телефонии и самом протоколе sip предостаточно, то данных, как строиться программная IP-АТС, как происходит ее тестирование и отладка по понятным причинам нет, либо есть, но написаны таким языком, что понять может лишь тот, кто много лет работает в данной сфере.
Мною было принято решение заполнить эти пробелы и внести свою лепту, новичкам данная информация будет познавательной и полезной, более опытные пользователи могут подчеркнуть для себя что-то новое, во всяком случае все мы будем в плюсе. Планы на данный момент большие — написать цикл постов, обобщив полученные мною знания, по понятным причинам выкладывать сборки, виртуальные машины и прочее я не буду, самое главное направить, а идущий сам найдет дорогу.
Пожалуй, хватит лирики, начнем как всегда с теории. Так как данный пост будут читать пользователи с различным уровнем знаний, постараюсь все разложить коротко и ясно.
Введение
Программная IP-АТС — это автоматическая телефонная станция, работающая на основе протокола IP, «мозгом» которой является специальное программное обеспечение, реализующее коммутацию голоса (в данном случае пакетов с голосом) и прочие услуги, оказываемые абонентам.
Теперь давайте разберемся, как все это работает, сразу оговорюсь подробно расписывать не буду, это займет очень много времени, а следовательно будут некоторые некорректности и упущения.
Абонент подымает трубку телефона и вводит номер, тут же задействуется сигнализация, которая будет управлять сеансом передачи голосового потока, для этого существуют ряд протоколов из которых можно выделить два SIP и H.323. На данный момент SIP приобрел большую популярность и в этом посте будет рассматриваться он. Дальше будем считать, что с помощью протокола SIP было установлено логическое соединение между абонентами, а дальше нужен голос.
Абонент говорит в трубку — его голос кодируется с помощью программного или аппаратного кодека в набор битов. Кодек — алгоритм сжатия голоса, самый простой и распространенный PCMA. Дальше эти биты с помощью протокола RTP отправляются адресату.
Если обобщить все выше сказанное, то у нас есть протокол SIP, управляющий сеансом связи, в его состав входит протокол SDP, который описывает сессию (используемые и доступные кодеки и прочую информацию), эти протоколы упаковываются в транспорт TCP или UDP и с помощью протокола IP отправляется в указанном направлении. Как только устанавливается логическое соединение, то с помощью кодека сжимается голос и упаковывается в RTP и с помощью протокола IP отправляется адресату.
Теперь попытаемся ответить на главный вопрос кто управляет всем этим? Software switch или коротко softswitch — это «мозг» программной IP-АТС, управляющий всем внутренним и внешним взаимодействием. Softswitch у нас всех на слуху, все слышали про Asterisk и Freeswitch. Есть платные, есть бесплатные, есть с графическим интерфейсом, есть без.
На рисунке 1 я изобразил структурную схему программной IP-АТС, рассмотрим же ее подробнее. В первую очередь это операционная система (ОС), она должна быть совместима с железом, иметь нужные репозитории и быть удобной для работы. Про «железо» не будем говорить, пусть это будет некий сервер. Исходя из пожелания заказчика (ТЗ) подбирается «мозг» нашей IP-АТС — Softswitch, это может быть тот же самый Asterisk или Freeswitch или написанный собственноручно Softswitch. На рисунке я разделил Softswitch и ПО, по сути это может быть одно приложение все зависит от требований заказчика, можно взять готовый, тот же самый Freeswitch, написать программу, которая будет управлять им и также реализовать дополнительный функционал. С Web-сервером все ясно, нам нужна прослойка между http-клиентом и Softswitch. Ну и соответственно БД, не будем же мы постоянно переписывать конфигурационные файлы. ОС дает нам среду для работы, так же необходимо писать дополнительные драйверы, если хочется подключить платы FXO и E1.
Рис 1. Структурная схема программной IP-АТС
Теперь можно выдохнуть, описанная теория очень сжата, но нужна для дальнейшего понимания материала.
Sipp и StarTrinity SIP Tester
Несколько недель назад была поставлена задача — протестировать нагрузку, которую может выдержать наша программная IP-АТС. После долгих поисков я наткнулся на бесплатный генератор вызовов Sipp и платное StarTrinity SIP Tester. Ниже коротко опишу возможности данных приложений.
Начну пожалуй c самого простого — со StarTrinity SIP Tester. Приложение работает только под Windows, имеет огромное количество возможностей, регистрацию пользователей, выступать как сервер регистрации, отправлять исходящие вызовы со множеством параметров, принимать входящие вызовы и отправлять заданные сообщения, по сути вы можете написать сами скрипт и приложение поможет вам в этом. Но весь функционал — это тема отдельного поста, нам нужно для работы самое основное — умение отправлять вызовы с заданным интервалом, не забывая о RTP. А теперь самое главное — это приложение платное, но разработчики предоставляют и бесплатную немного урезанную версию, но по сути даже урезанной версией можно пользоваться, если проявить смекалку.
Бесплатная версия дает сделать 150 вызовов, при этом одновременных соединений может быть 50. Но после перезагрузки счетчик обнуляется и можно посылать вызовы заново.На рисунке 2 и 3 изображено приложение StarTrinity SIP Tester, можем увидеть по какому адресу, на какой номер, от кого, какой кодек, интервал и прочую информацию о вызовах. Так же стоит отметить, что есть Web-интерфейс и возможность самому делать скрипты, но что мне не понравилось, нельзя делать сценарии с неправильными параметрами.
Рис 2. Платная версия StarTrinity SIP Tester
Рис 3. Бесплатная версия StarTrinity SIP Tester
Если StarTrinity SIP Tester, это красивый графический интерфейс, который готов работать уже из коробки, то Sipp представился мне этаким «монстром», которого надо скачать, скомпилить, добавить нужные пакеты. Но как оказалось этого не стоит бояться, на сайте разработчики оставили великолепный гайд, описывающий процесс установки и возможности данного приложения. Сразу предупреждают потребуется несколько дней, чтобы научиться писать скрипты, но в этом и есть плюс, вы досконально поймете сам протокол sip и изучите его поля. Пару слов, есть встроенные сценарии, они самые обычные отправил и принял вызов, все же остальное ищем в Интернете, некоторые пользователи делятся, но мне пришлось сидеть изучать спецификации и писать свои скрипты. Sipp есть и под Windows и Linux, но стабильнее работает под Linux.
Теперь к делу, выделять машину только под Sipp затратно, берем и делаем виртуальную машину, я использую VirtualBox под Ubuntu, проблем у меня не возникло. Установили в соответствии с гайдом, заходим в папку с приложением и запускаем приложение с нужными ключами.
Рис 4. Генератор вызовов Sipp
Описывать функционал Sipp я не буду, он аналогичен StarTrinity SIP Tester, какое приложение лучше, тут однозначного ответа нет, я пришел к выводу, что они отлично дополняют друг друга.
Нагрузочное тестирование
Теперь мы знаем, что из себя представляет программная IP-АТС и как она работает, также мы знаем функционал генераторов вызовов.
Опять же при тестировании мы должны понимать режим работы программной IP-АТС: режиме прокси (проксируется RTP+сигналка), полупрокси (проксируется только сигналка), перенаправления запроса (сообщение 300). От этого будет зависеть надо ли нам включать RTP при некоторых сценариях или нет. На рисунке 5 я набросал несколько вариантов тестирования.
Вариант 1 — тестируем программную IP-АТС в режиме транзита, для этого нам понадобиться два разных ПК. На АТС прописываем маршрут, соответственно с одного Sipp/StarTrinity SIP Tester генерируем вызовы на другой Sipp/StarTrinity SIP Tester. Сразу скажу с StarTrinity SIP Tester на Sipp (или на оборот) генерировать вызовы не пробовал, но чисто в теории они должны быть полностью совместимы.
Вариант 2 — тестируем программную IP-АТС в режиме транзита, для этого нам понадобиться два разных ПК. На АТС прописываем маршрут, соответственно с одного Sipp/StarTrinity SIP Tester генерируем вызовы на Asterisk. Для Asterisk я использую виртуальную машину VirtualBox под Ubuntu, проблем у меня не возникло. В диалплане Asterisk прописывем следующее:
При вызове на данный номер Asterisk отвечает и весь полученный голос посылает обратно.
Рис 5. Варианты конфигурации оборудования для нагрузочного тестирования
Вариант 3 — тестируем программную IP-АТС в режиме оконечной станции, для этого нам понадобиться один ПК и IP-телефоны, на телефонах устанавливаем автоответ. На АТС регистрируем IP-телефоны, соответственно с одного Sipp/StarTrinity SIP Tester генерируем вызовы них.
Вариант 4 — тестируем программную IP-АТС в режиме оконечной станции, для этого нам понадобиться один ПК и аналоговые ТА. На АТС прописываем аналоговые ТА, соответственно с одного Sipp/StarTrinity SIP Tester генерируем вызовы них. На сколько я знаю, но сам не сталкивался есть определенные приборы, которые подключаются к аналоговым линиям и могут программироваться к примеру — подымать трубку при вызове, но если данных возможностей нет, придётся вручную подымать трубки.
Вот и все, естественно на программной IP-АТС включаем логи, или выводим консоль с отладкой и смотрим возникшие ошибки. Так можно определить предел производительности и отказа. Кстати, совет, на виртуальную машину устанавливайте Wireshark, tshark, tcpdump, так вы в режиме реального времени сможете отслеживать и анализировать весь трафик на вашем интерфейсе.
Подведение итогов
Подведем итоги, мы с вами поверхностно познакомились с построением программной IP-АТС и генераторами вызовов Sipp и StarTrinity SIP Tester и научились имитировать нагрузку. Если хорошо подумать, то с помощью этих генераторов вызовов можно спокойно протестировать весь стек Sip.
На сегодня это все, жду Ваших комментариев и замечаний, если Вы хотите поделиться своим опытом, то я буду только рад.
LOADING…
Ссылки
1.Sipp sipp.readthedocs.io/en/v3.6.0/#
2.StarTrinity SIP Tester startrinity.com/VoIP/SipTester/SipTester.aspx
3.Книги и прочая информация asterisk.ru/knowledgebase/books