Collaboration – как все работает

В предыдущих статьях мы обсудили основные преимущества и возможности Docker. Сегодня я хочу рассказать о реализации сервера Webitel Collaboration с помощью этой технологии. Напомню, что не так давно, с выходом bpm’online 7.4.1, был анонсирован новый продукт для бесплатных внутренних коммуникаций. Вот его мы сегодня и разберем по кирпичиках.

Микросервисы

Помните, микросервисы в основе приложения? Именно эта идеология и заложена в Collaboration. Мы разбили все компоненте на несколько небольших контейнеров в зависимости от выполняемой задачи. А какие основные задачи Collaboration? Если вкратце, то это внутренние звонки. Здесь нет статистики, нет записей разговоров, нет внешней маршрутизации и провайдеров связи.

Архитектура решения

Webitel Collaboration Cloud

Сервис разнесен на два отдельных сервера:

  • softswitch
  • сервер приложений

Softswitch

Как Вы уже могли догадаться, в качестве softswitch мы используем FreeSWITCH. На данном сервере запущены 3 контейнера, а именно:

Для чего необходимо было разделять голосовые фразы и softswitch? Все очень просто – звуковые файлы не так часто обновляються, как FreeSWITCH, но весят намного больше. Что бы каждый раз при обновлениях образа Docker не выкачивать заново аудио, мы их вынесли отдельно. Образ webitel/freeswitch наследует с webitel/freeswitch-sound все содержимое с помощью ключа —volumes-from.

Сервер приложений

На стороне сервера приложений запущено 2 контейнера:

Клиентская часть

bpm’online устанавливает WebSocket соединение с сервером приложений и WebRTC соединение с softswitch с помощью клиентской JavaScript библиотеки.

Преимущества решения

Все построено на Docker контейнерах, что позволяет в считаные минуты поднять новый сервер в любой Linux-среде. При обновление ПО, достаточно выкачать новый образ и пересоздать контейнеры.

Возникли дополнительные вопросы? Задавайте в комментариях!

2 Comments on "Collaboration – как все работает"


  1. А каким образом в докере пробрасывается сотни-тысячи портов для rtp? Из документации “понятно только то, что кажды порт требует свое правило. Неужли вы в контейнерах их все пишете/генерируете?


  2. В случае с FreeSWITCH использую

    --net=host — Tells Docker to skip placing the container inside of a separate network stack. In essence, this choice tells Docker to not containerize the container’s networking!

Leave a Reply

Your email address will not be published. Required fields are marked *