Современные компании используют множество различных систем для управления проектами, документооборотом, проектированием и другими задачами. Каждая из этих систем может быть специализированной и оптимизированной для своей функции, но их изоляция создаёт барьеры для автоматизации и обмена данными. Прямая интеграция между каждой парой систем приводит к сложным связям, которые трудно масштабировать и поддерживать.
Для решения этой проблемы всё чаще применяется микросервисная архитектура, где вместо прямых связей между системами используется универсальная интеграционная платформа. В статье представлен пример реализации такой платформы, продемонстрированный на конференции ТИМИ-2024. Рассмотрим её ключевые аспекты: архитектуру, используемые технологии и вызовы, с которыми столкнулись разработчики.
Основные цели проекта
Целью проекта стало создание платформы, которая обеспечивает:
-
Масштабируемость: возможность легко добавлять новые сервисы и филиалы.
-
Надёжность: защита от потери данных и минимизация времени простоя.
-
Гибкость: поддержка интеграции через стандартизированные протоколы и технологии.
Особое внимание уделялось использованию современных open-source решений, что снижает затраты на внедрение и эксплуатацию.
Используемые технологии
Проект строился на основе следующих инструментов:
-
Node.js + Express:
-
Асинхронная архитектура позволяет обрабатывать тысячи запросов одновременно.
-
REST API обеспечивает удобное взаимодействие между микросервисами.
-
Более 3,5 миллионов проектов по всему миру используют Express.js, что гарантирует проверенную экосистему.
-
RabbitMQ:
-
Основной инструмент для обмена сообщениями между сервисами.
-
Обеспечивает кластеризацию для отказоустойчивости.
-
Поддерживает сложные сценарии маршрутизации сообщений благодаря механизму обменников (Exchange) и очередей (Queue).
-
MinIO:
-
Высокопроизводительное объектное хранилище с поддержкой протокола S3.
-
Обеспечивает безопасное хранение данных с шифрованием и управлением доступом.
-
Подходит для работы с большими объёмами данных (до 10 петабайт при горизонтальном масштабировании).
Эти инструменты позволяют создавать надёжную и гибкую архитектуру, отвечающую требованиям современных инженерных организаций.
Архитектура системы
Интеграционная платформа построена по микросервисной архитектуре, где каждый сервис выполняет строго определённые задачи. Сервисы могут разворачиваться как в виде Windows-приложений, так и в контейнерах Docker для Linux. Такая гибкость важна для территориально распределённых компаний, использующих разные ИТ-решения.
Ключевые микросервисы:
-
CADLibMS: отправка, приём и обработка сообщений для Model Studio и CADLib.
-
LotsiaMS: взаимодействие с СЭД, включая создание и обновление документов.
-
MailerMS: отправка уведомлений по электронной почте.
-
RabbitMQ: брокер сообщений для координации взаимодействия между сервисами.
-
MinIO: безопасное и масштабируемое хранилище данных.
Архитектура поддерживает кластеризацию RabbitMQ и MinIO, что обеспечивает надёжность при выходе из строя отдельных узлов. Например, в случае отказа одного из узлов RabbitMQ, сервисы автоматически переключаются на другой узел.
Территориальная распределённость
Система поддерживает филиалы в нескольких городах, что требует особого подхода к развёртыванию и обмену данными:
-
Локальные узлы: в каждом филиале развёрнуты брокеры сообщений RabbitMQ и файловые хранилища MinIO.
-
Событийная модель: обмен данными происходит через JSON-сообщения, которые включают ключевые параметры события (например, создание или обновление проекта).
Схема архитектуры системы на примере двух филиалов:
Пример JSON-сообщения:
{ "event": "project_сreated_updated", "project": { "id": 100000013008032, "code": "95.213", "name": "Отработка запасов сильвинита\r\nв центральной и западной части шахтного поля рудника", "customer": "Публичное акционерное общество «Березка»", "engineer": "Иванов И.И.", "siteCode": "95", "tim": true }, "notification": { "recipients": [ " johndoe@company.com" ], "subject": "Создан новый проект", "text": "Текст сообщения", "html": "<h1>Текст сообщения в формате HTML</h1>" } }
Реализованные интеграционные функции
Система охватывает широкий спектр интеграционных процессов, в том числе:
-
Создание и обновление проектов.
-
Создание и обновление баз данных.
-
Формирование и утверждение структур состава различных стадий документации.
-
Подготовка и выдача заданий в интегрируемых системах.
-
Выгрузка проектов в архив по различным параметрам и в различных форматах.
Пример события выдачи задания, произошедшего в одной системе и результат обработки этого события в другой:
Событийная модель обеспечивает централизованный подход к управлению процессами, позволяя быстро реагировать на изменения и минимизировать ручное вмешательство.
Основные вызовы и решения
-
Отказоустойчивость:
-
Настройка кластеров RabbitMQ и MinIO позволила минимизировать влияние отказов узлов на общую работоспособность системы.
-
Сервисы автоматически переключаются между узлами, фиксируя ошибки в логах для анализа.
-
Обработка ошибок:
-
Если сервис недоступен, сообщения сохраняются в очереди RabbitMQ до восстановления работы.
-
В случае сбоя при обработке сообщений они повторно отправляются с заданной периодичностью.
-
Совместимость:
-
Использование Windows-сервисов для организаций, где основная инфраструктура базируется на Windows.
-
Контейнеризация с Docker для гибкого и быстрого развёртывания на Linux-серверах.
Итоги и перспективы
Разработанная интеграционная платформа доказала свою эффективность в реальных условиях. Её преимущества включают:
-
Удобство масштабирования для подключения новых филиалов и сервисов.
-
Надёжность благодаря кластеризации и управлению ошибками.
-
Гибкость использования open-source технологий.
Планируется дальнейшее развитие системы, включая добавление новых событий и улучшение аналитики процессов.
Мавлеткулов Руслан Рамилевич
ГК «Русский САПР», Руководитель группы внедрения СЭД
ссылка на оригинал статьи https://habr.com/ru/articles/869984/
Добавить комментарий