Можно ли запросить ORM микросервиса через его API? - PullRequest
0 голосов
/ 30 октября 2019

Можно ли запросить ORM микросервиса через его API и использовать его в качестве ORM другого микросервиса?

Например, скажем, у меня есть микросервис A с его API (назовем его API_A), его БД (DB_A) и его внутренние экземпляры Object-Relation Mapper (ORM_A), определяющие соответствия между классами, принадлежащими микросервису, в структуру реляционной БД и управляющие ее доступом.

Теперь представьте, что я хочуиметь микросервис B с различными функциональными возможностями относительно A, хотя и с той же ORM, что и A (и, следовательно, DB с одинаковой структурой DB_A, хотя необязательно с одинаковыми данными, поскольку различные функциональные возможности могут давать разные данные).

Как я умно запрашиваю / копирую / отражаю ORM_A в микросервисе B, чтобы у меня не было дублирования кода, и при изменении A также соответствующим образом изменяется ORM_B без ручного вмешательства?

Есть ли возможность запросить ORM_A в B через его API и воссоздать его вмикросервис B?

1 Ответ

2 голосов
/ 30 октября 2019

Идея о том, что изменения кода внутри API_A могут привести к изменениям кода внутри API_B, создает связь между службами и их данными, что позволяет предположить, что они не должны быть двумя разными службами.

Если API_B действительно работает дикофункциям, отличным от API_A, и требуется только несколько фрагментов данных из структур, представленных API_A, вы должны рассмотреть несколько различных вариантов, чтобы гарантировать, что соответствующие данные доступны для API_B из API_A:

  1. Поверхность данных изAPI_A в конечной точке, доступной для API_B. Это создает контракт API, который легче применять и тестировать. Это решение относительно просто реализовать, но оно создает некоторые отношения зависимости между двумя API.
  2. Установите тему события, которую вы можете уведомлять всякий раз, когда API_A записывает данные, которые API_B (или другие службы) могут захотеть использовать. Считывая эти события, API_B может записывать соответствующие данные в свою собственную БД в своем собственном формате, чтобы избежать связи с A либо структурами данных, либо контрактами. Это решение требует создания очередей событий, но было бы лучшим решением для производительности API_B.

Одна вещь, с которой я сталкивался, когда люди сталкивались при внедрении микросервисов (я сам с этим боролся)была идея, что дублирование данных в порядке . Старайтесь не зацикливаться на представлении данных как реляционных в нескольких сервисах, потому что именно так вы естественным образом создадите такой тип связи, которого вы бы хотели избежать в микросервисах. Удачи!

...