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