Мені важко уникнути дублювання даних або спільної бази даних навіть для найпростішого дизайну мікросервісів, через що я думаю, що мені чогось не вистачає. Ось основний приклад проблеми, з якою я стикаюся. Якщо припустити, що хтось використовує веб-додаток для управління запасами, їм знадобляться дві послуги; один для інвентарю, що керує товарами та кількістю на складі, і послуга користувачів, яка керує даними користувачів. Якщо ми хочемо перевірити, хто зберігав базу даних, ми могли б додати ідентифікатор користувачів до бази даних для служби інвентаризації як останній запас за вартістю.
Використовуючи додаток, ми можемо захотіти побачити всі предмети, які закінчуються, і список тих, хто їх накопичив минулого разу, щоб ми могли попросити їх відновити його ще раз. Використовуючи описану вище архітектуру, до служби інвентаризації буде подано запит на отримання реквізитів усіх предметів, де кількість менше 5. Це поверне список, включаючи ідентифікатори користувачів. Тоді до служби користувачів буде зроблено окремий запит, щоб отримати ім’я користувача та контактні дані для списку ідентифікаторів користувачів, отриманих від служби інвентаризації.
Це здається жахливо неефективним, і це не потребує набагато більше служб, перш ніж ми робимо кілька запитів до різних API API-служб, які, в свою чергу, роблять кілька запитів до бази даних. Альтернативою є копіювання реквізитів користувачів у даних інвентаризації. Коли користувач змінює свої контактні дані, тоді нам потрібно буде повторити зміни через усі інші служби. Але це, схоже, не відповідає обмеженій контекстній ідеї мікросервісів. Ми також могли б використовувати єдину базу даних і ділитися цим між різними службами та мати всі проблеми інтеграційної бази даних .
Який правильний / найкращий спосіб здійснити це?