Мы пытаемся перейти от монолитной архитектуры к архитектуре микросервиса.Мы подумали, как лучше разделить наши услуги, и начали делать это один за другим.Теперь у нас есть вопрос о том, как мы должны делать зависимые звонки.Позвольте мне объяснить подробнее.
Допустим, у нас разные микросервисы.Один из них имеет подробную информацию о продукте.Другие микросервисы вращаются вокруг продукта, поэтому они будут обслуживать транзакции, заказы, предложения и т. Д. Все микросервисы взаимодействуют с помощью gRPC.
Все эти сервисы будут ссылаться на микросервис элементов, в котором есть сведения об элементах (ссылкибудет сделано через идентификаторы).Таким образом, каждая из других служб будет иметь только идентификатор элемента.
Теперь проблема (или, возможно, нет) в том, что когда мы хотим увидеть список транзакций, выполненных пользователем, нам также нужны подробности об элементах.Точно так же список заказов мест, опять же нам нужны детали предметов.(не все детали, а некоторые из них).
Есть два варианта решения этой проблемы.
Один из них состоит в том, чтобы сделать два последующих вызова, один раз в микросервис транзакции или заказа, а затем в микросервис изделия, чтобы получить необходимые детали.Здесь у нас есть собственный шлюз, который чрезвычайно эффективен с точки зрения производительности и сети.
Другой способ - скопировать частичные данные, используя pub / sub, что требуется микросервисом транзакции и заказа в самой службе.Так что в основном это что-то вроде новой таблицы в микросервисе заказа и принятия соединения в сервисе для обслуживания данных.таким образом убивая необходимость делать зависимые звонки.
Итак, во-первых, является ли собственно разделение услуг?
секунда, какой из двух методов является лучшим вариантом
Примечание: у нас есть около 10 сервисов, которые будут зависеть от базы данных товаров.Также на странице обычно есть звонки на 5-6 микросервисов.Хорошо, что у нас есть собственный шлюз, который выполняет все вызовы параллельно.Таким образом, если мы используем первый метод, будет не более 2 последовательных вызовов.