170 похожих чатов

Подскажите пожалуйста по архитектуре микросервисов. У меня есть 2 сервиса:

user-service и shop-service. в Юзер сервисе есть таблица карзины, в которой есть айд пользователя и массив товаров которые у него в корзине (тупо их айдишники) все описание товаров и так далее лежит в шоп сервисе. Мне необходимо вернуть на клиент юзера со всеми его товарами (не только с айдшиниками, а с полной инфой). Как лучше сделать?

1. Из юзер сервиса дергать шоп сервис, что бы получить все товары и потом собрать json
2. На Gateway сперва сделать запрос к юзер сервису, потом к шоп сервису и так же на гейтвейее собрать json
3. Сделать 2 запроса с клиента

14 ответов

8 просмотров

Зависит от архитектуры 😄 Вообще годный вопрос, все 3 варианта кажутся хорошими и уместными. Это вопрос паттернов. Так понимаю, речь про шину событий, а не rpc

Думаю логичнее будет запрос от юзер-сервиса отправить, раз уж он отвечает за эти данные.

из юзер сервиса дёргать cart сервис, а оттуда шоп

Хотя последний вариант в подходе микросервисов теряет консистентность получаемых данных (наврядли в простом шопе это будет важно), но может быть проблема

Andy Cox
из юзер сервиса дёргать cart сервис, а оттуда шоп

О ты, как я тебя давно выдел, ты почему ушел?

Артем
Думаю логичнее будет запрос от юзер-сервиса отправ...

не создаст ли это сложные зависимости сервисов от друг друга? не лучше ли чтобы сервисы вообще в друг друга ходить не могли?

Tuum Daemonia Ayanami
не создаст ли это сложные зависимости сервисов от ...

Никаких зависимостей. Даём запрос "дай мне селект джойн" и отдаем на клиента. Данные нужны этому сервису, при подготовке данных по корзине. Всё логично

Артем
Никаких зависимостей. Даём запрос "дай мне селект ...

для этого 1. сервис корзины должен знать что сервис юзеров это валидный сервис, а не хакер пытающийся получить доступ к данным. Это требует ввода общей валидации сервисами друг друга 2. Нам нужна апи библитека, которая будет предоставлять доступ к сервису корзины, а если сервисов, которые могут к нему обратиться несколько и они на разных яп? писать под каждый яп либу и при изменении изменять ее везде? 3. А если мы решили обновить формат выходных данных на сервисе корзины? обновить одно поле в бд (его имя), то посыпется вся система, ведь под это поле придется переделывать все сервисы, что могут обратиться к сервису корзины

Tuum Daemonia Ayanami
для этого 1. сервис корзины должен знать что серви...

1. Не думаю что это нужно, ведь это открытые данные. 2. Просто один эндпоинт для получения данных, они в любом случае задействованы на сайте, а таким образом мы просто данные подготовим. Ответственность за данные о продуктах отдельно, а о корзине отдельно (за нее отвечает другой сервис) 3. Ну по факту. Только такая проблема будет всегда. Я вообще думаю, что подход с таким разделением не очень хороший. Gateway будет решением, как и что я предлагаю. Тут скорее вопрос в том, как этим всем потом будут пользоваться и зачем. Т.е. gateway может быть избыточен

Похожие вопросы

Обсуждают сегодня

кто поможет крякнуть чит? (реверс инжиринг) чтобы разблокировать премиум версию
Mёdkinson Medvezhkin
39
Вопрос по организации кода. Пилю свой велосипед логгер Есть у меня множество уровней сообщений. Я набрасываю сообщения в стринглист, а когда они нужны, вызываю их через функц...
Serjone
21
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Мне интересно, скорее людей здесь используют D, Rust, C/C++ для решения реальных прикладных задач за деньги?)
Evil Satanson
18
Has anyone experienced Sign in with Apple (with Firebase Authentication) does not provide name or email of the user even when requested with "email" and "fullName" scopes? He...
Sree (𝓣𝓪𝔂𝓵𝓸𝓻'𝓼 𝓥𝓮𝓻𝓼𝓲𝓸𝓷) 🦉 🦉
12
Куда написать чтобы их Роскомнадзор ебнул как мтс за повышение тарифов?
Stargrapefruit
10
Ну например jcl/jvcl Они базовые общие ifdef'ы в сабмодуль выгрузили. С svn было проще. В принципе, если проекты вообще не зависят друг от друга - то нормально, но тогда заче...
Arioch The
10
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Диски перестали работать почему-то в Нидерландах тогда. 0кб в сек Никто как я понял не сможет посоветовать vds в Нидерландах ?
Stargrapefruit
8
всем вопрос. есть функция, которая иногда в линуксе валится с исключением EConvertError Invalid argument to date encode на строке Result:=LocalToUtcDateTime(FileDateToDateTime...
Handatros
10
Карта сайта