Что такое Worker

Worker в рамках платформы SIP.tg — это сервер, отвечающий за обработку и преобразование голосовых данных из формата SIP в формат Telegram и обратно. Это задача, работающая в режиме реального времени, требует больших вычислительных ресурсов и эффективность её выполнения напрямую влияет на качество голоса во время разговора.

Ввиду большой вычислительной сложности, в рамках платформы предусмотрено наличие неограниченного числа Worker'ов для масштабируемости системы и распределения нагрузки. Кроме того, размещение Worker'ов в разных географических зонах позволяет улучшить ещё один показатель качества соединения — уменьшить задержку в прохождении сигнала.

В дополнении к существующим в рамках платформы официальным Worker'ам, предусмотрено также наличие пользовательских Worker'ов.

Преимущества собственного Worker

Подключая свой собственный Worker к платформе SIP.tg, Вы получаете следующие дополнительные возможности:

  • самостоятельно выбирать оборудование исходя из ожидаемой нагрузки;
  • размещая Worker в дата-центре рядом с виртуальной АТС, достигнуть минимальную задержку голоса во время разговора;
  • обеспечить полную конфиденциальность содержимого разговора, т.к. голосовые потоки не передаются даже на платформу SIP.tg;
  • получить доступ извне к SIP-серверам, расположенным в локальных или ограниченных сетях;
  • обеспечить дополнительную конфиденциальность SIP-аккаунтов (по желанию);
  • делиться своими вычислительными ресурсами с другими пользователями SIP.tg (по желанию).
Системные требования

Исполняемая среда Worker построена на базе платформы виртуализации Docker на основе образа ОС Ubuntu 18.04. Основной образ подготовлен для платформы amd64, однако имеются образы и для других платформ. С целью избежания программной эмуляции среды исполнения, мы не рекомендуем использовать в качестве основной операционную систему, отличную от Linux (Mac OS, Windows). Все дополнительные программные зависимости уже содержатся в распространяемом образе Worker, на основной ОС необходимо наличие только Docker CE и Docker Compose.

Сервер должен обладать выделенным IP-адресом и быть доступен из внешней сети, либо у Вас должна быть возможность "пробросить" один произвольный TCP-порт на внешний IP-адрес.

Исходя из наших тестов производительности, каждый звонок потребляет около 2.5% ресурсов одного ядра процессора AMD Ryzen 5 1400 и около 1 Мб ОЗУ при использовании кодека A-law.

Настройка Worker

Получение сертификатов

Сертификаты шифрования позволяют установить защищённое соединение между платформой SIP.tg и сервером, на котором запущен Worker. В настройках бота @siptg_bot выберите раздел Workers и нажмите кнопку Новый.

Picture

Выберите раздел

Picture

Нажмите Новый

В результате бот пришлёт 2 файла: приватный ключ и сертификат, необходимые для безопасного соединения. Сохраните их — позже они потребуются для записи на сервер Worker'а.

Подготовка сервера

Самая подробная и актуальная информация по настройке сервера расположена на странице проекта на GitHub. Порядок действий включает в себя:

  • обновление установленного ПО (при необходимости);
  • установка ПО Docker;
  • получение шаблонов конфигурационных файлов;
  • сохранение файлов сертификатов из бота на сервере;
  • внесение изменений в конфигурационные файлы (при необходимости);
  • запуск Worker'а на сервере.
Подключение к Worker

Последний шаг в настройке — это настройка параметров подключения к Worker'у через бота, а именно — указание адреса подключения. Нажмите кнопку Адрес и введите внешний адрес и порт сервера, на котором запущен Worker. Далее нажмите кнопку Включить для попытки соединения с сервером Worker'а. Если параметры подключения неверны, Вы получите сообщение об ошибке и Worker будет отключен.

Права использования

Через бот можно установить один из 2 режимов, который влияет на права использования Worker'а другими пользователями SIP.tg:

  • 🔑 Личный — режим, при котором использовать Worker может только его владелец и пользователи, которым явно предоставлен доступ;
  • 🌐 Публичный — режим, позволяющий любому пользователю SIP.tg использовать Ваш Worker.
Список пользователей

В режиме редактирования Worker'а нажмите кнопку Пользователи, чтобы попасть в режим управления пользователями.

Вносимые в список пользователей изменения вступают в силу только при активном режиме 🔑 Личный. Однако, при переключении с 🌐 Публичного режима, доступ к Worker'у теряется у всех пользователей, отсутствующих в списке. Чтобы сохранить доступ в процессе изменения режима, нужно заранее сформировать список.

Чтобы удалить пользователя из списка, нажмите кнопку с соответствующим @username или ID пользователя и подтвердите удаление. Для перехода в режим добавления пользователей в список, нажмите Добавить. Далее необходимо переслать любые сообщения от пользователей, которых Вы хотите добавить, боту @siptg_bot. Для удобства, список добавленных пользователей будет формироваться "на лету". Данный режим будет активен в течение 5 минут, добавление можно прекратить в любой момент.

Предоставление доступа к Worker'у не означает, что пользователи будут его использовать. Решение об использовании Worker'а для каждого SIP-аккаунта принимает сам пользователь. По умолчанию, а также при отзыве доступа пользователю, для всех SIP-аккаунтов, использующих отзываемый Worker, назначается один из ✅ Официальных Worker'ов.

Ограничения пользовательского Worker

Свой Worker можно использовать как в режиме SIP клиент, так и SIP шлюз. Однако последний может содержать SIP-аккаунты 2 типов: с входящим подключением и с исходящим. Ограничение заключается в том, что SIP-аккаунты с входящим типом подключения можно использовать только с Официальными Worker'ами. Данное ограничение связано с особенностью внутреннего устройства платформы SIP.tg.

Второе ограничение заключается в отказоустойчивости. В случае недоступности пользовательского Worker'а, нагрузка переносится на другой Worker того же владельца. Если это единственный Worker у пользователя, нагрузка не переносится. Нагрузка не переносится на Worker'ы других пользователей (а также на официальные), поскольку пользовательский Worker может быть настроен иначе, что может привести к неоправданному отключению SIP-аккаунтов (например, если SIP-сервер, запрещает подключения извне, или если Ваш Worker меняет пароли от SIP-аккаунтов — см. ниже). В случае, если Worker недоступен более 30 минут, он полностью отключается, при этом @siptg_bot отправляет уведомление как владельцу, так и пользователям, которые настроили SIP аккаунты на использование отключаемого Worker'а.

Конфиденциальность SIP-аккаунтов

Ядром подсистемы SIP является платформа IP-телефонии Yate. Гибкость платформы позволяет "на лету" изменять любые данные о SIP-аккаунте (например, пароли), поступающие от платформы SIP.tg. Таким образом, платформа SIP.tg может содержать фейковые пароли, но в момент подключения к SIP серверу через Ваш Worker, пароль будет заменяться на реальный. Данное поведение достигается за счёт использования внешнего модуля, пример которого представлен на GitHub.