Вернуться к профилю

2024

Микросервисы медицинской платформы

Карточки пациентов, общие настройки и геосервис вызовов и движения скорой помощи. Realtime-обновления карты через WebSocket/Centrifugo, межсервисный обмен через Kafka.

Backend-разработчик

Задача

Развитие новых функций требовало выделить сервисные границы и организовать обмен данными с существующей системой.

Личный вклад

  • Реализовал геосервис: геометки и распределение вызовов на карте, движение скорой помощи; realtime-обновления через WebSocket и Centrifugo.
  • Реализовал сервис централизованных настроек для остальных сервисов.
  • Реализовал сервис клиентских данных — карточек пациентов.
  • Создал модуль Kafka для внутреннего PHP-фреймворка: отправку, получение сообщений и работу с топиками.
  • Работал с PostgreSQL и интеграцией новых сервисов с существующей системой.

Результаты

  • Реализованы сервисы пациентов, настроек и геоданных, а также общий модуль интеграции с Kafka.
Компоненты и связи

Исходная система

  • PHP-монолитСуществующая функциональность, мигрируемая постепенно.

Обмен событиями

  • Общий модуль · KafkaОбщий модуль внутреннего PHP-фреймворка: отправка, получение сообщений и работа с топиками.
  • Брокер KafkaАсинхронный обмен между приложением и выделенными сервисами.

Доменные сервисы

  • Геосервис · Вызовы · Движение скоройГеометки вызовов, распределение вызовов на карте и перемещение скорой помощи.
  • Общие · настройкиЦентрализованные настройки для остальных сервисов.
  • Карточки · пациентовКлиентские данные и карточки пациентов.

Данные

  • PostgreSQL · Данные сервисовРеляционное хранение данных сервисов.

Карта в реальном времени

  • Centrifugo · WebSocketДоставка обновлений геосервиса в реальном времени.
  • Карта вызовов · Движение скоройОтображение геометок вызовов и движения скорой помощи.
  1. PHP-монолит↔Общий модуль · Kafkaсобытия
  2. Общий модуль · Kafka↔Брокер Kafkaотправка и получение
  3. Брокер Kafka↔Геосервис · Вызовы · Движение скоройобмен событиями
  4. Геосервис · Вызовы · Движение скорой↔PostgreSQL · Данные сервисовхранение
  5. Брокер Kafka↔Общие · настройкиобмен событиями
  6. Общие · настройки↔PostgreSQL · Данные сервисовхранение
  7. Брокер Kafka↔Карточки · пациентовобмен событиями
  8. Карточки · пациентов↔PostgreSQL · Данные сервисовхранение
  9. Общие · настройки→Геосервис · Вызовы · Движение скоройобщие настройки
  10. Общие · настройки→Карточки · пациентовобщие настройки
  11. Геосервис · Вызовы · Движение скорой→Centrifugo · WebSocketгеообновления
  12. Centrifugo · WebSocket→Карта вызовов · Движение скоройWebSocket

Инженерный итог

Контекст

Программная платформа экстренной медицинской помощи.

  • Сосуществование монолита и новых сервисов.
  • Чувствительные данные и согласованность межсервисных контрактов.

Подход

Постепенно выделял функциональные области в сервисы и подключал их к общему обмену сообщениями.

  • Выделение сервисов по предметным границам.
  • Общий модуль Kafka для согласованного обмена сообщениями.

Выводы

  • Разделение системы начинается с границ ответственности и контрактов данных.

Продукты, системы и идеи, доведённые до работающего кода.