Ошибка протокола системы взаимодействия 1с
В начале апреля фирма «1С» выпустила новую версию платформы – 8.3.10.
Новые возможности получились весьма «вкусными». В этой статье мы рассмотрим Систему взаимодействий.
Если коротко, то это Skype (или Telegram) внутри конфигурации 1С. О таком корпоративном мессенджере давно мечтали руководители и IT-шники :)
Начнем рассмотрение Системы взаимодействия с самых основ.
Концепция
Сначала давайте рассмотрим, что из себя представляет «1С:Предприятие». Этот программный комплекс построен по классической трёхзвенной архитектуре. Представить его можно в следующем виде:
Рисунок 1 – Упрощённая схема трёхзвенной архитектурыЕсть клиентская часть, серверная часть и база данных. Передача данных между клиентом и сервером происходит при помощи серверного вызова, а доступ к базе данных возможен только со стороны сервера.
Подробнее про серверные вызовы можно прочитать в статье «Как работает серверный вызов в 1С». Для данного же материала важно отметить следующий факт – инициировать серверный вызов для передачи данных возможно только на клиентской части.
Но давайте вернёмся к «Системе взаимодействий»! Для начала обратимся к документации и посмотрим – что же скрывается под таким громким названием?
Под термином «видеозвонок» понимается любой возможный вариант общения двух пользователей, который включает в себя как только голосовой канал общения, так и полноценный видеозвонок (голосовая информация и изображение).
Исходя из описания, получается что фирма «1С» встроила в платформу «мессенджер» для общения пользователей между собой. «Наконец-то!» – воскликнут одни. «Зачем?» – вопрошают другие. Оставим эту дискуссию для комментариев, а пока продолжим рассматривать «Систему взаимодействий» дальше.
Логично, что общение имеет смысл в том случае, когда в системе работают два или более пользователей. В среде «1С:Предприятие» для каждого пользователя организуется своя рабочая область. Поэтому [в клиент-серверном варианте] несколько клиентских подключений к информационной базе можно представить следующим образом:
Рисунок 2 – Схема многопользовательского варианта работы «1С:Предприятие»Но! Клиентские процессы работают каждый в своей рабочей области и не имеют пересечений. Единственная возможность передачи информации – через серверную часть.
Рисунок 3 – Схема запуска клиентской частью обработчика ожидания для периодического запроса к серверной частиКак видим, общение клиентских частей таким образом возможно, но оно имеет свои особенности.
Но самое главное: увеличится нагрузка на самое узкое место системы – соединение между клиентом и сервером (особенно в момент передачи потока медиа). Поэтому фирме «1С» надо было найти иное решение задачи взаимодействия пользователей.
Рисунок 8 – Схема серверной части «Системы взаимодействий». Первое приближениеВстроить этот «маршрутизатор» в серверную часть «1С:Предприятие», по уже понятным нам причинам, нецелесообразно. Поэтому («в-третьих»), дополнительно необходимо определиться с расположением серверной части «Системы взаимодействий».
Итак, у нас получилось несколько «пазлов», сложив которые, мы увидим полную картину о «Системе взаимодействий». Давайте прямо сейчас это и сделаем!
Вопрос с оперативной двусторонней передачей информации между клиентом и сервером «Системы взаимодействий» решился без «изобретения велосипеда»: на помощь пришёл современный протокол WebSocket (далее WS). В качестве «вишенки на торте» – этот протокол позволяет передавать информацию в зашифрованном виде, что обеспечивает защиту передаваемой информации.
Стоит отметить, что при совершении видеовызовов по протоколу WS передается лишь служебная информация для инициализации звонка. Передача видео происходит с использованием других технологий, встроенных в «Систему взаимодействий».Сложив всё вместе, получаем следующую схему:
Рисунок 9 – Схема работы «Системы взаимодействий». Первое приближениеПолучается, для того чтобы этот функционал начали активно использовать даже те, кто работает в программах «1С:Предприятие» давно, необходимо, чтобы он был единым целым с существующей системой, а не «чем-то сбоку». А для этого необходимо, чтобы «Система взаимодействий» «видела» пользователей информационной базы.
Но как «Система взаимодействий» узнает о пользователях информационной базы, если это отдельный сервис?
Для каждого пользователя в информационной базе 1С создается новый пользователь в «системе взаимодействия». Это происходит автоматически при первой аутентификации пользователя информационной базы после подключения её к сервису. При этом уникальный идентификатор нового адресата для взаимодействий сохраняется как в базе данных, так и в сервисе.
Рисунок 10 – Схема работы «Системы взаимодействий». Второе приближениеПолучается, что все желающие будут пользоваться одним «маршрутизатором»? Как это возможно, как не запутаться – где чья информационная база и кому можно управлять её подключением к сервису?
Рисунок 11 – Схема серверной части «Системы взаимодействий». Второе приближениеИдентификация абонента выполняется по адресу электронной почты, и он может являться владельцем одной или нескольких информационных баз, подключенных к «Системе взаимодействий».
Неконтекстные обсуждения представляют собой чаты общего характера, доступные только тем пользователям, которые были добавлены в беседу. При помощи них можно устраивать групповые совещания с ограниченным кругом участников.
Стоит отметить, что пока нет возможности выполнять групповые видеовызовы, и будет ли развитие в этом направлении – информации на текущий момент нет.
Внимание! К моменту публикации этой статьи фирма «1С» уже опубликовала некоторые особенности платформы 8.3.11, в которых сообщается об изменении механизма работы «Системы взаимодействий» в части видеовызовов.В платформе 8.3.10 технология видеозвонков была реализована при помощи центрального видео-сервера, встроенного в сервер «Системы взаимодействий». Скорее всего, тестирование данного механизма показало большую нагрузку на серверную часть «Системы взаимодействий» при совершении пользователями звонков. И уже в следующей версии платформы [8.3.11] видеовызовы будут выполняться по технологии peer-to-peer.
Также, разработчики «приоткрыли завесу» над технологиями, которые они использовали при создании «Системы взаимодействий». Например, для хранения сессий пользователей, подписок на события и прочей служебной информации они используют распределенное хранилище Hazelcast.
Ну что, наверное уже хочется попробовать «Систему взаимодействий»? Сейчас мы расскажем, как начать её использовать.
Подключение
Начать работать с «Системой взаимодействий» можно на любой, даже пустой, конфигурации, если используется платформа «8.3.10». Для этого необходимо убедиться, что свойство Режим совместимости установлено в значение Не использовать:
Рисунок 12 – Настройка режима совместимости конфигурацииКогда условия в информационной базе соблюдены, можно начинать использовать «Систему взаимодействий». Для этого необходимо её сначала подключить к сервису «1С:Диалог». Управление подключением к «Системе взаимодействий» производится в пользовательском режиме «1С:Предприятие» при помощи соответствующей стандартной функции, доступной через главное меню программы в разделе Все функции:
Рисунок 14 – Меню подключения к «Системе взаимодействий»В случае, если информационная база ещё не подключена к сервису «1С:Диалог», откроется следующая форма:
Рисунок 15 – Окно управления подключением к «Системе взаимодействий». Подключение отсутствует Рисунок 16 – Окно управления подключением к «Системе взаимодействий». Запрос кода регистрацииКогда вы укажете адрес электронной почты, на который сервис «1С:Диалог» сможет выслать регистрационную информацию, на него придёт письмо примерно следующего содержания:
Рисунок 17 – Пример письма с кодом регистрации в «Системе взаимодействий»Цифровой код из письма (на рисунке подсвечен желтым цветом), необходимо использовать для завершения регистрации при помощи диалогового окна подтверждения регистрации следующего вида:
Интуитивно понятно, что в поле Адрес электронной почты абонента необходимо указать электронную почту, которая была использована на первом шаге регистрации, а в поле Код регистрации – код из письма. При указании некорректных данных в этих полях ввода «Система взаимодействий» вернёт ошибку «Отказано в доступе» и регистрация не будет завершена.
Поле Наименование информационной базы заполняется произвольными символами (как показала практика, можно использовать даже спец. символы).
Напомню, что идентификация информационной базы в «Системе взаимодействий» происходит по Уникальному идентификатору, который автоматически создаётся в момент регистрации, хранится и в «Системе взаимодействий» и в базе данных и не может быть установлен или изменён самостоятельно. Символы, введённые в поле Наименование информационной базы, никакого влияния на это не оказывают.
Рисунок 19 – Окно управления подключением к «Системе взаимодействий». Успех!После этого в текущем сеансе «1С:Предприятие» объекты «Системы взаимодействий» автоматически активизируются без перезапуска клиента. Остальным пользователям для получения возможности участвовать в обсуждениях и получать/выполнять звонки, необходимо выполнить перезапуск сеанса работы в информационной базе.
- Регистрационный номер лицензионной программы 1С и ИНН организации, на которую приобреталась эта программа
- Электронную почту абонента сервиса
- Планируемое количество пользователей.
Каждая заявка анализируется, и по результатам рассмотрения открывается доступ к видео-вызовам или присылается отказ.
Доступ к тестированию видеозвонков открывается абоненту и действует на все информационные базы, подключенные этим абонентом к сервису.
Использование «Системы взаимодействий» «в картинках»
А теперь заглянем в использование системы. Но только совсем чуть-чуть… Как говорится – «для затравочки»!
Настройка 1С:Сервера взаимодействия и медиасервера
$ tar xvzf 1c_cs_10.0.47_linux_x86_64.tar.gz
$ tar xvjf postgresql_11.5_19.1C_x86_64_rpm.tar.bz2
$ sudo ./1ce-installer-cli install
$ sudo passwd postgres
$ su postgres
$ /usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data
$ psql
$ exit
$ sudo systemctl enable postgresql-11
$ sudo systemctl start postgresql-11
Проверить, что все запустилось: Копировать в буфер обмена
При необходимости смотреть логи: Копировать в буфер обмена
Настройка обмена файлами в системе взаимодействия
Для обмена файлами в системе взаимодействия необходимо подключиться на сервере взаимодействия к хранилищу файлов. Хранилище должно поддерживать протокол S3 (V2 или V4).
Можно развернуть собственное хранилище:
Или подключиться к существующим:
- Amazon
- Amazon CDN
- Google Cloud
- Google Cloud CDN
- Croc Cloud
- Техносерв
Необходимо выбрать только один вариант использования хранилища файлов:
$ sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
$ sudo firewall-cmd --reload
Для доступа к серверу хранилища, необходимо задать логин и пароль в переменных среды MINIO_ACCESS_KEY и MINIO_SECRET_KEY, соответственно. Чтобы значения этих переменных устанавливалиь при старте, занесем их инициализацию в /etc/default.
Копировать в буфер обмена
$ sudo vi /etc/default/minio
$ sudo vi /etc/systemd/system/minio.service
[Service]
WorkingDirectory=/usr/local/
User=user
Group=user
EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"$\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/opt/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=65536
TimeoutStopSec=infinity
SendSIGKILL=no
$ sudo systemctl enable minio.service
$ sudo systemctl start minio.service
Создайте новое хранилище, например cs-bucket
Логин: значение переменной MINIO_ACCESS_KEY,
Пароль: значение переменной MINIO_SECRET_KEY
В данном примере будет использоваться хранилище Amazon
Если вы планируете работать в web-клиенте, то необходимо настроить CORS:
- Откройте хранилище в браузере (или перейдите по ссылке https://console.aws.amazon.com/s3/buckets/<имя_хранилища>/?region=eu-west-1)
- Permissions / CORS Configuration
- Настройка с максимальным уровнем доступа:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration> - На сервере взаимодействия выполните команду Копировать в буфер обмена
Подключение информационной базы к серверу взаимодействия
Подключение медиасервера для проведения видеоконференций
$ sudo yum install git
$ sudo yum install epel-release
$ sudo yum install wget ninja-build meson jansson-devel openssl-devel libsrtp-devel sofia-sip-devel glib2-devel opus-devel libogg-devel libcurl-devel pkgconfig gengetopt libconfig-devel libtool autoconf automake cmake
$ sudo yum groupinstall 'Development Tools'
/distr
$ git clone https://libwebsockets.org/repo/libwebsockets
$ cd libwebsockets
$ mkdir build
$ cd build
$ cmake -DLWS_MAX_SMP=1 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" -DLIB_SUFFIX=64 ..
$ make && sudo make install
$ sudo mkdir /var/log/janus
$ sudo vi /opt/janus/etc/janus/janus.jcfg
$ sudo vi /opt/janus/etc/janus/janus.plugin.videoroom.jcfg
$ sudo vi /etc/systemd/system/janus.service
[Unit]
Description=Janus WebRTC Server
After=network.target
$ sudo systemctl enable janus.service
$ sudo systemctl start janus.service
$ sudo firewall-cmd --zone=public --add-port=8088/tcp –permanent
$ sudo firewall-cmd --zone=public --add-port=0-65535/udp –permanent
$ sudo firewall-cmd –reload
mediaserver - имя машины или IP-адрес сервера Janus.
Для проверки, что конференция идет через медиасервер, необходимо создать конференцию с числом участников >= значения параметра conference-server-based-threshold. После того, как все участники конференции ответят на звонок, выполнить команду:
Сервер взаимодействия 1С
Сервер 1С Предприятия установлен на Linux Ubuntu 16.04
Аппаратные характеристики сервера 1C предприятия: 22vCPU, 132 GB RAM, SSD-диск
База данных: PostgresSQL на Linux Ubuntu 16.04
Аппаратные характеристики сервера 1C предприятия: 18vCPU, 112 GB RAM, SSD-диск
Сервер взаимодействия установлен на Linux Ubuntu 16.04
Аппаратные характеристики сервера взаимодействия: 2vCPU, 4GB RAM
Имеется проблема с Системой взаимодействия, которая заключается в следующем: при одновременной работе более 50 пользователей новые пользователи могут авторизоваться, после чего у них интерфейс приложения 1С "зависает", невозможно переходить в меню и пункты. В некоторых случаях помогает удаление пользовательского кэша 1С на компьютере, после чего можно зайти 1 раз, на этом компьютере, следующие попытки войти снова приводят к зависанию.
Если остановить сервер взаимодействия или обработкой отменить регистрацию системы взаимодействия - конфигурация начинает работать нормально. Если перезапустить систему взаимодействия - платформа непродолжительное время может работать нормально, от 30 минут до 2 часов, после чего снова начинаются зависания. Время проявления зависания уменьшается если одновременно заходит большое количество пользователей, от 50-100 человек. При этом деградации производительности во время зависания ни на одном сервере не наблюдается, работа серверов стабильна, есть достаточное количество свободной оперативной памяти и ядер.
Проблема началась после перехода на на платформу 8.3.13.1644 и сервер взаимодействия версии 4.0.73, а затем и на 8.3.13.1690 и 5.0.37. Ранее, до перехода на 8.13, на платформах, включая 8.3.12.1685 - всё работало нормально.
Когда были платформы до 8.3.12 - использовали PostgreSQL 9.6.3 и для сервера взаимодействия, и для сервера базы данных. После обновления платформы до 8.3.13.1644 проблема с зависанием появилась при использовании PostgreSQL 9.6.3, после чего обновили PostgreSQL до версии 11.1 на сервере баз данных, и до последней версии в ветке 9.6 - на сервере взаимодействия. Проблема так и сохранилась, и от версии PostgreSQl не зависит.
Устанавливали сервер взаимодействия заново, на чистую систему, без обновления существующей установки сервера взаимодействия.
Вопросы: куда копать, что смотреть? В конфигурации установлен режим совместимости с 8.3.11, может ли это меть влияние? Как ограничить количество подключений пользователей к серверу взаимодействия? В техподдержку 1с написал, ответ жду уже больше месяца, результата пока нет.
Система взаимодействия — это механизм появившийся в технологической платформе 8.3.10. Это механизм позволяет клиентским приложениям, серверу и пользователям взаимодействовать между собой. В этой статье я попробую рассказать обо всем этом более подробно.
Общая информация
Итак, как уже было сказано выше, система взаимодействия позволяет осуществлять различные виды взаимодействия между приложениями, сервером и пользователями. Цель создания такой системы — упростить автоматизацию бизнес-процессов и предоставить пользователям простое средство коммуникации.
По видам, взаимодействия можно разделить на:
- Не интерактивные — когда информацией обмениваются только подсистемы прикладного решения (без участия живых людей);
- Только интерактивные — когда все участники взаимодействия являются живыми людьми;
- Смешанные — когда человек общается с подсистемой прикладного решения (своего рода робот, отвечающий на запросы).
Неконтекстные обсуждения — не привязанные к какому-либо объекту информационной базы. Участвовать могут любые пользователи выбранные инициатором обсуждения. Обсуждений такого вида может быть сколько угодно.
Контекстные обсуждения — привязаны к конкретному объекту информационной базы. Доступ к обсуждению имеют те пользователи, которые имеют доступ к обсуждаемому объекту. Для каждого объекта может существовать только одно обсуждение.
Сервер взаимодействия
Для начала раздобудем все, что потребуется (устанавливать в этом же порядке):
-
; ;
- Ring;
- Сервер взаимодействия (64-bit);
Ring и сервер взаимодействия
Сервер взаимодействия включает в себя севера Hazelcast и Elasticsearch, которые можно скачивать и устанавливать отдельно, но в нашем случае я выбрал общий вариант.
Во время установки потребуется ввести логин и пароль от учетной записи PostgreSQL.
Проверка состояния сервера взаимодействий
Запустить и остановить компоненты системы можно как и все остальные службы:
Службы сервера взаимодействий
А также при помощи утилиты Ring:
ring hazelcast --instance <hc_instance> service start(stop)
ring elasticsearch --instance <elastic_instance> service start(stop)
ring cs --instance <cs_instance> service start(stop)
<hc_instance>, <elastic_instance>, <cs_instance> — название экземпляра соответствующего сервера.
Настройки сервера взаимодействий в моем случае находятся тут:
В этой папке находится достаточно много файлов и соответственно немало настроек, описывать которые в этой статье я не буду, ибо статья обзорная. Небольшие изменения внесу только в файл com._1c.ecs.websocket.yml :
Настройка WebSocket
Изменить параметры можно при помощи утилиты Ring. Подробнее об имеющихся параметрах можно узнать на сайте ИТС или из справки утилиты Ring:
Подключение и использование
Для подключения к собственному серверу взаимодействий потребуется специальная обработка — CollaborationSystemRegister.epf , которую можно скачать там же, где и сам сервер. В этой обработке нужно указать адрес для подключения (который настраивается в файле com._1c.ecs.websocket.yml ) и адрес эл. почты:
Читайте также: