Создание маршрутизирующего прокси-сервера для телефонных звонков на номера экстренных служб для компании RedSky Technologies, Inc. Сервер должен принимать входящий звонок, эмулируя один или несколько кол-центров экстренных служб, определять положение звонившего, используя основной или один из резервных серверов LIS, и перенаправлять звонок на ближайший к абоненту или наименее загруженный кол-центр – в зависимости от текущего набора правил маршрутизации.
Такой прокси-сервер, в соответствии со стандартом NENA (Национальная ассоциация провайдеров номеров экстренных служб), является частью архитектуры Emergency Services IP Network (ESInet).
Одной из основных задач было обеспечить масштабируемость сервера и возможность маршрутизировать входящие SIP-звонки с минимальной задержкой, независимо от их количества и частоты. Для этого приложение было спроектировано с возможностью развёртывания в отказоустойчивом кластерном окружении, работающем под управлением Corosync и DRBD. Распределение входящей нагрузки между параллельно работающими узлами кластера JBoss гарантирует малое время отклика и равномерную загруженность инфраструктуры. Репликация раздела с данными средствами DRBD на системном уровне обеспечивает высокую надёжность хранения как настроек приложения, так и логов аудита всех обрабатываемых звонков.
Сервер должен был обеспечивать настройку правил маршрутизации и обработки входящих звонков, а также редактирование списка серверов, на которые перенаправляются входящие звонки, и списка серверов, определяющих положение абонента. Для этого была разработана консоль управления, оформленная как веб-приложение и развёрнутая на том же кластере JBoss, что и основное приложение маршрутизатора. В консоли предусмотрено несколько уровней доступа, в зависимости от роли пользователя. Права доступа и идентичность пользователя определяются по сертификату, устанавливаемому в клиентский браузер. Пользовательский интерфейс был выполнен на GWT.
В ходе выполнения проекта клиент рассматривал различные варианты развёртывания приложения для тестирования и «боевого» использования. В результате изменились требования к операционной системе, на основе которой строилось решение. Поскольку при начальном проектировании мы старались максимально отвязать решение как от физической инфраструктуры, так и от особенностей операционных систем, переход с Debian на CentOS прошёл без неожиданностей и достаточно быстро.