Как правило, в крупных организациях в DirectumRX работают тысячи пользователей, каждый из которых отправляет, принимает, подписывает десятки документов в день. Чтобы справляться с большими нагрузками, в архитектуру системы DirectumRX встроены микросервисы.
Для начала вспомним, как выглядела архитектура в версии 3.1 и ниже. А именно ту часть, которая была изменена:
Сервисы DirectumRX представляли собой веб-приложения службы Internet Information Services (IIS) и взаимодействовали между собой посредством очереди сообщений MSMQ. Чтобы в дальнейшем поддерживать работу на свободно распространяемом ПО Linux, появился вопрос, как обеспечить работу сервисов. Кроме того, при работе через IIS пулы сервисов потребляли много памяти, что могло приводить к зависанию веб-приложений. Это послужило еще одним условием, чтобы оптимизировать схему работы DirectumRX:
В версии 3.2 сервисы системы DirectumRX переведены на микросервисы – это независимые self-hosted приложения, каждое из которых выполняет узкоспециализированную задачу. За счет использования микросервисов архитектура системы обеспечивает:
Сервисы общаются друг с другом через брокер сообщений RabbitMQ. Таким образом, гарантируется доставка сообщений, даже если один из сервисов недоступен. Приобретать ПО не требуется, пакет для установки компонент RabbitMQ сразу входит в состав дистрибутива DirectumRX. А в инструкции по установке и в инструкции по обновлению подробно описано, как установить и настроить RabbitMQ.
Состав сервисов, которые входят в стандартную поставку, значительно расширился. Для сравнения покажем схему:
Для поддержки компаний, которые используют свободно распространяемое ПО, разработан новый движок для обработки задач Workflow. Он написан на .NET Core. Как мы к этому пришли можно детальнее почитать в статье «Как мы сделали свой движок Workflow» на сайте habr.com.
Кроме того, сервис Workflow разделен на два микросервиса:
Благодаря переходу на новый движок и микросервисы система DirectumRX:
Думаю, вам также интересно знать, а смогут ли задачи, созданные в прошлых версиях, корректно работать на новых сервисах? – Да, смогут. Исключением являются задачи, которые прежний сервис Workflow не смог обработать. Чтобы найти такие задачи, в состав дистрибутива добавлена утилита WorkflowConverter.exe. Нужно запустить утилиту с ключом –check и проверить записи в лог-файле. Список задач, указанных в лог-файле, необходимо пересмотреть и обработать.
Например, если задача приостановлена по ошибке, в лог-файле появляется запись вида:
2019-07-30 14:19:27.0858 Warn WorkflowInstance is Suspended. InstanceId=115697 TaskId=3626 SchemeName=ApprovalTaskRouteDocflowSungero ProcessId=100950d0-03d2-44f0-9e31-f9c8dfdf3829
2019-07-30 14:19:27.0858 Info Fix instance by aborting task. TaskId=3626; ProcessId=100950d0-03d2-44f0-9e31-f9c8dfdf3829
Или если задача стартована, но в базе данных процесс по каким-либо причинам не создался, вы увидите запись вида:
2019-07-30 14:19:06.8571 Warn Task doesn't have WorkflowInstance. TaskId=67 SchemeName= ProcessId=ae03c598-ab50-4781-b1b2-968510b338b9
2019-07-30 14:19:06.8571 Info Fix instance by aborting task. TaskId=67; ProcessId=ae03c598-ab50-4781-b1b2-968510b338b9
Как правило, это старые задачи, с которыми никто не работал, и они не имеют ценности. При обновлении они прекращаются.
А вот задачи с блокировками хорошо поддаются обработке. Например, в момент выполнения блока задачи пользователь заблокировал документ, который требовалось подписать. В этом случае в лог-файле утилиты появляется запись вида:
2019-10-15 12:37:37.0930 Warn Found locked blocks. TaskId=85. Problems:
2019-10-15 12:37:37.0930 Warn Cannot lock. The item "Incoming Letter" with ID 47 is already locked.
2019-10-15 12:37:37.0930 Warn LockedEntityType=8dd00491-8fd0-4a7a-9cf3-8b6dc2e6455d; LockedEntityId=47
2019-10-15 12:37:37.1086 Warn Found non-convertible block states. TaskId=85 BlocksIds = [4]
Чтобы подготовить задачу к обновлению, достаточно доработать скрипт DeleteEntityLocks.sql, который входит в состав утилиты, и выполнить его. В скрипте нужно лишь указать параметры LockedEntityId (ИД заблокированного типа сущности) и LockedEntityType (Заблокированный тип сущности) из лог-файла утилиты. Еще больше подробностей о порядке обновления читайте в инструкции по обновлению DirectumRX.
Обратите внимание, что структура инструкции обновлена. Теперь в ней проще ориентироваться, не нужно высчитывать промежуточные версии, искать, программу какой версии использовать для обновления. Выбирайте нужный раздел, например, «Обновление с версии 3.0, 3.1 до 3.2» и выполняйте указанный порядок действий. Все просто!
С целью масштабирования сервис агентов также переведен на несколько микросервисов:
Для удобства работы с офисными документами в версии 3.2 появилась возможность открывать их в браузере для просмотра, не запуская приложения-редакторы. Чтобы эта возможность работала, в архитектуру встроено еще несколько микросервисов:
Как уже говорили ранее, брокер сообщений RabbitMQ устанавливается вручную по инструкции. В программе установки задаются только параметры подключения системы DirectumRX к брокеру сообщений. Параметры задаются такие же, как на сервере RabbitMQ, и все действия выполняются в один шаг:
Для установки новых сервисов предпросмотра в программе указываются порт и папки для временного и более длительного хранения файлов предпросмотра. При получении запроса на предпросмотр документа первоначально сервисы скачивают файлы во временные папки, подключаются к сервису хранилищ с помощью специальных токенов доступа. Таким образом, обеспечивается безопасность доступа к данным системы, даже если сервисы находятся в разных узлах сети.
Остальные сервисы устанавливаются и запускаются автоматически от имени учетной записи Windows, которая используется для запуска пула сервера приложений. В этот же момент создается очередь RabbitMQ, ожидая будущих сообщений. В результате от вас больше не требуется никаких действий, все сервисы заработают сразу.
Также, чтобы упростить развертывание системы DirectumRX и сервера БД в распределенной среде, для администратора написаны соответствующие инструкции. Они доступны на сайте поддержки DIRECTUM в формате PDF:
Скачивайте, пользуйтесь, с нетерпением ждем обратной связи!
Вдобавок, чтобы архитектура DirectumRX справлялась с большими нагрузками, оптимизированы ключевые узкие места системы. Например, получение списков, которые содержат более 1 млн. записей, механизм проверки прав. Для проверки внесенных изменений в разработку проведены массовые нагрузочные тесты на базе данных Microsoft SQL Server с 5000 пользователей и 100 миллионами документов. Тесты показали, что многие действия пользователей в системе, кроме формирования сложных отчетов, выполняются за 2 секунды.
Теперь значительно быстрее выполняется:
И это не все. В статье перечислены только примеры оптимизированных мест системы. Подробнее список доработок представлен в документе «Изменения DirectumRX 3.2».
Крупный бизнес предъявляет повышенные требования к масштабируемости. Мы сделали важный шаг к микросервисной архитектуре в версии 3.2, и благодаря этому появилось еще больше возможностей для развития системы: добавление новых сервисов, гибкое распределение их нагрузки по серверам, развитие средств мониторинга и пр.
Впереди нас ждет много нового, а уже сейчас вы можете оценить работу новых сервисов. Ждем ваших отзывов и комментариев!
Добрый день.
Интересует вопрос. Решения разрабатываемые под 3.2 с MSSQL при переносе на продуктивную систему с 3.2 с PostgreSQL, будут работать?
Судя по описанию проблем возникнуть не должно. На есть какие-либо нюансы в данном случае? (например при работе с новыми отчётами, сбор данных, для которых, оформлен не через объектную модель, а непосредственно через SQL запрос.)
Александр, добрый день! без понимания деталей сложно ответить на ваш вопрос.
миграция с MS SQL на PG тема не очень связанная с изменениями версии.
если вы например, использовали в разработке TSQL или есть привязки к системным таблицам или есть sql индексы для ваших кейсов то адаптация может потребоваться. если ваше решение будет использоваться у крупных заказчиков (тысячи одновременных пользователей) то лучше сразу разрабатывать и тестировать на нужной СУБД.
Авторизуйтесь, чтобы написать комментарий