|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
mayton, В том то и дело, что про очереди разговоров в ТЗ не было. Либо они нужны, либо это оверхед. ПолуОчередей не бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 17:34 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Kachalov - ну для этого есть ACKNOWLEDGE - какой-то вменяемый ответ - ошибка - таймаут (фактически ошибка, но после ее возникновения состояние системы становится непонятным) асинхронное взаимодействие (в т.ч. использование очередей) в первую очередь направлено на борьбу с таймаутами, потому что компенсировать в коде таймауты довольно трудоемко, все остальное в духе "ну мы там можем количество подписчиков регулировать и тем самым куда-то масштабироваться" - это свойство асинхронного взаимодействия, а не jms, amqp и прочих стремных аббревиатур, единственное что здесь еще играет хоть какую-то существенную роль - это возможность персистентных соединений, а заявления в духе: crutchmaster Ну и прочие pub/sub и каналы обмена как делать на хттп? Ну так к чему это все... ACK в очередях предназначен для того, чтобы пометить что сообщение было как-то обработано, отправителю от этого ACK не тепло, ни холодно ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 18:30 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов Kachalov - ну для этого есть ACKNOWLEDGE - какой-то вменяемый ответ - ошибка - таймаут (фактически ошибка, но после ее возникновения состояние системы становится непонятным) - "для этого", т е для получения "вменяемого ответа" что сообщение доставлено, а то и успешно обработано (CLIENT_ACKNOWLEDGE); - в мессаджинге тоже возможно синхронное взаимодействие (и таймаут); - не стоит противопоставлять мессаджинг и HTTP, так как возможен мессаджинг и через HTTP, наверное лучше использовать термин REST ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 19:35 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Кейс. У меня есть юзер он делает рест запрос к сервису. Сервису надо юзера авторизовать а именно с его кремами сходить на другой сервис и спросить его права потом согласно прав построить ответ и внутри зттп отдать. Как будем очередь прикручивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 19:42 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT Кейс. У меня есть юзер он делает рест запрос к сервису. Сервису надо юзера авторизовать а именно с его кремами сходить на другой сервис и спросить его права потом согласно прав построить ответ и внутри зттп отдать. Как будем очередь прикручивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 19:48 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Kachalov - "для этого", т е для получения "вменяемого ответа" что сообщение доставлено, а то и успешно обработано (CLIENT_ACKNOWLEDGE); Kachalov - в мессаджинге тоже возможно синхронное взаимодействие (и таймаут); в мессаджинге тоже возможно синхронное взаимодействие через жопу . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 19:52 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Ключевое выделено. Конечно можно да. И шаблоны есть ла. Но вот какие это шаблоны жирно написано ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:04 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Учитывая релятивизм - мы обречены строить мессенджинговые системы между планетами и галлактиками в следующие сотню-тысячу лет. Синхронизм не будет там работать. Слишком велик лаг. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:27 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов Давайте так: я уверен на 100%, что ACK - это фишка консумера, а не продюсера, если вы так уверены, что при ACK что-то прилетает продюсеру (интересен сам механизм доставки сообщений продюсеру, если он ничего не слушает ), то можете привести в подтверждение правоты либо ссылку на документацию, либо на реализацию. - да, я не правильно понял проблему, подумал что речь идет о таймауте при обработке запроса получателем и о том что брокер не знает статус сообщения, т е не гарантируется доставка и обработка запроса слушателем. Но и при необходимости доставки уведомления от консумера продюсеру существует решение - это паттерн Request-Reply , который реализуют через временную очередь, которая создается продюсером и ReplyTo ( пример , а в Spring Integration это еще проще) Андрей Панфилов Kachalov - в мессаджинге тоже возможно синхронное взаимодействие (и таймаут) в мессаджинге тоже возможно синхронное взаимодействие через жопу . - не знаю что там у кого с жопой, но это рабочий механизм, причем реализованный не только в некоторых конкретных брокерах, но и на уровне API в Spring Integration (например в DirectChannel). Вероятно это кому то нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:08 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Kachalov но это рабочий механизм, причем реализованный не только в некоторых конкретных брокерах, но и на уровне API в Spring Integration (например в DirectChannel). Вероятно это кому то нужно. как я уже пояснял другому оратору ( 22197194 ) вы также не неправильно понимаете слово "работает": ваше "вероятно это кому то нужно" возникает когда горе-архитекторы впаривают заказчику без должной проработки откровенную дичь, а потом пытаются мужественно преодолевать трудности: - в Spring Integration (в Apache Camel тоже) оно есть просто потому, что это реализация EIP - в EIP эту модель взаимодействия описали просто потому что она существует в JMS - в JMS она появилась потому что на момент создания спецификации существовали вендорские реализации с поддержкой функциональности:Java™ Message ServiceJMS provides the JMSReplyTo message header field for specifying the Destination where a reply to a message should be sent. The JMSCorrelationID header field of the reply can be used to reference the original request. See Section 3.4, “Message Header Fields” for more information. In addition, JMS provides a facility for creating temporary queues and topics that can be used as a unique destination for replies. There are many styles of request/reply supported by enterprise messaging products. From simple ‘one message request yields a one message reply’ to ‘one message request yields streams of messages from multiple respondents’. Rather than architect a specific JMS request/reply abstraction, JMS provides the basic facilities on which many can be built. For convenience, JMS defines request/reply helper classes (classes written using JMS) for both the PTP and Pub/Sub domains that implement a basic form of request/reply. JMS providers and clients may provide more specialized implementations. - а в вендорских реализациях оно было потому что иначе без этого невозможно было впарить клиенту только какое отношение request/reply имеет к микросервисам? Адепты микросервисов топят за некий призрачный loose coupling, и при этом втихую реализуют RPC через жопу и умалчивают что это не что иное как temporal coupling, нарушая свои же собственные парадигмы. Зачем все это? У меня короткие идемпотентные запросы, результат которых нужен сейчас, а не когда кто-то там решит его обработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 22:47 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов оно есть просто потому - не слишком ли "просто" выходит? Вероятно не самые глупые люди проектировали API и брокеры сообщений Андрей Панфилов какое отношение request/reply имеет к микросервисам? Адепты микросервисов топят за некий призрачный loose coupling - request/reply не отменяет loose coupling, во всяком случае я не вижу тут нарушения этой парадигмы Андрей Панфилов Зачем все это? У меня короткие идемпотентные запросы, результат которых нужен сейчас, а не когда кто-то там решит его обработать. - конкретно Вам возможно и незачем (со своей архитектурой Вы сами разбирайтесь, Вам видней - я отвечал на замечания относительно мессаджинга которые мне показались не справедливыми). Однако можно всегда задать вопрос: что будет с системой если она по каким то причинам начнет медленно обрабатывать запросы (сетевые проблемы, дисковые проблемы, проблемы при работе БД и т д)? Если запросы прибиваются по таймауту, то сколько висящих запросов может накопиться за это время? И не упремся ли мы в какие то лимиты сервера приложений (например по количеству потоков). В этом смысле асинхронный мессаджинг (для которого длительное хранение сообщений в очереди это скорее нештатная, хотя и ожидаемая, операция) позволяет сохранить работоспособность системы не завалив ее внутренними запросами ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 23:12 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Kachalov - request/reply не отменяет loose coupling, во всяком случае я не вижу тут нарушения этой парадигмы Messaging shouldn’t be used for queries Messaging anti-patterns in event-driven architecture When is an event not an event? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 23:26 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Kachalov Однако можно всегда задать вопрос: что будет с системой если она по каким то причинам начнет медленно обрабатывать запросы (сетевые проблемы, дисковые проблемы, проблемы при работе БД и т д)? Если запросы прибиваются по таймауту, то сколько висящих запросов может накопиться за это время? Этот вопрос мне кажется риторическим. Вы его можете адресовать совершенно к любой архитектуре даже самой дорогой и покрытой требованиями по NFR. Это нештатная ситуация и не бизнес-кейс. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 23:34 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Kachalov - не слишком ли "просто" выходит? Вероятно не самые глупые люди проектировали API и брокеры сообщений ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 23:51 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов Ну вы определитесь кто на ком стоял: request/reply - это фишка JMS, которая прямо в спецификации описана, если мы принимаем за истину, что JMS проектировали умные люди, то посмотрев на кафку, мы заметим, что там "в коробке" этого нет , исходя из этого можно предположить что кафку писали бомжи... или таки просто не стоит предлагать использовать неподходящий паттерн там где это не нужно? - message-oriented middleware и соответствующие шаблоны (в частности Request-Reply) появились до JMS - про бомжей - приписывать собеседнику слова которых он не говорил и на основе их строить какие то обвинения ... (почему то вспомнилось что в этом топике Вы неоднократно упомянули "жопу" и "очко" - понятно, психологическое явление, так называемая "анальная фиксация", я не кисейная барышня, но как то противно) - если в Кафке чего то нет, то не понятно почему это аргумент. В то время как если где то приложили усилия и реализовали ReplyTo значит стоит подумать зачем - я не предлагаю Вам ничего (о чем сказал в предыдущем посте), паттерн есть и хоть Вы десять раз повторите слово "жопа" он никуда не денется Андрей Панфилов Kachalov - request/reply не отменяет loose coupling, во всяком случае я не вижу тут нарушения этой парадигмы Messaging shouldn’t be used for queries Messaging anti-patterns in event-driven architecture When is an event not an event? - ну сначала расскажите "что ли", что за Бен Моррис такой с горы? Какой то архитектор, по первому образованию "The University of Manchester - Politics and modern history". Может не поленитесь и в двух словах, без этого Бена, изложите почему Request-Reply нарушает low coupling? Или кратко тут никак? В целом не вижу повода для дискуссии, тем более в стиле "как в пивной". Ну есть паттерн Request-Reply. Можно использовать, можно нет, смотря что за задача. У Вас вообще REST и мессаджинг не используется. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 00:38 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
mayton Kachalov Однако можно всегда задать вопрос: что будет с системой если она по каким то причинам начнет медленно обрабатывать запросы (сетевые проблемы, дисковые проблемы, проблемы при работе БД и т д)? Если запросы прибиваются по таймауту, то сколько висящих запросов может накопиться за это время? Этот вопрос мне кажется риторическим. Вы его можете адресовать совершенно к любой архитектуре даже самой дорогой и покрытой требованиями по NFR. Это нештатная ситуация и не бизнес-кейс. - ну почему же, можно заложить отказоустойчивость в архитектуру, а можно этого не делать. Все имеет свою цену. Возиться с месаджингом сложнее чем строить коммуникацию через REST. Но если простой связан с материальным ущербом, то можно и повозиться. Асинхронный месаджинг точно может помочь купировать проблемы с неожиданным всплеском нагрузки или ухудшением качества сети и сохранить работоспособность системы ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 00:47 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp как можно синхронно просрать запрос? Клиент отправил запрос. В это время сервер делает рестарт. Клиенту вернулась дуля. Имеем ввиду, что клиенты-серверы - это всё микросервисы, а не чей-то браузер. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:02 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов принимающая сторона сообщение прочесть не смогла, на вашей стороне вместо сообщения об ошибке возникает таймаут Если хттп сервер что-то там не шмог и завис, таймаута не возникает, я так понимаю? Андрей Панфилов на вашей стороне вместо сообщения об ошибке Что-то там возникает, я тоже понимаю, от святого духа, а не от того, что connection refused? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:28 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
mayton Учитывая релятивизм - мы обречены строить мессенджинговые системы между планетами и галлактиками в следующие сотню-тысячу лет. Синхронизм не будет там работать. Слишком велик лаг. А модель в ВУЗАХ это упрощенная модель реального мира. Ключевое слово - упрощенная. Вы в курсе как управляли луноходом наши водители сидя на земле? Что было с лагом?))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:47 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов асинхронное взаимодействие (в т.ч. использование очередей) в первую очередь направлено на борьбу с таймаутами Не только и не обязательно. Суть в том, что у тебя есть одно поднятое соединение, ты через него работаешь, а не открываешь/закрываешь его на каждый этот свой вызов рпц. Имея брокер можно хоть херачить броадкастом и для этого не нужно знать адреса/порты всех твоих новых/старых миркосервисов, не нужно делать балансировку руками и много что еще. А взамен всего-то надо организовать рпц - т.е. после отправки слушать указанную тобой же очередь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:47 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT тем что нгиникс по-сути тот же брокер, только синхронный. разница в том что если тебе надо формат взаимодействия запрос-ответ_на_запрос, то твоя кафка будет как пятая нога собаке. У меня запрос - ответ и раббит не как пятая нога. Вообще не вижу никаких проблем и недоумеваю, в чем вы там видите существенную разницу. хттп поднимает соединение, отправляет данные, ждёт ответа, закрывает соединение. С раббитом делается всё абсолютно тоже самое, только соединение не закрывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:47 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
crutchmaster, Таймаут это счетчик времени на клиенте. А не на сервере который завис LOL))) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:48 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
crutchmaster, > С раббитом делается всё абсолютно тоже самое = есть слово оверхед в архитектуре. Лишний глюкавый код. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:50 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
crutchmaster, Асинхронный код всегда сложнее синхронного. Просто по определению. Как автомат коробка сложнее механической. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:52 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
mayton надо предусмотреть больше кейсов чем при синхронном вызове удалённого сервиса РПЦ? Сделать, чтобы рпц вызов на нашем любимом яп ждан listener и выглядел так, как будто он синхронный? Что еще? хттп ошибки? Так тут асихрнонных/синхронный вызов вообще не причём. Таймауты на дохлый сервис, чтобы работало как connection refused? Так этого наоборот надо избегать. Что еще? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 05:53 |
|
|
start [/forum/topic.php?fid=59&msg=39999116&tid=2120626]: |
0ms |
get settings: |
25ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
476ms |
get tp. blocked users: |
2ms |
others: | 302ms |
total: | 883ms |
0 / 0 |