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

Насколько вообще разумное решение запрещать сервисам любую синхронную комуникацию друг

с другом? У нас есть пачка сервисов, и когда сервису А требуются какие-то данные из сервиса B, то API gateway в рамках одного запроса либо забирает их из B и передаёт в A, либо сама бизнес логика переносится в гейтвей и он на основе данных из обоих сервисов решает что делать. Мне кажется это очень не удобно, но мне говорят, что это стандартная практика и сервисы вообще друг с другом по http не общаются.

12 ответов

12 просмотров

Обычно ит депендс. Много синхрона действительно скорее плохо, т.к ведёт к потере автономности сервисов, может плохо влиять на отказоустойчивость и тд С другой стороны, иногда можно С третьей стороны, держать логику в гетвее это прям интересно. Если какой-то процесс вообще никак не выполнить без данных из другого сервиса, то нужно смотреть на процесс, данные, которые ему нужны и тд Возможно, проще просто асинхронно реплицировать данные из сервиса А в сервис Б и использовать именно эти локальные данные

через API сервиса пусть общаются друг с другом, зачем запрещать то? напрямую нельзя например в базу другого сервиса лазить, а через внешний API можно

Андрей Рудин
через API сервиса пусть общаются друг с другом, за...

Обычно это приводит к потере автономности, усложнению кодовой базы, влечёт за собой дальнейшее ошибочное доменное разделение и в итоге скатывается всё к распределенному монолиту с коллчейнами в 5-12 сервисов

Manicotti- Автор вопроса
Arthur Irgashev
Обычно ит депендс. Много синхрона действительно ск...

Ну вообще то, что гейтвей сервису присылает нужные ему данные, как по мне, автономности не особо прибавляет, если сравнивать с синхроном. С другой стороны большинство таких кейсов у нас обычно связано с авторизацией, а ей, вроде как, место как раз в гейтвее. Просто очень топорно получается, типичный сценарий: У сущности есть определенный статус, в котором её редактировать могут только пользователи с определенным правом. Выходит на гейтвее мы сначала получаем сущность из сервиса А, смотрим на статус, если для него требуется право, идем в сервис прав Б и проверяем есть ли оно у него, иначе просто даем пользователю отредактировать её. Реплицировать всех пользователей с их правами не вариант. Переносить авторизацию в сервис А тоже как-то неправильно.

Arthur Irgashev
Обычно это приводит к потере автономности, усложне...

А потом кто-то решает добавить асинхрон, и получается вообще тотально неподдерживаемая лапша с кучей рейскондишнов и абсолютно непредсказуемым поведением и непонятными бизнес процессами

Manicotti
Ну вообще то, что гейтвей сервису присылает нужные...

А почему бы права и роли не прокинуть в сам сервис ?

тут много вопросов короч которые влияют: 1. мы когда говорим о асинхронных взаимодействиях, мы говорим о том когда сервису А не важно когда сервис Б сделает операцию? или же просто то же что и с синхронным только не по http а через кафку условную? Что подразумеваем? 2. "авторизация" - не смешиваем ли мы понятие "авторизации" и "бизнес ограничений". Как проверить - если штука в определенном статусе - это влияет на "кто может делать" или "может ли делать вообще"? Вопрос локальности данных и того как эти ограничения с точки зрения temporal coupling и stale data зависят друг от друга. Может быть эти данные должны быть в одном сервисе. А быть может "статус" надо убрать и разделить сущность так что бы за разные этапы жизненного цикла отвечали свои сервисы 3. мы когда сервисы выделяем мы по сущностям это делаем или по bounded context? 4. мы в микросервисы вляпались потому что нужда заставила (автономность команд) или мы в игрушки поиграть решили (все и так поддерживает команда или две)

сервис - это единица, которая обслуживает запросы, отдельная. сервисы могут пользоваться услугами других сервисов, какие тут проблемы?

Андрей Рудин
сервис - это единица, которая обслуживает запросы,...

в целом "сервис" это некая штука которая обслуживает некие buisness capability и обычно строится вокруг bounded context, обслуживает некий под-процесс во флоу пользователя или некую бизнес логику. проверить качество границ можно расписав все зависимости всех сервисов друг от друга. Если на это предложение команда разработчиков скажет "ты че, там же пизда как сложно" значит границы кривые

Manicotti- Автор вопроса
Sergey P
тут много вопросов короч которые влияют: 1. мы к...

1. Тут речь именно о синхронщине, потому-что нам не нужно никаких операций в Б проводить, нам нужно что-то сделать в А, основываясь на данных из Б, т.е получить их нужно вот прям щас. 3. Про bounded context тут вряд ли слышали, разделяем по сущностям в основном 4. Вообще чисто ради масштабируемости как я понял

1. распределенный стэйт это smell 3. вы сами себе роете могилу 4. почитайте ньюмана, вы сейчас скорее всего копаете могилу продукту

Manicotti- Автор вопроса

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
Подскажите, а есть vault lite или ченить такое?) А то нужен вольт для похода в вольт, но весит он ~500 мб) как-то многовато для парочки запросов ))
Alexandr Orloff
17
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Карта сайта