Можна використовувати спільну базу даних для декількох мікросервісів. Ви можете знайти схеми управління даними мікросервісів за цим посиланням: http://microservices.io/patterns/data/database-per-service.html . До речі, це дуже корисний блог для архітектури мікропослуг.
У вашому випадку ви віддаєте перевагу використовувати базу даних за шаблоном служби. Це робить мікросервіси більш автономними. У цій ситуації вам слід продублювати деякі дані між кількома мікросервісами. Ви можете обмінюватися даними через дзвінки api між мікросервісами або ділитися ними за допомогою асинхронних повідомлень. Це залежить від вашої інфраструктури та частоти зміни даних. Якщо це не часто змінюється, слід дублювати дані асинхронними подіями.
У вашому прикладі служба доставки може дублювати місця доставки та інформацію про товар. Служба продуктів керує продуктами та місцями. Потім необхідні дані копіюються в базу даних служби доставки з асинхронними повідомленнями (наприклад, ви можете використовувати rabbit mq або apache kafka). Служба доставки не змінює дані про товар та місцезнаходження, але використовує дані, коли виконує свою роботу. Якщо частина даних про товар, яка використовується службою доставки, часто змінюється, дублювання даних за допомогою асинхронних повідомлень буде дуже дорогим. У цьому випадку вам слід здійснювати API-дзвінки між Продуктом та Службою доставки. Служба доставки просить Службу продуктів перевірити, чи можна доставити товар у певне місце чи ні. Служба доставки запитує послугу «Продукти» з ідентифікатором (ім’я, ідентифікатор тощо) товару та місцезнаходження. Ці ідентифікатори можна взяти у кінцевого користувача або спільно використовувати їх між мікросервісами. Оскільки бази даних мікросервісів тут різні, ми не можемо визначити зовнішні ключі між даними цих мікросервісів.
Api-дзвінки, можливо, простіший у реалізації, але мережна вартість у цьому варіанті вища. Крім того, ваші послуги менш автономні, коли ви здійснюєте дзвінки через API. Тому що, у вашому прикладі, коли служба продуктів не працює, служба доставки не може виконувати свою роботу. Якщо ви дублюєте дані за допомогою асинхронних повідомлень, необхідні дані для доставки знаходяться в базі даних мікросервісу Delivery. Коли служба продуктів не працює, ви зможете здійснити доставку.