Мне трудно избежать дублирования данных или общей базы данных даже для самого простого дизайна микросервисов, что заставляет меня думать, что я что-то упускаю. Вот основной пример проблемы, с которой я сталкиваюсь. Предполагая, что кто-то использует веб-приложение для управления запасами, ему понадобятся две службы; один для инвентаря, управляющего товарами и количеством на складе, и сервис для пользователей, который будет управлять данными пользователей. Если мы хотим провести аудит того, кто заполнил базу данных, мы могли бы добавить идентификатор пользователя в базу данных для службы инвентаризации в качестве последнего запаса по стоимости.
Используя приложение, мы можем захотеть увидеть все товары, которые заканчиваются, и список тех, кто их накопил в прошлый раз, чтобы мы могли попросить их пополнить его снова. Используя описанную выше архитектуру, в службу инвентаризации будет сделан запрос на получение сведений об элементах всех элементов, количество которых меньше 5. Это вернет список, включающий идентификаторы пользователей. Затем в службу пользователей будет сделан отдельный запрос на получение имени пользователя и контактных данных для списка идентификаторов пользователей, полученных из службы инвентаризации.
Это кажется ужасно неэффективным, и не требуется много дополнительных сервисов, прежде чем мы сделаем несколько запросов к API различных сервисов, которые, в свою очередь, делают несколько запросов к базе данных. Альтернативой является репликация сведений о пользователях в данных инвентаризации. Когда пользователь меняет свои контактные данные, нам нужно будет повторить изменение через все другие сервисы. Но это, похоже, не соответствует идее ограниченного контекста микросервисов. Мы также могли бы использовать одну базу данных и распределить ее между различными службами, и у нас были бы все проблемы с интеграционной базой данных .
Какой правильный / лучший способ реализовать это?