Можно использовать общую базу данных для нескольких микросервисов. Вы можете найти шаблоны для управления данными микросервисов по этой ссылке: http://microservices.io/patterns/data/database-per-service.html . Кстати, это очень полезный блог об архитектуре микросервисов.
В вашем случае вы предпочитаете использовать базу данных для каждого шаблона службы. Это делает микросервисы более автономными. В этой ситуации вам следует продублировать некоторые из ваших данных на нескольких микросервисах. Вы можете обмениваться данными с помощью вызовов api между микросервисами или с помощью асинхронного обмена сообщениями. Это зависит от вашей инфраструктуры и частоты изменения данных. Если он не меняется часто, вам следует продублировать данные с помощью асинхронных событий.
В вашем примере служба доставки может дублировать места доставки и информацию о продукте. Сервисное обслуживание продуктов управляет продуктами и местоположениями. Затем необходимые данные копируются в базу данных службы доставки с асинхронными сообщениями (например, вы можете использовать rabbit mq или apache kafka). Служба доставки не изменяет данные о продукте и местоположении, но использует эти данные при выполнении своей работы. Если часть данных продукта, используемая службой доставки, часто меняется, дублирование данных с помощью асинхронного обмена сообщениями будет очень дорогостоящим. В этом случае вы должны выполнять вызовы api между продуктом и службой доставки. Служба доставки просит службу доставки проверить, можно ли доставить товар в определенное место. Служба доставки запрашивает у службы Продуктов идентификатор (имя, идентификатор и т. Д.) Продукта и местоположения. Эти идентификаторы могут быть получены от конечного пользователя или совместно использоваться микросервисами. Поскольку базы данных микросервисов здесь разные, мы не можем определять внешние ключи между данными этих микросервисов.
Возможно, вызовы API проще реализовать, но в этом варианте стоимость сети выше. Кроме того, ваши службы менее автономны, когда вы выполняете вызовы api. Потому что в вашем примере, когда служба продукта не работает, служба доставки не может выполнять свою работу. Если вы дублируете данные с помощью асинхронного обмена сообщениями, необходимые данные для доставки находятся в базе данных микросервиса доставки. Когда обслуживание продукта не работает, вы сможете осуществить доставку.