2024
Микросервисы медицинской платформы
Карточки пациентов, общие настройки и геосервис вызовов и движения скорой помощи. Realtime-обновления карты через WebSocket/Centrifugo, межсервисный обмен через Kafka.
Backend-разработчик
Задача
Развитие новых функций требовало выделить сервисные границы и организовать обмен данными с существующей системой.
Личный вклад
- Реализовал геосервис: геометки и распределение вызовов на карте, движение скорой помощи; realtime-обновления через WebSocket и Centrifugo.
- Реализовал сервис централизованных настроек для остальных сервисов.
- Реализовал сервис клиентских данных — карточек пациентов.
- Создал модуль Kafka для внутреннего PHP-фреймворка: отправку, получение сообщений и работу с топиками.
- Работал с PostgreSQL и интеграцией новых сервисов с существующей системой.
Результаты
- Реализованы сервисы пациентов, настроек и геоданных, а также общий модуль интеграции с Kafka.
Компоненты и связи
Исходная система
- PHP-монолитСуществующая функциональность, мигрируемая постепенно.
Обмен событиями
- Общий модуль · KafkaОбщий модуль внутреннего PHP-фреймворка: отправка, получение сообщений и работа с топиками.
- Брокер KafkaАсинхронный обмен между приложением и выделенными сервисами.
Доменные сервисы
- Геосервис · Вызовы · Движение скоройГеометки вызовов, распределение вызовов на карте и перемещение скорой помощи.
- Общие · настройкиЦентрализованные настройки для остальных сервисов.
- Карточки · пациентовКлиентские данные и карточки пациентов.
Данные
- PostgreSQL · Данные сервисовРеляционное хранение данных сервисов.
Карта в реальном времени
- Centrifugo · WebSocketДоставка обновлений геосервиса в реальном времени.
- Карта вызовов · Движение скоройОтображение геометок вызовов и движения скорой помощи.
- PHP-монолит↔Общий модуль · Kafkaсобытия
- Общий модуль · Kafka↔Брокер Kafkaотправка и получение
- Брокер Kafka↔Геосервис · Вызовы · Движение скоройобмен событиями
- Геосервис · Вызовы · Движение скорой↔PostgreSQL · Данные сервисовхранение
- Брокер Kafka↔Общие · настройкиобмен событиями
- Общие · настройки↔PostgreSQL · Данные сервисовхранение
- Брокер Kafka↔Карточки · пациентовобмен событиями
- Карточки · пациентов↔PostgreSQL · Данные сервисовхранение
- Общие · настройки→Геосервис · Вызовы · Движение скоройобщие настройки
- Общие · настройки→Карточки · пациентовобщие настройки
- Геосервис · Вызовы · Движение скорой→Centrifugo · WebSocketгеообновления
- Centrifugo · WebSocket→Карта вызовов · Движение скоройWebSocket
Инженерный итог
Контекст
Программная платформа экстренной медицинской помощи.
- Сосуществование монолита и новых сервисов.
- Чувствительные данные и согласованность межсервисных контрактов.
Подход
Постепенно выделял функциональные области в сервисы и подключал их к общему обмену сообщениями.
- Выделение сервисов по предметным границам.
- Общий модуль Kafka для согласованного обмена сообщениями.
Выводы
- Разделение системы начинается с границ ответственности и контрактов данных.
Стек
- PHP
- Kafka
- PostgreSQL
- Microservices
- Docker
- WebSocket
- Centrifugo