Разработка комплексного решения на микросервисной архитектуре для ГК «Эксперт»
Разработали микросервис для подписания договоров и ДС встроили в ИТ-ландшафт компании (сайт, личный кабинет). Благодаря чему появилась возможность генерации документов на основе данных МИС (1С) и личный кабинет через API.
Проект позволил компании уйти от бумажного документооборота, ускорил процессы и повысил удобство для пациентов.
В проект включились специалисты DevOps (автоматизация технологических процессов сборки, настройки и развертывания ПО) и бэкенд-разработки.
Клиент
ГК «Эксперт»—федеральная сеть медицинских центров, одна из крупнейших в России частных медицинских компаний, специализирующаяся на диагностике (МРТ/КТ) и лечении, работающая с 2007 года. Включает более 40 диагностических центров, в которых работают тысячи сотрудников.
Задача
Разработка комплексного решения на микросервисной архитектуре.
Система позволяет удаленно оформлять юридически значимые договоры с применением простой электронной подписи (ПЭП) на проведение МРТ-исследований.
Реализованы услуги:
-
разработка и внедрение сервиса электронного документооборота (ЭДО) с ПЭП;
-
проектирование и развертывание отказоустойчивой инфраструктуры на базе Kubernetes (DEV, STAGE, PROD);
-
настройку комплексного мониторинга и логирования работы системы;
-
интеграцию нового сервиса с личным кабинетом пациента и медицинской информационной системой (МИС) клиента.
-
аналитика
-
архитектурная концепция
-
сервис API для обработки запросов от других систем и веб-приложений, сервис API для обработки запросов от административной панели управления, сервис API Gateway, сервис для обработки высоконагруженных задач и очередей.
Бизнес-задачи проекта
Внедрить систему электронного подписания договоров для достижения четырех ключевых целей:
-
полный отказ от бумажных носителей и снижение связанных с ними затрат;
-
сокращение времени оформления документов (с нескольких дней до нескольких минут);
-
устранение необходимости личного присутствия пациента для подписания договора;
-
гарантированное соответствие требованиям 63-ФЗ «Об электронной подписи».
Задачи в контексте всей разработки создать безопасный, масштабируемый и отказоустойчивый сервис, который в автоматическом режиме:
-
получает данные пациента и услуги из ЛК и медицинской информационной системы (МИС) по REST API;
-
формирует индивидуальный договор на основе актуального шаблона;
-
подписывает документ ПЭП и обеспечивает его долгосрочное хранение;
-
предоставляет пациентам и сотрудникам клиники возможность просмотра и скачивания подписанных документов через UI (пользовательский интерфейс) и API.
-
обеспечить бесперебойную работу сервиса для критичных операций компании;
-
гарантировать безопасность и целостность юридически значимых документов на всех этапах;
-
создать изолированные, но идентичные среды (DEV/STAGE/PROD) для предсказуемого тестирования и развертывания;
-
автоматизировать рутину (развертывание, мониторинг, откат), минимизировав человеческий фактор в рабочей среде.
-
спроектировать отказоустойчивую архитектуру с нуля;
-
реализовать полный цикл подписания документов (простая и усиленная подпись);
-
разработать механизм точного позиционирования штампа на PDF-документах с анализом координат текста;
-
реализовать склейку HTML-шаблонов и наложение штампов на итоговые PDF-файлы;
-
настроить долговременное хранение с автоматической архивацией.
Решение
Одним из значимых факторов успеха в таких проектах становится не столько код, сколько надежность, воспроизводимость и контролируемость платформы, на которой он работает. Наш DevOps-инженер выступил на проекте архитектором этой платформы.
Выбрали программное обеспечение Kubernetes (обусловлено необходимостью декларативного управления инфраструктурой).
Это позволит:
-
версионировать и контролировать состояние всей среды как код;
-
обеспечивать мгновенную воспроизводимость сред для аварийного восстановления;
-
внедрить автоматические проверки безопасности и соответствия законодательным требованиям на этапе CI/CD.
Выбранная архитектура сервиса обеспечит высокую гибкость и отказоустойчивость:
-
микросервисы выбраны для независимого масштабирования компонентов и разделяемого управления нагрузкой;
-
планировщик задач Hangfire (с Redis в качестве инструмента хранения) обеспечил надежную обработку фоновых процессов и очередей;
-
двухуровневое хранение данных (горячий и холодный уровень) снизит затраты на облачное хранилище и повысит безопасность данных;
-
Gotenberg (высокопроизводительный легковесный API сервис) выбран за стабильную и производительную конвертацию HTML в PDF с сохранением структуры и визуального представления документа;
-
Библиотеки с открытым исходным кодом для работы с PDF-файлами PdfPig и PdfSharpCore использованы для дополнительных манипуляций с PDF, в частности, точного позиционирования штампа цифровой подписи (путем определения координат последнего символа и отступов в документе).
Результат
Технологическая отказоустойчивость
Кластер PROD-среды обработал несколько отказов сервером без простоя сервиса (нулевой период недоступности для пациентов).
Скорость и безопасность изменений
Благодаря автоматизации, выполнили более 70 безопасных развертываний за время проекта. Количество инцидентов из-за «разрыва сред» сведено к нулю.
Контроль и наблюдаемость
Реализован единый «пульт управления» (Grafana dashboards) для инфраструктуры и приложений, что позволило команде оперативно выявлять и устранять узкие места в производительности.
Бизнес-эффект
Снижение операционных рисков
-
автоматизация аварийного восстановления и внедрения продвинутого мониторинга;
-
минимизация финансовых и репутационных рисков при сбоях критического сервиса.
Экономия на масштабировании
Инфраструктура, описанная кодом, позволяет масштабировать сервис в новые регионы не за месяцы, а за дни, что снижает стоимость будущего роста.
Фундамент для инноваций
Стабильная и предсказуемая платформа позволит бизнесу и разработке фокусироваться на улучшении продукта для пациентов, а не на «тушении пожаров» в инфраструктуре.
Трудности
Трудности, для которых бэкенд-команда нашла оптимальные решения, связаны с точным позиционированием штампа на PDF. Обычно это самая нетривиальная задача.
PDF не хранит информацию о логической структуре текста — только координаты каждого символа. Нужно было разработать алгоритм, который находит последний символ в документе и гарантированно размещает штамп после него.
При этом необходимо учитывать разные шрифты, кодировки и возможность переноса на новую страницу. Малейшая ошибка в координатах — и штамп мог наехать на текст или выйти за пределы страницы. Благодаря команде задача была решена.
Используемые технологии
-
Kubernetes
-
GitLab CI/CD
-
Ansible.NET,
-
MWS Cloud
-
Grafana
-
S3-совместимое хранилище.
-
Хранение данных: PostgreSQL, MinIO
-
Очереди и фоновые задачи: Hangfire (Redis)
-
Конвертация и обработка PDF: Gotenberg (HTML→PDF), PdfSharpCore, PdfPig
-
Позиционирование и наложение штампов: Собственный алгоритм на PdfPig + PdfSharpCore с анализом координат текста
-
Интеграции: MTS Exolve (sms-уведомления)
-
Инфраструктура: Docker, Kubernetes
-
Документирование: OpenAPI