Версия:

Описание технической архитектуры ПО “Сервис видеоконсультаций Voda”

Тип архитектуры

Клиент-серверное веб-приложение (SaaS).

Приложение имеет монолитную архитектуру + встраиваемый в web страницы клиентов виджет на JavaScript.

Схемы взаимодействия

Клиент инициирует связь с виджета (код виджет загружается с сервера бэкэнда CCS.Voda) на сайте заказчика. Запрос идет к серверу бэкэнда CCS.Voda по сокету, поверх https. Сервер бэкэнда CCS.Voda уведомляет всех доступных консультантов по сокету в их веб интерфейс.

Когда один из консультантов принимает звонок, инициализируется стандартный механизм для установки WebRTC соединения, где в качестве сервера SIP используется тот же сервер бэкенда CCS.Voda: клиенты обмениваются оффером и ансвером исходя из настроек и возможностей оборудования, далее обмениваются ICE кандидатами.

Для установления информации о возможных маршрутах подключения (ICE-candidate) каждый из клиентов может обращаться к STUN серверу (если клиент например находится за NAT). После обмена кандидатами, соединение устанавливается либо напрямую peer-to-peer, либо в некоторых случаях, при невозможности установить прямого соединения через сервер TURN (в нашей реализации сервер STUN и TURN - один и тот же сервер использующий программное обеспечение coturn).

Во время консультации для обеспечения согласованности состояния звонка, в том числе и завершения звонка, используется сервер бэкенда CCS.Voda, но не для передачи видео/аудио. Чат в настоящей реализации сделан на технологии web сокетов и использует сервер бэкенда CCS.Voda, и не использует WebRTC.

Архитектура Бэкенда

Бэкенд написан на nodejs и отчасти является веб-сервером (обработка статики делегирована nginx).

Архитектуру построения приложение определяет платформа GoCore (CCS.Core), которая обеспечивает строгую архитектуру взаимодействия компонентов.

Обработка запросов производится по двум каналам:

Все запросы идут через единый внутренний api, который занимается валидациями, проверкой доступов, прочими ограничениями и проверками и отправляют запрос в методы классов.

Каждый класс имеет свое отражение в базе данных, в виде, таблицы с данными данной сущности, профайлов, с описаниями настроек самого класса, его полей.

Метод класса реализует бизнес-логику, используя для взаимодействия с бд встроенные методы, и возвращает результаты своей работы обратно клиенту в единообразном формате.

Фронтенд бэкофис + модуль консультанта

Архитектуру бэкофиса, также как и бэкенда определяет платформа GoCore (CCS.Core).

Платформа предоставляет базовый механизм взаимодействия с серверов, включая авторизацию, набор компонентов, таких как Меню, Таблицы, Формы, Фреймы, и встроенные в них фильтры, выпадающие списки, различные виды редакторов.

Все компоненты плотно интегрированы с бэкендом, определяя поведение, внешний вид, формирования данных и запросов на получение/изменения данных, с учетом их связей.

Используя готовые компоненты, и кастомный код построен бэкофис для пользователей системы. Набор бэкофиса определяется сервером, на основе ролей конкретного пользователя.

Модуль консультанта

Модуль консультанта написан отдельным проектом на React и встроен в общий бэкофис. Помимо расположения в общем интерфейсе, он также использует общее подключение и его поведение также может быть определено настройками ролей.

Фронтенд виджет

Написан как отдельный проект на React и имеет архитектуру принятую данным фреймворком. Устанавливает соединение с бэкендом по web-сокету и использует предусмотренное для него API.

Собирается в js бандл, который клиент может подключить к себе на сайт и инициализировать.