Разрешение проектной зависимости между микросервисами - PullRequest
0 голосов
/ 08 ноября 2018

Я разрабатываю приложение электронной коммерции с микросервисным подходом, используя ORM (JPA) для сохранения данных для одного из микросервисов с именем OrderService. OrderService обладает функциональностью, связанной с сохранением и составлением отчетов о заказах, которые по существу включают информацию о клиентах и ​​продуктах. Функциональность клиента и продукта управляется различными микросервисами. Мой вопрос на уровне ORM OrderService нужен POJO, который принадлежит ProductService и CustomerService. Каков наилучший способ справиться с этой зависимостью между службами? Должно ли приложение проектироваться по-другому?

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Есть несколько вещей, которые следует учитывать при поиске решения 1. Вы не можете получить доступ к базе данных других служб, вам нужно позвонить. 2. Вы должны стараться не хранить данные из других служб в своей. Дублирование данных приводит к несовместимому состоянию и его следует избегать, если вы можете 3. У вас должны быть средства для запроса данных из других служб по запросу.

Теперь с этими точками я в основном ограничу данные из других служб некоторыми ссылочными идентификаторами (которые должны быть неизменяемыми). На уровне ORM я просто извлекаю ссылочные идентификаторы и раздуваю их, делая вызов API для соответствующих служб (бизнес-уровень).

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

0 голосов
/ 21 мая 2019

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

0 голосов
/ 09 ноября 2018

Это довольно распространенная ситуация при разработке микросервисов.Большинству микросервисов потребуется доступ к данным, доступным через другие микросервисы или внешнего поставщика.

Лучший способ справиться с этим - создать каждую микросервис как отдельное приложение и рассматривать все другие микросервисы как внешние по отношению к ним..

Итак, разработчик Microservice # 1 (M1) должен проверить спецификацию Microservice # 2 (M2) и написать простые классы POJO для данных, которые он получает оттуда.Точно так же, как он сделал бы, если бы использовал какой-то внешний API, такой как Facebook.
Обратите внимание, что M1 всегда будет общаться с M2 (например, через REST) ​​и никогда не будет напрямую с БД для получения необходимых данных.

В идеале, каждый микросервис должен иметь свою собственную базу данных (или частичный клон центральной базы данных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...