© SibTone Group 2007-2018
Мы используем стабильные решения
для безотказной работы систем,
каждый день, круглый год

Asterisk против Freeswitch

Последние несколько месяцев я вовлечен в разработку решения на базе FreeSWITCH (который только что отпраздновал свой ​​первый 1.0-релиз) как замену Asterisk. Я довольно плотно работаю с asterisk, имея несколько сотен внедрений, могу сказать, что знания по нему у меня достаточно хорошие. Рассматривая FreeSWITCH, я признаю, что очень впечатлен его возможностями, в частности его производительностью и гибкостью. Учитывая эти сильные стороны, я не очень бы удивился, наблюдая в течении нескольких следующих лет, как многие вендоры использующие Asterisk переходят с него на данную платформу.

Запустив Asterisk в продакшн на своем стандартном оборудовании, я не в состоянии зачастую обработать более 250 одновременных звонков. Но, на том же самом оборудовании, используя FreeSWITCH, я тестировал до 1000 одновременных звонков без каких-либо на то проблем. Данные из рассылки FreeSWITCH утверждают, что достигается 3000 одновременных звонков, вплотную приближаясь к пропускной способности линии. Интересно, что первый достигнутый предел производительности не будет связан с мощностью процессора компьютера.

Итак, является ли FreeSWITCH заменой Asterisk? Давайте посмотрим, что он может показать по сравнению с Asterisk и как он настраивается.

Первое, что вы заметите при настройке FreeSWITCH, что все настраивается через xml файлы. Лично я думаю, что для лучшего развития проекта стоит использовать стандартные текстовые конфигурационные файлы вместо XML, так как последние имеют слишком свободную форму. Это приводит к путанице - "Где я должен настроить такие то - такие то параметры?" Обычно ответ на такой вопрос - "где угодно", но люди хотят настраивать подобные вещи в правильных местах и двигаться дальше. Свободная форма XML делает выбор неоднозначным, потому что один параметр может быть оспорен и переопределен в каком либо другом XML-файле. Большинство использует стандартный текстовый редактор, поэтому понимание настроек в XML становится менее четким, даже используя раскраску кода. Редактор XML тут бы очень помог, но у кого есть XML редактор, особенно при работе в консоли? Для лучшей производительности, ни одна из машин, на которой я делал разворачивание системы, не имела графического интерфейса.

Благодаря дополнительным возможностям, в которых преуспел FreeSWITCH, я готов простить сей незначительный огрех. Например, чего только стоит идея, что вы можете использовать регулярные выражения в плане набора. И вы не ограничены только соответствием номера назначения. Вы можете взять другие соответствия, такие как номер звонящего и набранный номер, отправив абонента прослушать голосовую почту, если он звонит на свой входящий номер. FreeSWITCH позволяет эффективно использовать возможности SQL для хранения данных сессии и регистрационных данных. Эти данные могут быть использованы на отдельной системе с базой данных посредством UnixODBC для кластера из нод FreeSWITCH. Это также позволяет разрабатывать разнообразные фронт-энд веб-интерфейсы и различные информационные виджеты состояния.

Но, пожалуй, самой интересной особенностью FreeSWITCH является то, что вы можете выйти за границы традиционных секций диалплана и взять управление обработкой вызовов с использованием различных языков программирования. Вместо того, чтобы изобретать колесо, FreeSwitch просто привлекает существующие языки программирования со всеми их разнообразными библиотеками, добавляя их методы для управления вызовами. Такой простой подход упрощает разработку и дает разнообразный набор инструментов разработчикам. Если веб-разработчик знает JavaScript, то он может и на нем написать приложение для VoIP.

Для примера, ответ на вызов и проигрывание сообщения при помощи JavaScript достаточно легко сделать:

session.answer( );
session.streamFile( "message.wav" );

 

Так почему же FreeSWITCH работает лучше чем Asterisk? Это в значительной степени исходит из того, что FreeSWITCH отслеживает и помнит каждый канал в любой момент времени. FreeSWITCH использует один поток для каждого канала, чтобы поддерживать состояние каналов избегая сложностей блокировки связанных списков каналов в случае Asterisk. Такой более сегментированный подход приводит к меньшему количеству возникновения взаимных блокировок и подвисаний. Трудно поверить, но данный подход на порядок повышает производительность.


автор очерка Anders Brownworth


FreeSwitch