Как лучше разбить приложение на микросервисы

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

  1. Регистрация пациентов (с возможность указать полисы пациента, его документы, адреса проживания и прописки)
  2. Создание направлений пациента
  3. Регистрация пациентам услуг при котором будет создаваться посещение пациента в котором будут содержаться услуги.
  4. Справочные таблицы, которые хранят в себе тип направления (ОМС, ДМС и т.д.), какие типы услуг.

Исходя из вышеописанного функционала как бы вы разделили это приложение на микросервисы? Хочется понять у более опытных насколько мелко необходимо разбивать?


Ответы (1 шт):

Автор решения: Alexander Kozlov

Наталья, здравствуйте! Я когда-то делал очень похожий проект. Но в моем случае у нас был стартап, требования менялись на лету, да и вообще на этапе старта полной картины ни у команды разработки, ни у заказчика не было. Вообщем так получилось, что я переусердствовал и разбил проект на много лишних микросервисов — в моем случае это были такие отдельные микросервисы как DoctorService, PatientService, HospitalService, PaymentService, CalendarService, CallService и так далее. И только уже ближе к развитию проекта оказалось, что doctor, patient, hospital — это все вообще можно было сделать в одном, потому что у них по-сути, как потом оказалось, не так уж и много функционала будет. Хотя, например, для patient, doctor и hospital были отдельные фронтенды.

В принципе, ничего страшного не произошло, и проект, конечно же, работал, однако на этапе разработки чувствовался лишний оверхед, так как каждый из этих сервисов нужно было отдельно настроить, базы, конфиги и прочее. Плюс было некоторое пересечение функционала, и необходимость лишнего межсервисного взаимодействия. Плюс каждый лишний микросервис — это оверхед по ресурсам. То есть слишком много микросервисов — это тоже плохо.

Я вообще на этапе проектирования сразу стараюсь разделить проект на части именно по нагрузке, то есть смотрю на какие части проекта нагрузка будет больше, на что поменьше. Части где нагрузка больше — в отдельные микросервисы, так как в таком случае их будет проще масштабировать. Ну и смотрю чтобы не получилось много не нужного межсервисного взаимодействия. Но, например, на собеседованиях меня критиковали за такой подход, говорили это "не соответствует философии микросервисов из какой-то книги". Т.к. мне вообще по барабану на эту философию, то я до конца так и не осознал "как нужно", поэтому советовать вам ничего не могу (ну разве что кроме чтения специализированной литературы — это никогда не помешает).

Вообще последующие мои проекты, где я разбивал по принципу нагрузки — работают и работают неплохо, и лишних микросервисов не чувствуется. Мне кажется тут вообще одного правильного мнения быть не может, наверное лучше вам собрать много различных мнений, найти плюсы минусы каждого и сформировать своё.

→ Ссылка