Интеграция инженерных систем: опыт создания масштабируемой платформы с микросервисной архитектурой
Введене
Современные компании используют множество различных систем для управления проектами, документооборотом, проектированием и другими задачами. Каждая из этих систем может быть специализированной и оптимизированной для своей функции, но их изоляция создаёт барьеры для автоматизации и обмена данными. Прямая интеграция между каждой парой систем приводит к сложным связям, которые трудно масштабировать и поддерживать.
Для решения этой проблемы всё чаще применяется микросервисная архитектура, где вместо прямых связей между системами используется универсальная интеграционная платформа. В статье представлен пример реализации такой платформы, продемонстрированный на конференции ТИМИ-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": "Текст сообщения в формате HTML
"
}
}
Реализованные интеграционные функции
Система охватывает широкий спектр интеграционных процессов, в том числе:
Создание и обновление проектов.
Создание и обновление баз данных.
Формирование и утверждение структур состава различных стадий документации.
Подготовка и выдача заданий в интегрируемых системах.
Выгрузка проектов в архив по различным параметрам и в различных форматах.
Пример события выдачи задания, произошедшего в одной системе и результат обработки этого события в другой:
Событийная модель обеспечивает централизованный подход к управлению процессами, позволяя быстро реагировать на изменения и минимизировать ручное вмешательство.
Основные вызовы и решения
Отказоустойчивость:
Настройка кластеров RabbitMQ и MinIO позволила минимизировать влияние отказов узлов на общую работоспособность системы.
Сервисы автоматически переключаются между узлами, фиксируя ошибки в логах для анализа.
Обработка ошибок:
Если сервис недоступен, сообщения сохраняются в очереди RabbitMQ до восстановления работы.
В случае сбоя при обработке сообщений они повторно отправляются с заданной периодичностью.
Совместимость:
Использование Windows-сервисов для организаций, где основная инфраструктура базируется на Windows.
Контейнеризация с Docker для гибкого и быстрого развёртывания на Linux-серверах.
Итоги и перспективы
Разработанная интеграционная платформа доказала свою эффективность в реальных условиях. Её преимущества включают:
Удобство масштабирования для подключения новых филиалов и сервисов.
Надёжность благодаря кластеризации и управлению ошибками.
Гибкость использования open-source технологий.
Планируется дальнейшее развитие системы, включая добавление новых событий и улучшение аналитики процессов.
Автор: Мавлеткулов Руслан Рамилевич
ГК «Русский САПР», Руководитель группы внедрения СЭД