powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
265 сообщений из 265, показаны все 11 страниц
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998198
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть некий набор микросервисов с набором спецификаций на OpenAPI, который теоретически вроде как призван разрулить бардак, однако на практике у меня возникают некого рода "трудности", а именно:
- существует кодогенератор ( https://github.com/swagger-api/swagger-codegen ) который умеет генерировать интерфейсы и DTO, он мне не особо нравится, поскольку хочет чтобы я использовал OffsetDateTime, а у меня несколько иные предпочтения как работать со временем, ну да ладно, вроде как получить то что я ожидаю можно, хоть и через жопу
- в OpenAPI можно задекларировать, что на разные статусы можно возвращать разный тип результата, и с этим как-то вообще непонятно что делать, т.е. генератор в интерфейсе лепит ResponseEntity<DTOType>, а OpenAPI-спецификация разрешает в военное возвращать что-то еще (там по большей части другой результат возвращается на 4xx и 5xx и можно извернуться через выкидывание исключения, но как-то вообще криво)
- есть эндпойнты с кучей необязательных параметров (например поиск чего-то по набору полей), вот если использовать в качестве клиента jaxrs или feign, то нужно либо все эти параметры таскать за собой, либо наследовать клиентский интерфейс и в нем через default вычленять параметры, которые нужны

это так у всех или только у меня?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998225
ramzestein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов- в OpenAPI можно задекларировать, что на разные статусы можно возвращать разный тип результата, и с этим как-то вообще непонятно что делать, т.е. генератор в интерфейсе лепит ResponseEntity<DTOType>, а OpenAPI-спецификация разрешает в военное возвращать что-то еще (там по большей части другой результат возвращается на 4xx и 5xx и можно извернуться через выкидывание исключения, но как-то вообще криво)
Видел решение этой проблемы через ручное определение типа объекта. В интерфейсе определяли ResponseEntity<String>, а при получении ответа анализировали код ошибки HTTP и сами из строки формировали объект. https://stackoverflow.com/questions/35797762/how-to-use-resttemplate-with-multiple-response-types/35798228#35798228
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998320
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что этот feign толковый? Очень на Retrofit похож
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998356
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
А что этот feign толковый? Очень на Retrofit похож
У меня изначальное желание такое, чтобы то что касалось протокола взаимодействия жило в отдельном модуле, а серверная и клиентская части ее бы использовали, например от одного только того, что в разных спецификациях используются одни и те же названия DTO и где-то они разные, а где-то одинаковые, у меня уже некисло бомбит, а если использовать retrofit, то оно уже само по себе подразумевает независимую клиентскую часть, поэтому думал только в сторону jaxrs и spring, вот feign спринговые аннотации умеет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998594
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

Микросервисы через хттп - это странно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998596
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Микросервисы через хттп - это странно.
O_o, на голубиной почте нужно делать?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998601
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
O_o, на голубиной почте нужно делать?

amqp/kafka. Нахрена соединение поднимать на каждое сообщение? Это же дорохо. Ну и прочие pub/sub и каналы обмена как делать на хттп?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998606
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
amqp/kafka. Нахрена соединение поднимать на каждое сообщение?
У меня есть запрос (не команда и не событие), ответ на который я хочу получить здесь и сейчас, а не завтра и там, зачем мне этот запрос (и ответ) складывать в условно персистентное хранилище?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998610
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
У меня есть запрос (не команда и не событие), ответ на который я хочу получить здесь и сейчас

amqp умеет так делать тоже.
Андрей Панфилов
складывать в условно персистентное хранилище?

rabbitmq, например, это - брокер сообщений, а не хранилище.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998632
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
зачем

Ну, например, чтобы не просрать запрос, пока http шляпа делает рестарт.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998660
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
У меня есть запрос (не команда и не событие), ответ на который я хочу получить здесь и сейчас

amqp умеет так делать тоже.
Не умеет, просто потому что у вас понятие "умеет" несколько извращенное: от того что в active mq накидали какого-то стремного кода, который для вызывающей стороны выглядит как синхронный вызов, совершенно не означает что вызов действительно синхронный, т.е. никаких контрактов для отвечающей стороны здесь не появляется.

crutchmaster
Ну, например, чтобы не просрать запрос, пока http шляпа делает рестарт.
Ну просрали и просрали запрос, что с того? я же не очко пользователя ставлю. А ответ на запрос, который "не просрали", спустя минуту мне уже не нужен.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998663
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
O_o, на голубиной почте нужно делать?

amqp/kafka. Нахрена соединение поднимать на каждое сообщение? Это же дорохо. Ну и прочие pub/sub и каналы обмена как делать на хттп?

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

зы. во как я заговорил :)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998670
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понимаю каким образом мы в топик втащили Кафку? Какой был информационный повод для этого?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998677
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я не понимаю каким образом мы в топик втащили Кафку? Какой был информационный повод для этого?
Ну все просто же: в микросервисах со стороны HTTP офигеть какой бардак (ну, например, я так более-менее приемлемого ответа на свой вопрос не получил, а то что у меня спецификации кривые я и сам знаю, однако в SOAP такого не было - там xs:any довольно редкий зверь и все знают что от него попахивает), поэтому нужно использовать для взаимодействия протоколы, которые для этого не предназначены
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998690
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
там очереди или какие нибудь ящики, если синхронка то - юзай синхронку

Чем принципиально брокер сообщений хуже этой вашей синхронки с хттп, когда каждый сам себе брокер? Нужен будет балансировщик, также притяните сюда nginx и какая в *опу разница в итоге?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998692
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
совершенно не означает что вызов действительно синхронный, т.е. никаких контрактов для отвечающей стороны здесь не появляется.

А зачем вам вообще какие-то гарантии, если данным отношение типа "Ну просрали и просрали запрос, что с того?"
Андрей Панфилов
А ответ на запрос, который "не просрали", спустя минуту мне уже не нужен.

Так никто не мешает брокеру его дропнуть через n сек в очереди.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998706
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
А зачем вам вообще какие-то гарантии, если данным отношение типа "Ну просрали и просрали запрос, что с того?"
Вы, судя по всему, разницы между запросом и данными не видите, к тому же еще думаете, что кафка данные не просирает
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998708
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
andreykaT
там очереди или какие нибудь ящики, если синхронка то - юзай синхронку

Чем принципиально брокер сообщений хуже этой вашей синхронки с хттп, когда каждый сам себе брокер? Нужен будет балансировщик, также притяните сюда nginx и какая в *опу разница в итоге?

тем что нгиникс по-сути тот же брокер, только синхронный.

разница в том что если тебе надо формат взаимодействия запрос-ответ_на_запрос, то твоя кафка будет как пятая нога собаке.

вообще, есть 4 основных формата интеграции сервисов - очереди, ремот-процедур-кол, бд и файлы (что имхо по-сути бд).
это НЕ только кафка и НЕ только месседжинг.

как вкарячивают очереди и асинхронку там где она не нужна я видел. слава Майтону сам так не делал там где это действительно НЕ НАДО.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998727
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
зачем

Ну, например, чтобы не просрать запрос, пока http шляпа делает рестарт.
как можно синхронно просрать запрос? Дайте пример!
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998740
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
как можно синхронно просрать запрос? Дайте пример!
ну как-как... берете и начинаете использовать active mq с костылями, отправляете туда сообщение, принимающая сторона сообщение прочесть не смогла, на вашей стороне вместо сообщения об ошибке возникает таймаут следующим этапом будет: чтобы получать сообщения об ошибках нам нужна еще DLQ, которую нужно обрабатывать, а мы всего-то хотели запрос по HTTP пульнуть
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998777
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
PetroNotC Sharp
как можно синхронно просрать запрос? Дайте пример!
ну как-как... берете и начинаете использовать active mq с костылями, отправляете туда сообщение, принимающая сторона сообщение прочесть не смогла, на вашей стороне вместо сообщения об ошибке возникает таймаут следующим этапом будет: чтобы получать сообщения об ошибках нам нужна еще DLQ, которую нужно обрабатывать, а мы всего-то хотели запрос по HTTP пульнуть


Ну тут как в анекдоте:

С моей стороны пули вылетают!
Проблема в принимающей стороне!

<:o)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998839
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
совершенно не означает что вызов действительно синхронный, т.е. никаких контрактов для отвечающей стороны здесь не появляется.

А зачем вам вообще какие-то гарантии, если данным отношение типа "Ну просрали и просрали запрос, что с того?"
Андрей Панфилов
А ответ на запрос, который "не просрали", спустя минуту мне уже не нужен.

Так никто не мешает брокеру его дропнуть через n сек в очереди.

просрать могут все, вопрос что ты будешь делать когда узнаешь что просрал. ну например, ничего или ретрай или еще кучи всего. зависит от задачи и требований. это в принципе для любого решения так
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998840
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
crutchmaster
пропущено...

Ну, например, чтобы не просрать запрос, пока http шляпа делает рестарт.
как можно синхронно просрать запрос? Дайте пример!

тоже интересно. может типа "не достучался потому что занят был"?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998852
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
PetroNotC Sharp
как можно синхронно просрать запрос? Дайте пример!
ну как-как... берете и начинаете использовать active mq с костылями, отправляете туда сообщение, принимающая сторона сообщение прочесть не смогла, на вашей стороне вместо сообщения об ошибке возникает таймаут

- ну для этого есть ACKNOWLEDGE
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998855
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топике - все правы. Но архитектурно, когда мы рассматриваем системы на базе очередей нам
надо предусмотреть больше кейсов чем при синхронном вызове удалённого сервиса.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998927
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
В том то и дело, что про очереди разговоров в ТЗ не было.
Либо они нужны, либо это оверхед.
ПолуОчередей не бывает.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998950
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- ну для этого есть ACKNOWLEDGE
Для чего "для этого"? В случае взаимодействия по HTTP существует три возможных исхода:
- какой-то вменяемый ответ
- ошибка
- таймаут (фактически ошибка, но после ее возникновения состояние системы становится непонятным)

асинхронное взаимодействие (в т.ч. использование очередей) в первую очередь направлено на борьбу с таймаутами, потому что компенсировать в коде таймауты довольно трудоемко, все остальное в духе "ну мы там можем количество подписчиков регулировать и тем самым куда-то масштабироваться" - это свойство асинхронного взаимодействия, а не jms, amqp и прочих стремных аббревиатур, единственное что здесь еще играет хоть какую-то существенную роль - это возможность персистентных соединений, а заявления в духе:
crutchmaster
Ну и прочие pub/sub и каналы обмена как делать на хттп?
вообще ни в какие ворота: вот CometD вполне себе работает через HTTP, вообщем не кафкой единой.

Ну так к чему это все... ACK в очередях предназначен для того, чтобы пометить что сообщение было как-то обработано, отправителю от этого ACK не тепло, ни холодно
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998977
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Kachalov
- ну для этого есть ACKNOWLEDGE
Для чего "для этого"? В случае взаимодействия по HTTP существует три возможных исхода:
- какой-то вменяемый ответ
- ошибка
- таймаут (фактически ошибка, но после ее возникновения состояние системы становится непонятным)

- "для этого", т е для получения "вменяемого ответа" что сообщение доставлено, а то и успешно обработано (CLIENT_ACKNOWLEDGE);
- в мессаджинге тоже возможно синхронное взаимодействие (и таймаут);
- не стоит противопоставлять мессаджинг и HTTP, так как возможен мессаджинг и через HTTP, наверное лучше использовать термин REST
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998980
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кейс. У меня есть юзер он делает рест запрос к сервису. Сервису надо юзера авторизовать а именно с его кремами сходить на другой сервис и спросить его права потом согласно прав построить ответ и внутри зттп отдать. Как будем очередь прикручивать?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998985
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
Кейс. У меня есть юзер он делает рест запрос к сервису. Сервису надо юзера авторизовать а именно с его кремами сходить на другой сервис и спросить его права потом согласно прав построить ответ и внутри зттп отдать. Как будем очередь прикручивать?
ну очевидно: весь контекст сериализовывать, а потом рассказывать про low coupling
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998986
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- "для этого", т е для получения "вменяемого ответа" что сообщение доставлено, а то и успешно обработано (CLIENT_ACKNOWLEDGE);
Давайте так: я уверен на 100%, что ACK - это фишка консумера, а не продюсера, если вы так уверены, что при ACK что-то прилетает продюсеру (интересен сам механизм доставки сообщений продюсеру, если он ничего не слушает ), то можете привести в подтверждение правоты либо ссылку на документацию, либо на реализацию.
Kachalov
- в мессаджинге тоже возможно синхронное взаимодействие (и таймаут);
исправляю:

в мессаджинге тоже возможно синхронное взаимодействие через жопу .
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39998993
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ключевое выделено. Конечно можно да. И шаблоны есть ла. Но вот какие это шаблоны жирно написано
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999004
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учитывая релятивизм - мы обречены строить мессенджинговые системы между планетами и галлактиками
в следующие сотню-тысячу лет.

Синхронизм не будет там работать. Слишком велик лаг.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999034
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Давайте так: я уверен на 100%, что ACK - это фишка консумера, а не продюсера, если вы так уверены, что при ACK что-то прилетает продюсеру (интересен сам механизм доставки сообщений продюсеру, если он ничего не слушает ), то можете привести в подтверждение правоты либо ссылку на документацию, либо на реализацию.

- да, я не правильно понял проблему, подумал что речь идет о таймауте при обработке запроса получателем и о том что брокер не знает статус сообщения, т е не гарантируется доставка и обработка запроса слушателем. Но и при необходимости доставки уведомления от консумера продюсеру существует решение - это паттерн Request-Reply , который реализуют через временную очередь, которая создается продюсером и ReplyTo ( пример , а в Spring Integration это еще проще)

Андрей Панфилов
Kachalov
- в мессаджинге тоже возможно синхронное взаимодействие (и таймаут)
исправляю:
в мессаджинге тоже возможно синхронное взаимодействие через жопу .

- не знаю что там у кого с жопой, но это рабочий механизм, причем реализованный не только в некоторых конкретных брокерах, но и на уровне API в Spring Integration (например в DirectChannel). Вероятно это кому то нужно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999078
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, нарушая свои же собственные парадигмы. Зачем все это? У меня короткие идемпотентные запросы, результат которых нужен сейчас, а не когда кто-то там решит его обработать.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999082
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
оно есть просто потому

- не слишком ли "просто" выходит? Вероятно не самые глупые люди проектировали API и брокеры сообщений

Андрей Панфилов
какое отношение request/reply имеет к микросервисам? Адепты микросервисов топят за некий призрачный loose coupling

- request/reply не отменяет loose coupling, во всяком случае я не вижу тут нарушения этой парадигмы

Андрей Панфилов
Зачем все это? У меня короткие идемпотентные запросы, результат которых нужен сейчас, а не когда кто-то там решит его обработать.

- конкретно Вам возможно и незачем (со своей архитектурой Вы сами разбирайтесь, Вам видней - я отвечал на замечания относительно мессаджинга которые мне показались не справедливыми). Однако можно всегда задать вопрос: что будет с системой если она по каким то причинам начнет медленно обрабатывать запросы (сетевые проблемы, дисковые проблемы, проблемы при работе БД и т д)? Если запросы прибиваются по таймауту, то сколько висящих запросов может накопиться за это время? И не упремся ли мы в какие то лимиты сервера приложений (например по количеству потоков). В этом смысле асинхронный мессаджинг (для которого длительное хранение сообщений в очереди это скорее нештатная, хотя и ожидаемая, операция) позволяет сохранить работоспособность системы не завалив ее внутренними запросами
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999085
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999087
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
Однако можно всегда задать вопрос: что будет с системой если она по каким то
причинам начнет медленно обрабатывать запросы (сетевые проблемы, дисковые проблемы, проблемы
при работе БД и т д)? Если запросы прибиваются по таймауту, то сколько висящих запросов может
накопиться за это время?


Этот вопрос мне кажется риторическим. Вы его можете адресовать совершенно к любой архитектуре даже
самой дорогой и покрытой требованиями по NFR. Это нештатная ситуация и не бизнес-кейс.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999089
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- не слишком ли "просто" выходит? Вероятно не самые глупые люди проектировали API и брокеры сообщений
Ну вы определитесь кто на ком стоял: request/reply - это фишка JMS, которая прямо в спецификации описана, если мы принимаем за истину, что JMS проектировали умные люди, то посмотрев на кафку, мы заметим, что там "в коробке" этого нет , исходя из этого можно предположить что кафку писали бомжи... или таки просто не стоит предлагать использовать неподходящий паттерн там где это не нужно?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999098
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Ну вы определитесь кто на ком стоял: 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 и мессаджинг не используется.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999100
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Kachalov
Однако можно всегда задать вопрос: что будет с системой если она по каким то
причинам начнет медленно обрабатывать запросы (сетевые проблемы, дисковые проблемы, проблемы
при работе БД и т д)? Если запросы прибиваются по таймауту, то сколько висящих запросов может
накопиться за это время?


Этот вопрос мне кажется риторическим. Вы его можете адресовать совершенно к любой архитектуре даже
самой дорогой и покрытой требованиями по NFR. Это нештатная ситуация и не бизнес-кейс.


- ну почему же, можно заложить отказоустойчивость в архитектуру, а можно этого не делать. Все имеет свою цену. Возиться с месаджингом сложнее чем строить коммуникацию через REST. Но если простой связан с материальным ущербом, то можно и повозиться. Асинхронный месаджинг точно может помочь купировать проблемы с неожиданным всплеском нагрузки или ухудшением качества сети и сохранить работоспособность системы
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999111
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
как можно синхронно просрать запрос?

Клиент отправил запрос. В это время сервер делает рестарт. Клиенту вернулась дуля. Имеем ввиду, что клиенты-серверы - это всё микросервисы, а не чей-то браузер.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999112
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
принимающая сторона сообщение прочесть не смогла, на вашей стороне вместо сообщения об ошибке возникает таймаут

Если хттп сервер что-то там не шмог и завис, таймаута не возникает, я так понимаю?
Андрей Панфилов
на вашей стороне вместо сообщения об ошибке

Что-то там возникает, я тоже понимаю, от святого духа, а не от того, что connection refused?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999114
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Учитывая релятивизм - мы обречены строить мессенджинговые системы между планетами и галлактиками
в следующие сотню-тысячу лет.

Синхронизм не будет там работать. Слишком велик лаг.
вы обречены строить Модель ИС.
А модель в ВУЗАХ это упрощенная модель реального мира.
Ключевое слово - упрощенная.
Вы в курсе как управляли луноходом наши водители сидя на земле?
Что было с лагом?)))))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999115
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
асинхронное взаимодействие (в т.ч. использование очередей) в первую очередь направлено на борьбу с таймаутами

Не только и не обязательно. Суть в том, что у тебя есть одно поднятое соединение, ты через него работаешь, а не открываешь/закрываешь его на каждый этот свой вызов рпц. Имея брокер можно хоть херачить броадкастом и для этого не нужно знать адреса/порты всех твоих новых/старых миркосервисов, не нужно делать балансировку руками и много что еще. А взамен всего-то надо организовать рпц - т.е. после отправки слушать указанную тобой же очередь.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999116
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
тем что нгиникс по-сути тот же брокер, только синхронный.
разница в том что если тебе надо формат взаимодействия запрос-ответ_на_запрос, то твоя кафка будет как пятая нога собаке.

У меня запрос - ответ и раббит не как пятая нога. Вообще не вижу никаких проблем и недоумеваю, в чем вы там видите существенную разницу. хттп поднимает соединение, отправляет данные, ждёт ответа, закрывает соединение. С раббитом делается всё абсолютно тоже самое, только соединение не закрывается.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999117
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Таймаут это счетчик времени на клиенте. А не на сервере который завис LOL)))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999118
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
> С раббитом делается всё абсолютно тоже самое
= есть слово оверхед в архитектуре. Лишний глюкавый код.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999119
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Асинхронный код всегда сложнее синхронного. Просто по определению.
Как автомат коробка сложнее механической.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999120
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
надо предусмотреть больше кейсов чем при синхронном вызове удалённого сервиса

РПЦ? Сделать, чтобы рпц вызов на нашем любимом яп ждан listener и выглядел так, как будто он синхронный? Что еще? хттп ошибки? Так тут асихрнонных/синхронный вызов вообще не причём. Таймауты на дохлый сервис, чтобы работало как connection refused? Так этого наоборот надо избегать. Что еще?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999121
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
Как будем очередь прикручивать?

Также, как и хттп ты прикрутил. Только вместо адреса другого сервиса будет адрес брокера + очередь.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999122
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Таймаут это счетчик времени на клиенте. А не на сервере который завис LOL)))

Я в курсе. Но остаётся открытым вопрос с таймаутами: разница в чём?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999123
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Асинхронный код всегда сложнее синхронного. Просто по определению.

Сложнее, но не прям уж чтобы настолько. Если речь идёт о микросервисах, то там будет еще куча других сложностей, для которых фичи брокеров будут велосипедить поверх хттп. И зачем тащить хттп внутрь, если сразу можно все сделать нормально? Мне лично не понятно, но ТС возбудился по этому поводу почему-то. Ну да ладно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999124
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что там по теме треда?

Андрей Панфилов
существует кодогенератор

Не нравится их генератор - сделай свой или допили этот. Делов-то

Андрей Панфилов
это так у всех или только у меня?

А что, весь софт должен быть уже написан а программисты только юзать готовое? Так с этим будет справляться любой птушник, зачем платить нам деньги?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999125
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
отправителю от этого ACK не тепло, ни холодно

Отправителю от того, что он по хттп что-то отправил тоже не сильно жарко.
Решаем задачу какую? Получатель завис? По хттп долго нет ответа, выбрасываешь таймаут. В очередях - тоже самое или таймаут нахождение в очереди, перевод сообщения в очередь просранных, обработка его там, ответ. Это один из вариантов.
Ошибка соединения? Она не нужна. Получатель либо слушает, либо не слушает. Сообщение не обработано, см п.1.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999131
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
Таймаут это счетчик времени на клиенте. А не на сервере который завис LOL)))

Я в курсе. Но остаётся открытым вопрос с таймаутами: разница в чём?
в чем вопрос то?
Try поставить? Повтори вопрос.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999135
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
>Сложнее, но не прям уж чтобы настолько.
= прогер должен быть ленивым чтобы не писать больше чем в ТЗ.
Было в ТЗ
message driven architecture?
https://www.google.com/search?q=message driven architecture&oq=message drive&aqs=chrome.1.0l2j69i57j0l2.8151j0j8&client=tablet-android-huawei&sourceid=chrome-mobile&ie=UTF-8
Или для тебя все едино?
Вадя на сокетах напишет. Ты на кафке)))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999140
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- если в Кафке чего то нет, то не понятно почему это аргумент. В то время как если где то приложили усилия и реализовали ReplyTo значит стоит подумать зачем
- я не предлагаю Вам ничего (о чем сказал в предыдущем посте), паттерн есть и хоть Вы десять раз повторите слово "жопа" он никуда не денется

Ну должна же хоть какая-то логика присутствовать, нет? Вот было утверждение, что организовывать RPC через HTTP якобы плохо, а нужно всенепременно использовать сообщения, мы берем и смотрим что же там творится в иконостасе адептов микросервисов - кафке, а там, опа, а оказывается что request/reply-то и нет, как-то странно, вам не кажется? А может быть такое, что ребята, которые эту кафку разрабатывали, посчитали что request/reply - это неправильный паттерн?

Kachalov
- ну сначала расскажите "что ли", что за Бен Моррис такой с горы? Какой то архитектор, по первому образованию "The University of Manchester - Politics and modern history".
Я проверил - нормальный такой архитектор, в отличии от вас что-то в целевой БД понимает .
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999141
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
в чем вопрос то?

Срач начался тут: 22197361
И соответственно вопрос, чем таймаут на хттп отличается от любого другого.
PetroNotC Sharp
Было в ТЗ message driven architecture?

Да.
Андрей Панфилов
есть некий набор микросервисов
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999143
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
там творится в иконостасе адептов микросервисов - кафке, а там, опа, а оказывается что request/reply-то и нет

А в рабите оно есть. Ты на кавку так стригеррился что-ли?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999145
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
там творится в иконостасе адептов микросервисов - кафке, а там, опа, а оказывается что request/reply-то и нет

А в рабите оно есть. Ты на кавку так стригеррился что-ли?
Вот это поворот... а что ответ означает, что не нужно использовать кафку или то, что нужно где-то кафку, а где-то rabbitmq? а что тогда мешает использовать где-то кафку, а где-то REST?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999150
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

рест в качестве ендпоинта для всяких браузеров,а нафига юзать рест для взаимодействия между своими микросервисами, где тонны сообщений летают туда-сюда, лично мне, не понятно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999151
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Набор микросервисо не говорит автоматом об такой архитектуре. Иначе диапазон у тебя узковат.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999154
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
>Срач начался тут: 22197361
Я не понял его проблемы обработать таймаут райзе.
И отвечал вам на "просрали.... если зависли...."
Это тоже в ТЗ оговаривается.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999156
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
рест в качестве ендпоинта для всяких браузеров,а нафига юзать рест для взаимодействия между своими микросервисами, где тонны сообщений летают туда-сюда, лично мне, не понятно.
давайте от поставленного вопроса не отходить: не нужно использовать кафку или нужно использовать не только кафку?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999157
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Набор микросервисо не говорит автоматом об такой архитектуре.

Ну а что там будет? Перекидывание хттп? Придёт время масштабировать притащим nginx. Как уже сказали - это типа все равно, что брокер, только хттп. И соединения также открываем/закрываем. И функционала меньше. И что выходит? хттп ради хттп? Мне не понятна позиция просто.
PetroNotC Sharp
Это тоже в ТЗ оговаривается.

Да. Стасян тоже так любил говорить. Раз не оговаривается, можно сделать всё по минимуму, потом кто-нибудь перепишет. Я не говорю, что ТСу это НУЖНО (вопрос вообще не об этом), я говорю, что это - не аргумент.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999159
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

Я не юзал кафку, юзаю рабит. Привёл для примера, но не рассчитал последствия
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999160
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Пожалуйста, скажите что означает слово оверхед.
Чтобы мы на одной волне говорили.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999161
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Пожалуйста, скажите что означает слово оверхед.

Накладные расходы на использование чего-либо.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999162
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Микросервисы это по сути взаимодействие классов. На другом уровне.
Вызов класса асинхронно делать или нет?
>Придёт время масштабировать притащим nginx.
= это просто балансировщик. Перенаправляет с сервера А на сервер Б
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999163
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
Пожалуйста, скажите что означает слово оверхед.

Накладные расходы на использование чего-либо.
пример теперь приведи
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999164
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
>Да. Стасян тоже так любил говорить. Раз не оговаривается, можно сделать всё по минимуму, потом кто-нибудь перепишет. Я не говорю, что ТСу это НУЖНО (вопрос вообще не об этом), я говорю, что это - не аргумент.
= профи дает ДВА решения. Ты и стасян даете ОДНО
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999165
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
пример теперь приведи

ffi из одной среды в другую.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999166
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Вызов класса асинхронно делать или нет?

Зависит от класса и того, что он делает.
асинхронно
Мы вроде как решили, что никакой разницы между (а)синхронно в хттп против рабита нет?
PetroNotC Sharp
это просто балансировщик

Ну так очереди тоже работают в том числе, как балансировщик. В чем разница?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999167
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
= профи дает ДВА решения. Ты и стасян даете ОДНО

Не понял претензии.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999170
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
= профи дает ДВА решения. Ты и стасян даете ОДНО

Не понял претензии.
ты не дал минимального синхронного решения.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999179
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
как можно синхронно просрать запрос?

Клиент отправил запрос. В это время сервер делает рестарт. Клиенту вернулась дуля. Имеем ввиду, что клиенты-серверы - это всё микросервисы, а не чей-то браузер.

просто сервисы. тут за слово микро перед словом сервис могут и расстрелять.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999180
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
mayton
пропущено...


Этот вопрос мне кажется риторическим. Вы его можете адресовать совершенно к любой архитектуре даже
самой дорогой и покрытой требованиями по NFR. Это нештатная ситуация и не бизнес-кейс.


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

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

мне кажется, тут единственыый ответ такой - ложкой едят суп лопатой копают землю. можно и наоборот. кто ж запретит? вопрос удобства.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999187
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
>Зависит от класса и того, что он делает.
ClassA.id = classB.getID(FIO)
АСИНХРОННОСТЬ НУЖНА двух микросервисов?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999219
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
асинхронное взаимодействие (в т.ч. использование очередей) в первую очередь направлено на борьбу с таймаутами

Не только и не обязательно. Суть в том, что у тебя есть одно поднятое соединение, ты через него работаешь, а не открываешь/закрываешь его на каждый этот свой вызов рпц. Имея брокер можно хоть херачить броадкастом и для этого не нужно знать адреса/порты всех твоих новых/старых миркосервисов, не нужно делать балансировку руками и много что еще. А взамен всего-то надо организовать рпц - т.е. после отправки слушать указанную тобой же очередь.
Так... если говорить про некую абстрактную производительность, то мы должны для начала определить метрики ("открываешь/закрываешь его на каждый этот свой вызов рпц" - это не метрика), обычно их две: latency и throughput (надеюсь не нужно объяснять, что это как болид F1 против фуры), для них есть еще персентили и сренеквадратичные отклонения, поскольку среднее значение мало кому интересно. И дороговизна открытий HTTP-соединений должна рассматриваться в рамках этих двух терминов, здесь можно согласиться, что throughput у персистентных соединений будет выше, однако latency в сравнении с HTTP там будет зашкаливать, потому что открыть TCP соединение и проверить валидность сессионного токена - это одно, а дождаться когда брокер зафиксирует сообщение в очереди, потом его кто-то оттуда вычитает, обработает, отошлет обратно и мы прочтем - это совсем другое.

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

crutchmaster
Отправителю от того, что он по хттп что-то отправил тоже не сильно жарко.
Решаем задачу какую? Получатель завис? По хттп долго нет ответа, выбрасываешь таймаут. В очередях - тоже самое или таймаут нахождение в очереди, перевод сообщения в очередь просранных, обработка его там, ответ. Это один из вариантов.
Ошибка соединения? Она не нужна. Получатель либо слушает, либо не слушает. Сообщение не обработано, см п.1.


кому вы собрались ответ отсылать из DLQ? в RPC на кривой запрос клиент получает ошибку, чтобы такое же сделать на request/reply нужно изворачиваться - это совершенно не равноценное взаимодействие, очереди - это когда глухой общается с немым.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999224
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

>очереди - это когда глухой общается с немым
+1))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999246
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
ты не дал минимального синхронного решения.

С рабитом можно сделать минимальное синхронное решение с запросом-ответом. Такое же, как хттп, только на 1 соединении.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999258
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
кому вы собрались ответ отсылать из DLQ?

Ответы-запросы гуляют точно также, как и в это вашем http. Есть очередь получателя и динамическая очередь отправителя, которую от слушает на ответ. Принцип тот же, что и с 80 портом сервера и динамическим у клиента. У вас претензии такие же, как у дельфистов к вебщикам, что на этих ваших фреймворках сложна, мы лучше формочек намышевозим
Андрей Панфилов
открыть TCP соединение

Сисколы и походы по сети не такая уж и дешевая вешчь, как может показаться, прощу заметить. А этих соединений может быть не просто много, а дохерища, так что все эти рабиты придумали тоже не от сильно хорошей жизни на хттп.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999259
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Я проверил - нормальный такой архитектор, в отличии от вас что-то в целевой БД понимает .

- не понимаю в чем Ваша проблема: Вы неспособны общаться вежливо? Зачем Вы вбрасываете новые темы? Какое отношение GUID имеет к мессаджингу, или REST, или микросервисам?

Полный offtop, но тема мне интересная, так что все же выскажусь:
- все что написал этот "Бен Морис" мог бы написать и я, никаких возражений у меня нет (работал я и с GUID, и с GUID на SQL Server и проблематика мне знакома), зато есть дополнения - Бен не достаточно погрузился в тему: UUIDы бывают разных видов (он неявно подразумевает рандомный - версия 4, в то время как версия 1 - это UUID в которым данные осмысленны и упорядочены, пусть и не в оптимальном для хранения в БД порядке), что наводит нас на мысль о возможности генерации UUIDов которые будут оптимизированы для хранения в РСУБД, но при этом сохранят такое качество как уникальность (хотя надо крепко подумать зачем все это надо и почему нельзя использовать инкрементный ключ). И второе дополнение - UUID по сути бинарный, а не текстовый, и когда его хранят в БД как строку, то обретают кучу проблем (о которых написал Бен), без каких либо профитов
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999267
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov

- не понимаю в чем Ваша проблема: Вы неспособны общаться вежливо? Зачем Вы вбрасываете новые темы? Какое отношение GUID имеет к мессаджингу, или REST, или микросервисам?

Полный offtop, но тема мне интересная, так что все же выскажусь:
- все что написал этот "Бен Морис" мог бы написать и я, никаких возражений у меня нет (работал я и с GUID, и с GUID на SQL Server и проблематика мне знакома), зато есть дополнения - Бен не достаточно погрузился в тему: UUIDы бывают разных видов (он неявно подразумевает рандомный - версия 4, в то время как версия 1 - это UUID в которым данные осмысленны и упорядочены, пусть и не в оптимальном для хранения в БД порядке), что наводит нас на мысль о возможности генерации UUIDов которые будут оптимизированы для хранения в РСУБД, но при этом сохранят такое качество как уникальность (хотя надо крепко подумать зачем все это надо и почему нельзя использовать инкрементный ключ). И второе дополнение - UUID по сути бинарный, а не текстовый, и когда его хранят в БД как строку, то обретают кучу проблем (о которых написал Бен), без каких либо профитов
Ну вы видимо читать не умеете (этому в школе учат), как уже было ранее замечено не в коня корм... А проблемы почему-то у меня.

https://www.ben-morris.com/the-problem-with-guids/ This can be improved by using sequential GUIDs, though these are more vulnerable to being guessed or brute forced. In most cases, the simplest solution is to use boring old incrementing integers.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999268
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
ты не дал минимального синхронного решения.

С рабитом можно сделать минимальное синхронное решение с запросом-ответом. Такое же, как хттп, только на 1 соединении.
а когда просят принести палку, можно принести дерево и сказать что это решение вопроса, только ветки обмотать скотчем.
Вы наверно в магазине не видели менеджеров которые при просьбе дать простой пылесос дают моющий)))).
У него режим без воды есть))))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999270
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

ClassA.id = classB.getID(FIO)
Дайте синхронный и асинхронный вариант.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999296
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
а когда просят принести палку, можно принести дерево и сказать что это решение вопроса, только ветки обмотать скотчем.

Но в плане сети поднятие tcp сокета намного проще, чем хттп.
PetroNotC Sharp
Дайте синхронный и асинхронный вариант.

Вариант чего? Куда тебе его дать? Где ТЗ? Что эта вообще?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999302
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Ну вы видимо читать не умеете (этому в школе учат), как уже было ранее замечено не в коня корм... А проблемы почему-то у меня.

- мда...

https://www.ben-morris.com/the-problem-with-guids/ This can be improved by using sequential GUIDs, though these are more vulnerable to being guessed or brute forced. In most cases, the simplest solution is to use boring old incrementing integers.
- и чем это отличается от того что написал я? Тем что Бен еще навалил зачем то про брутфорс? Я понял почему Вы его цитируете (иногда правда не удается конкретное место выделить в этих пространных рассуждениях, приходится ссылки на целые страницы давать, а лучше бы сразу на весь сайт) - он сходно мыслит, отвечает на гипотетические проблемы которых возможно и нет в конкретном приложении, перескакивая на разные темы. Ты ему про сиквенс, он тебе про брутфорс. Ты ему про GUID, он тебе про суррогатный ключ. Абстрактный архитектор.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999309
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
синхронный и асинхронный вариант

Вообще не понимаю, где у тебя с этим проблемы. В плане логики происходящего происходит всё ровно тоже: данные отсылаются, а потом слушается порт/очередь, разница лишь в том, что в случае хттп - это тцп порт, в случае рабита - ждём данных из поднятого соединения. Как ты там у себя накодишь, синхронно, асинхронно, через жопу до гланд - это вообще дело десятое.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999317
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
Андрей Панфилов
Ну вы видимо читать не умеете (этому в школе учат), как уже было ранее замечено не в коня корм... А проблемы почему-то у меня.

- мда...

https://www.ben-morris.com/the-problem-with-guids/ This can be improved by using sequential GUIDs, though these are more vulnerable to being guessed or brute forced. In most cases, the simplest solution is to use boring old incrementing integers.

- и чем это отличается от того что написал я? Тем что Бен еще навалил зачем то про брутфорс? Я понял почему Вы его цитируете (иногда правда не удается конкретное место выделить в этих пространных рассуждениях, приходится ссылки на целые страницы давать, а лучше бы сразу на весь сайт) - он сходно мыслит, отвечает на гипотетические проблемы которых возможно и нет в конкретном приложении, перескакивая на разные темы. Ты ему про сиквенс, он тебе про брутфорс. Ты ему про GUID, он тебе про суррогатный ключ. Абстрактный архитектор.
Мне кажется нельзя обсуждать GUID generation без привлечения теорвера. Сюда-же коллизии и парадоксы дней рождений.
Другое дело. Имеется ли принципиальная возможность генерации УНИКАЛЬНЫХ ключей в распределённых системах.
В тех системах собственно для чего и рандомный GUID создавался.

В остальных случаях ну ясен пень он не нужен когда есть БД которая лихо выдает сиквенсы да еще и на каждую табличку свой
персональный сиквенс.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999319
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- мда...
Что мда? Вы уже второй раз (первый тут: 22197826 - какой-то нереальный прогон, что что ACK долетает до отправителя) демонстрируете, что умение читать - это не ваш конек (про умение понимать прочитанное даже речь не идет), при таком раскладе насколько вероятно что вы не несете пургу постоянно? Если приплюсовать ту дичь, что вы писали в топике про СУБД, я бы сказал что к вашему мнению прислушиваться совершенно не стоит. При всем при этом зачем-то докопались до образования чувака, вы вообще в курсе, что, например, у сэра Исаака Ньютона теологическое образование? А в курсе как расшифровывается PhD?

Kachalov
- и чем это отличается от того что написал я?

То что вы написали мало кого волнует, здесь больше интересно что из довольно объемного текста вы сумели вычленить только два предложения, и так перевозбудились, что даже не смогли дочитать до конца.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999328
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
автор«Тролли – это личности с пассивно-агрессивными чертами, больше живущие внутренней жизнью, испытывающие неуверенность в себе в ситуациях непосредственного общения. Они не устраивают открытых конфликтов, например, в автобусе, зато проявляют агрессию в интернете. Выражать эмоции, в том числе и агрессию, это прямая потребность для каждого. У троллей местом выражения агрессии становятся именно интернет», - объясняет врач-психотерапевт.
Еще одной причиной троллинга, по мнению врача, можно считать дефицит энергии и ярких эмоций в реальной жизни. Человек не решается получить всю гамму эмоций из отношений, на работе и так далее. И провоцирует пользователей в интернете на эмоции, восполняя в виртуальном общении таким образом дефицит собственных эмоций и впечатлений
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999346
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Я утверждую что синхронный и асинхронный код/архитектура отличаются кардинально.
Ты повторяешь мантру - все почти тоже самое)))).
Ваш кеп очевидность.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999604
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
Дайте синхронный и асинхронный вариант.

Вариант чего? Куда тебе его дать? Где ТЗ? Что эта вообще?
Вероятно запросили пруф для простейшей реализации в подтверждение утверждения о крутости очередей

crutchmaster
Но в плане сети поднятие tcp сокета намного проще, чем хттп.

Так что в итоге за 4 страницы обсуждения непонятно чего удалось выяснить:
- общение peer-to-peer между сервисами при помощи RPC - суть отстой, потому что там что-то не достаточно отказоустойчиво, не достаточно мастабируется и что-то еще
- очереди (возможно не все, но RabbitMQ-то точно) это круто и быстро, потому что там персистентные соединения, durable-очереди, можно настроить отказоустойчивый сервис, все дела

Вроде ничего не пропустил...

и вот я как дурак зачем-то полез в интернет и начал выяснять что это за зверь такой этот RabbitMQ, что на нем, куда не плюнь, все лучше чем в REST и вот нашел статейку: Benchmarking Apache Kafka, Apache Pulsar, and RabbitMQ: Which is the Fastest? , если кому-то лень читать (ну или кто не умеет слишком много текста) приведу основные тезисы:
- чуваки взяли тройку i3en.2xlarge (8C/64GB) и начали на них проверять какая очередь работает круче
- поставили они эти очереди в условно одинаковые условия: ну вот durability в RabbitMQ завезли недавно и оно такое медленное, что даже вендор не рекомендует , поэтому вместо durability репликация, а в кафке типа все круто из коробки (ну и crutchmaster завещал не просирать сообщения)
- ну вот в таком режиме оказалось что RabbitMQ больше 30 тысяч сообщений в секунду не умеет, а у кафки оказалось 200 тысяч

Итак.

RabbitMQ умеет с 24 ядер не больше 30 тысяч сообщений в секунду, в случае request/reply там очевидно 2 канала в разные стороны, поэтому эти 30 тысяч сообщений в секунду можно смело поделить на 2 и получить 15 тысяч обменов в секунду. Много это или мало? Идем на сайт, где другие ребята измеряют производительность разных web-фреймворков и смотрим что там и как (нужно в правом верхнем углу переключиться на вкладку cloud, чтобы результаты хоть как-то были сопоставимы с теми что для очередей: у них один Azure D3v2 - это 4С/14GB, т.е. раза в два слабее и в три раза меньше чем в тесте очередей). И что-то видится мне, что 15 тысяч обменов в секунду для HTTP - это совсем какой-то слабый результат - вон undertow, который в wildfly встроен за секунду делает 64 тыщи, да еще из базы что-то при этом выбирать успевает, без базы там вообще 180 тыщ в секунду.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999605
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RabbitMQ написан на Эрланге а это технология не сильно быстрая. На Lisp больше похожа.
Зато должна быть неубиваемой и на ходу обновлять свои версии модулей. Правда не знаю
какой толк от этого в системном а не прикладном коде.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999608
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
человек спросил про REST, тут развели демагогию про кафку.

Мессаджинг нужен в основном для гарантированной доставки, например финансовых данных.
Ну и для соц. сетей))

Если вы не пишите соц. сеть либо финансовый софт - нужно пользоваться REST (ну и подобным ему GraphQL). Всё остальное отмерло давно и это факт.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999618
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
ну вот в таком режиме оказалось что RabbitMQ больше 30 тысяч сообщений в секунду не умеет



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-2603 v3 @ 1.60GHz
Stepping:              2
CPU MHz:               1596.308
BogoMIPS:              3192.61
Hypervisor vendor:     Microsoft
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              15360K
NUMA node0 CPU(s):     0,1
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase bmi1 avx2 smep bmi2 erms xsaveopt


Понятно. У меня с 2гб ram на дохлой виртуалке 20к умеет, у них на крутом железе 30к кое-как. Или что-то у них с руками или ты что-то недоговариваешь.

Андрей Панфилов
да еще из базы что-то при этом выбирать успевает, без базы там вообще 180 тыщ в секунду.

Ну если нихрена не делать, то можно хоть миллион rqs делать, вопросов нет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999620
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Я утверждую что синхронный и асинхронный код/архитектура отличаются кардинально.

На уровне сети никакой разницы нет. Там всё асинхронное. Это у себя в коде ты или тормозишь тред и ждешь, или делаешь колбек. Делать можно и так и так не ломая всю свою архитектуру, в чём проблема? В спринговом RabbitTemplate, например есть синхронный sendAndReceive.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999622
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем асинхронную технологию натягивать на синхронные вызовы?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999623
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
А зачем асинхронную технологию натягивать на синхронные вызовы?

Что такое "асинхронная технология"? Вся сеть асинхронна по своей сути. Еще раз объяснить, что в amqp при rpc происходит по сути тоже самое, что и http, только с участием промежуточного сервака? Хз что вы прицепились к "синхронно/асинхронно", сейчас даже ветвление в процессоре асинхронное. Прицепились бы к промежуточному серваку, например, к ерлангу или я не знаю. Обидно, за уровень срача, честное слово.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999628
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster

Понятно. У меня с 2гб ram на дохлой виртуалке 20к умеет, у них на крутом железе 30к кое-как. Или что-то у них с руками или ты что-то недоговариваешь.
...
Ну если нихрена не делать, то можно хоть миллион rqs делать, вопросов нет.

Как же так... вы постоянно топили, что в очередях сообщения не просираются, а в REST какие-то невообразимые накладные расходы на транспорт, а тут выясняется, что если настроить очередь так, чтобы сообщения в очереди действительно не просирались, то накладные расходы в REST таковы, что нужно сделать каскад из 10 нжинксов, чтобы получить такой же throughput как у RabbitMQ, вот тут тоже эксперты по RabbitMQ выдают "рекомендации" :
- Use transient messages
- Split your queues over different cores
- Disable manual acks and publish confirms
- Avoid multiple nodes (HA)

Из всего прочитанного я сделал следующий вывод: у RabbitMQ есть два режима работы:
- терять сообщения, в этом случае оно хоть как-то к REST приближается, но из-за request/reply нужно все делить на 2
- тормозить
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999644
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
andreykaT
А зачем асинхронную технологию натягивать на синхронные вызовы?

Что такое "асинхронная технология"? Вся сеть асинхронна по своей сути. Еще раз объяснить, что в amqp при rpc происходит по сути тоже самое, что и http, только с участием промежуточного сервака? Хз что вы прицепились к "синхронно/асинхронно", сейчас даже ветвление в процессоре асинхронное. Прицепились бы к промежуточному серваку, например, к ерлангу или я не знаю. Обидно, за уровень срача, честное слово.

мне нравится здесь описание:
https://www.reactivemanifesto.org/

на мой взгляд суть в том что твоя система должна ОТВЕЧАТЬ скажем так особенностям работы твоей фигни. если отвечает то ок. если нет - то сова на глобусе.

ты так и не сказал в чем проблема рпц против очереди? особенно там где рпц решает задачу лучше очереди. ты же предлагаешь делать суть-рпц поверх очереди. вопрос - ЗОЧЕМ?

не ну ты конечно молодец если построил систему где рпц нет. а если есть?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999647
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
особенно.. если учесть (я за твои аббревиатуры не очень в курсе, сорян), что та же кафка построена на тупом поллинге и мэйлбоксах.

типа у тя есть база, в эту базу один по рпц фигачит данные, другой по рпц ТУПО полит базу и выгребает если есть чо. )) а - асинхронность. о - очереди. тьфу.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999650
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
то накладные расходы в REST таковы, что нужно сделать каскад из 10 нжинксов, чтобы получить такой же throughput как у RabbitMQ

Субъективщина. И я хз, чем и что меряли пацаны с тестами хттп серваков и что у них там за хттп, может они долбят свои серваки по одному tcp соединению, а потом рисуют 600k rqs.
Андрей Панфилов
терять сообщения

Даже без durable очередей это по надёжности лучше, чем хттп напрямую, хотя бы в сценарии, когда делается рестарт сервиса.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999652
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чем проблема рестарта сервиса? ну ты дернул сервис он не ответил ты у себя знаешь что что-то пошло не так. точно так же кафка может быть напрмер в дауне. сильно разница большая?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999653
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
ты так и не сказал в чем проблема рпц против очереди? особенно там где рпц решает задачу лучше очереди. ты же предлагаешь делать суть-рпц поверх очереди. вопрос - ЗОЧЕМ?

Я уже говорил зочем. Для балансировки нагрузки, резервирования сервисов, непрерывной интеграции. Ну, как бы пока можно не делать, но всё равно к этому же придёшь и будет тоже самое, только с костылями на nginx. Зочем? Если пока всё ок, мне хватает, ну ладно, понятно, ничего против не имею.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999654
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
а в чем проблема рестарта сервиса? ну ты дернул сервис он не ответил

В том что сервис должен отвечать?

andreykaT
точно так же кафка может быть напрмер в дауне.

По-серьёзному брокер работает как кластер, потому что он вообще падать не должен.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999655
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

Кстати, у меня очереди durable. И 20k rqs на говне. Я не знаю, что там с этими пацанами и их бенчем.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999658
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
andreykaT
а в чем проблема рестарта сервиса? ну ты дернул сервис он не ответил

В том что сервис должен отвечать?

andreykaT
точно так же кафка может быть напрмер в дауне.

По-серьёзному брокер работает как кластер, потому что он вообще падать не должен.

точно так же есть континуус интегрейшн когда мешок сервисов работают в кластере за балансером и один упавший другие не заметит.
это по-серьезному. а по-не-серьезному твой кролик точно так же может завалиться а ты будешь логи неделю читать че не так.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999659
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...да, я не топлю за отказ от очередей. я топлю за осознанность применения той или иной технологии.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999665
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
точно так же есть континуус интегрейшн когда мешок сервисов работают в кластере за балансером

Да. Я про это и говорю.

andreykaT
...да, я не топлю за отказ от очередей. я топлю за осознанность применения той или иной технологии.

Так в чём осознанность микросервисов на хттп? Что завалится и хер с ним? Просрали запрос и хер с ним? Ну да, потому притащат nginx, прикостылят недоочереди где-нибудь внутри или сбоку, точки обмена, топики, сделают чтобы можно было по одному соединению всё гонять и получится тот же amqp, только поверх хттп. Мне вот говорят "нада синхронно, это же надо сделать, это же костыли писать", а остальное типа не надо писать или так сойдёт, или это в упор игнорируют (зато посмотрите, какие у нас бенчи!) Пока все выглядит так, что диды писали на хттп, мы пишем и ты пиши, т.е. осознанность уровня дельфистов у которых есть формочки, им веб - сложна, потому что там нет формочек, с другой стороны в вебе есть доставка контента, а у них нет, но обновлялку бинарников им писать не сложна.
Может я не прав, конечно, мне просто интересно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999681
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему завалится?

Пришла ошибка - сделали повтор, балансировшик перекинул на соседний работающий узел, пользователь получил ответ (разумеется чуть дольше, чем без ошибок/перезагрузок)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #39999711
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
andreykaT
точно так же есть континуус интегрейшн когда мешок сервисов работают в кластере за балансером

Да. Я про это и говорю.

andreykaT
...да, я не топлю за отказ от очередей. я топлю за осознанность применения той или иной технологии.

Так в чём осознанность микросервисов на хттп? Что завалится и хер с ним? Просрали запрос и хер с ним? Ну да, потому притащат nginx, прикостылят недоочереди где-нибудь внутри или сбоку, точки обмена, топики, сделают чтобы можно было по одному соединению всё гонять и получится тот же amqp, только поверх хттп. Мне вот говорят "нада синхронно, это же надо сделать, это же костыли писать", а остальное типа не надо писать или так сойдёт, или это в упор игнорируют (зато посмотрите, какие у нас бенчи!) Пока все выглядит так, что диды писали на хттп, мы пишем и ты пиши, т.е. осознанность уровня дельфистов у которых есть формочки, им веб - сложна, потому что там нет формочек, с другой стороны в вебе есть доставка контента, а у них нет, но обновлялку бинарников им писать не сложна.
Может я не прав, конечно, мне просто интересно.

во-первых, в зависимости от задачи очень часто это ДОПУСТИМО потерять часть данных.
во-вторых, ретрай-паттерны рулят. причем для всего, для очередей в том числе. это если тебе важны данные.
кстати, диды сервисы интегрировали не через хттп там какая то дичь была через которую севрсиы (сервлеты) могли синхронно общаться внутри контейнера. вообще без всяких хттп. томкат жетти вебсфера и прочий исторический мусор.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000142
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
то накладные расходы в REST таковы, что нужно сделать каскад из 10 нжинксов, чтобы получить такой же throughput как у RabbitMQ

Субъективщина. И я хз, чем и что меряли пацаны с тестами хттп серваков и что у них там за хттп, может они долбят свои серваки по одному tcp соединению, а потом рисуют 600k rqs.
Андрей Панфилов
терять сообщения

Даже без durable очередей это по надёжности лучше, чем хттп напрямую, хотя бы в сценарии, когда делается рестарт сервиса.


Если вам не нравятся результаты тестов, которые я привел, можете сделать свои, благо и там и там методика и исходный код опубликованы. Но есть мнение что особо не поможет, о том что в RabbitMQ наступают проблемы с latency при потоке в 30-40 тысяч сообщений в секунду, пишут даже на сайте RabbitMQ: https://www.rabbitmq.com/blog/2020/06/18/cluster-sizing-case-study-mirrored-queues-part-1/
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000203
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
во-первых, в зависимости от задачи очень часто это ДОПУСТИМО потерять часть данных.

Ладно, я понял. Не всем критична доставка, очереди, точки обмена и прочее. Где-то можно жить без этого.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000384
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Ладно, я понял. Не всем критична доставка, очереди, точки обмена и прочее. Где-то можно жить без этого.
Чет вы быстро выдохлись. Давайте лучше схему с request/reply с точки зрения производительности чуть более подробно разберем, а то есть мнение, что мое предположение о делении throughput на 2 было ошибочным...

вот мы подключаемся к RabbitMQ, я так полагаю что в приложении нужен некий пул этих персистентных соединений - мы же не хотим, чтобы это было медленно как в HTTP/1.0, но когда мы посылаем сообщение из определенного места в коде, у нас есть желание, чтобы ответ в это же место и пришел, поэтому мы должны создать временную очередь, в которую должен приходить ответ и которую слушать будем только мы. Эта очередь должна быть всегда уникальна и к соединению из пула ее ну никак привязывать нельзя, в противном случае на таймаутах другие вызовы будут получать наши ответы вместо своих, т.е. прежде чем послать сообщение в RabbitMQ мы должны дополнительно вызывать некий RPC, который в RabbitMQ создаст новую очередь (кстати, кто должен чистить старые?) - вам не кажется, что в этом месте появляются дополнительные расходы, соизмеримые с установлением соединения по HTTP?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000625
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфиловну очевидно: весь контекст сериализовывать , а потом рассказывать про low coupling
Андрей,
Сонтент ? Вы против low coupling ?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000626
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmasterВся сеть асинхронна по своей сути. Уважаемый crutchmaster,
дайте ссылку на объяснение где почитать.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000627
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей,
Контент ? Конечно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000741
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirudom
дайте ссылку на объяснение где почитать

Это не очевидно? Ты отправляешь вызов по сети и ждешь, пока придёт ответ. Пакеты тебе могут притди не один за другим, возможно потребуется повторная передача, по этому же интерфейсу идут пакеты для других приложений и т.д и т.п. Синхронно (a->b->c) работает только процессор и то не всегда.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000743
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Http это синхронный протокол. Мне жаль.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000744
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
вот мы подключаемся к RabbitMQ, я так полагаю что в приложении нужен некий пул этих персистентных соединений

Зачем? По соединению за сообщение как в апаче?
Андрей Панфилов
вам не кажется

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

Андрей Панфилов
Эта очередь должна быть всегда уникальна и к соединению из пула ее ну никак привязывать нельзя

Можно. Таймауты работают на прослушивание созданной очереди, каким боком тут соединение? Оно живёт своей жизнью, передаёт данные туда-сюда.
послать сообщение в RabbitMQ мы должны дополнительно вызывать некий RPC, который в RabbitMQ создаст новую очередь (кстати, кто должен чистить старые?)
Да. Посылается команда создать временную очередь, подписывается слушатель (коллбек) на то, что оттуда придёт, отсылается RPC, где указывается эта самая очередь. Старые удаляются рабитом после успешной доставки сообщения.
вам не кажется, что в этом месте появляются дополнительные расходы, соизмеримые с установлением соединения по HTTP?
Отправить 100 байт туда-сюда по поднятому соединению несоизмеримо с установкой нового? Ну хз.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000745
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Давай определимся для начала, что такое "синхронный", что такое "асинхронный".

Вот: https://ru.wikipedia.org/wiki/Синхронный_способ_передачи_данных
Синхронный протокол. Причём тут tcp?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000747
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Чтобы работать асинхронно на синхронном http придцмали технологию и термин AJAX
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000748
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp,

Давай определимся для начала, что такое "синхронный", что такое "асинхронный".
начинай))).
Ты сказал фразу что веб асинхронный.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000749
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Начинать надо отсюда
22198291
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000751
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Чтобы работать асинхронно на синхронном http придцмали технологию и термин AJAX


Вот: https://ru.wikipedia.org/wiki/Синхронный_способ_передачи_данных
Синхронный протокол. Причём тут tcp/ip и http?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000752
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Чтобы работать асинхронно на синхронном http придцмали технологию и термин AJAX

Я в ноде могу работать асинхронно с хттп и без всякого ajax изкаробки еще с тех времён, когда эта самая нода вышла. И чо?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000753
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
начинай

Начал.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000754
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
Чтобы работать асинхронно на синхронном http придцмали технологию и термин AJAX

Я в ноде могу работать асинхронно и без всякого ajax изкаробки еще с тех времён, когда эта самая нода вышла. И чо?

(с) Георге Санд "Самое сложное....
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
Скажи, ты понял фразу?
Она не для прогеров кодеров. Она для архитекторов
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000756
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Нода старше веба? Правда?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000757
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Нода старше веба? Правда?

Колбек можно было делать хоть на си. Прикинь? А треды завезли еще в 386. Письками может еще предложишь помериться?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000759
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
А че обиделся?
У кодеров главное код писать.
У архитекторов главное ПРОСТЫЕ РЕШЕНИЯ.
AJAX проще ноды так как он в операционке. В движке эксплорера.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000760
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
А че обиделся?

Да нормально, срёмся дальше. Я почти 10 лет на форумах.
PetroNotC Sharp
У кодеров главное код писать.

Мы говорим про сеть или про код?
Что касается кода, то абсолютно не важно как в коде принимать данные протоколов над tcp/ip синхронно или асинхронно. Это ваши личные архитектурные заморочки. Можно сделать синхронно, можно асинхронно, можно даже какой-нибудь старинный действительно синхронный протокол обрабатывать асинхронно колбеком. Какая разница? Я могу сделать getUrl(url, callback), а могу result = getUrl(url) в одном и том же коде. В чём проблема
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000764
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

>Мы говорим про сеть или про код?
Мы говорим про фразу "веб по сути асинхронный")))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000766
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
sql-ru асинхронный?
))))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000767
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Мы говорим про фразу "веб по сути асинхронный")))

Ну так и что тебе не нравится? ajax - асинхронный, а на нём строится весь современный веб.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000768
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
sql-ru асинхронный?

Ты мне покажи сначала синхронный tcp/ip, а потом спрашивай. А то вопросов много.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000770
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
Мы говорим про фразу "веб по сути асинхронный")))

Ну так и что тебе не нравится? ajax - асинхронный, а на нём строится весь современный веб.
только работа ГУИ чисто техническая. Без БЛ.
Пример - sql.ru
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000772
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
только работа ГУИ чисто техническая

Нажми F12 - сеть и зацени, как "синхронно" грузит браузер sql.ru со всеми ресурсами. А в это время этот же браузер крутит другие вкладки с ютубчиком и вконтактиком. Всё, ля, "синхронно", сначала с вконтактика дожидается пакета, потом с ютубчика, потом sql.ru _синхронно_ и _последовательно_ грузит каждый урл, ага.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000773
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Баннеры, картинки,...
Ты не расшифровал слово БЛ?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000775
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Баннеры, картинки,...

...цсс и жс скрипты. Или ГУИ тут тоже не причём?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000779
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
Баннеры, картинки,...

...цсс и жс скрипты. Или ГУИ тут тоже не причём?
БЛ карл!
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000799
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
БЛ карл!

Что БЛ? Её _принципиально_ нельзя сделать асинхронной, чтобы ты отправлял запрос и ждал колбек? Можно на примере того же ajax. Вешаешь юзерскрипт и херак, любой древний вебчик вдруг превращается в spa и из "синхронного" становиться "асинхронным". Чудеса. Но как же так, хттп же синхронный протокол... Может ты не в курсе про download manager'ы, которые кочают один url в дохера потоков? Как такое может быть в синхронном протоколе, где все куски сообщения должны передаваться синхронно от первого до последнего? Или ты не в курсе про http туннели через http прокси, где вообще можно гонять хоть ssh. Как такое возможно? Хттп же должен синхронно передать данные и закрыться.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000812
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Можно все сделать. Даже Г... сожрать.
Но факты говорят что веб не асинхронный))).
Тебе 10 человек сказали что везде писать асинхронно это глупость.
Сайт sql.ru тоже синхронный запрос - ответ.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000813
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
У вади все на сокетах. У тебя все на асинхронности.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000816
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Но факты говорят что веб не асинхронный))).

Какие факты? Я тебе штук 5 фактов привёл, где главный веб протокол работает нихера не синхронно. А ты мне про sql.ru, где давно не сделали ajax, да так и оставили.

PetroNotC Sharp
Тебе 10 человек сказали что везде писать асинхронно это глупость.

Но когда ты жамкаешь f5 браузер делает почему-то именно так, когда доходит до скриптов и картинок. Он почему-то тащит их все разом, а не синхронно по одной. Идиоты делали наверное.

PetroNotC Sharp
Сайт sql.ru тоже синхронный запрос - ответ.

Синхронный запрос чего? Сайта sql.ru? Сеть открой и глянь, кто, что запрашивает и в каком порядке.


PetroNotC Sharp
Тебе 10 человек сказали

Ты, фин и ТС? 10 человек? Ну, немного преувиличил. Чуть больше, чем в 3 раза.

PetroNotC Sharp
что везде писать асинхронно это глупость

Но он везде и написан асинхронно. Хочешь еще поспорить? Тогда вперёд, доказывай, что tcp/ip - синхронный протокол. Мне надоело.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000824
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
У вади все на сокетах. У тебя все на асинхронности.

Потому что это - базовые вещи, на которые сверху лепят что хотят.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000841
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Синхронный_способ_передачи_данных
Дебильная статья.
Асинхронный RS-232 тоже "синхронизируется" старт-стопными битами.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000843
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Чем синхронизируется tcp/ip?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000844
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
где главный веб протокол работает нихера не синхронно
Какой из?
I(nternet)P(rotocol)? А кто и когда использовал его в прикладном коде?
U(ser)D(atagram)P(rotocol)? А вы часто им пользуетесь?
T(ransmission)C(ontrol)P(rotocol)? Так в нём из несихронного только O(ut)O(f)B(and) и, опять-таки - кто и когда этим пользовался?
H(yper)T(ext)T(ransport)P(rotocol)? Вплоть до версии 1.1 - полностью синхронный на постоянных подключениях.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000846
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Чем синхронизируется tcp/ip?
Номером пакета в служебных полях протокола.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000848
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Номером пакета в служебных полях протокола.

Вот дела. А AMQP синхронизируется названием очереди в поле сообщения. Выходит, тоже синхронный протокол?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000863
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
авторСинхронный запрос чего? Сайта sql.ru? Сеть открой и глянь, кто, что запрашивает и в каком порядке.
БЛ синхронна. А картинки и баннеры асинхронно.
Тебе что важнее?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000864
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
У вади все на сокетах. У тебя все на асинхронности.

Потому что это - базовые вещи, на которые сверху лепят что хотят.
перелогинься. Вадя про базовые вещи говорит - прокладка.
Уничижительно.
Ты сказал что sql.ru устарел. Не на AJAX.
Жги ещё!
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000954
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Андрей Панфилов
вот мы подключаемся к RabbitMQ, я так полагаю что в приложении нужен некий пул этих персистентных соединений

Зачем? По соединению за сообщение как в апаче?
У вас судя по всему возникают некие трудности с определениями. Вы уверены что понимаете смысл слова "пул"?

crutchmaster
Отправить 100 байт туда-сюда по поднятому соединению несоизмеримо с установкой нового? Ну хз
Вы видимо не в курсе, но для TCP/IP отправить что 100 байт, что 1, что 1000 - это одно и то же, попробуйте свой request/reply посчитать со стороны количества взаимодействий по TCP/IP и потом приходите (ну еще можете прочесть пару десятков RFC на HTTP, чтобы не возмущаться почему по HTTP throughput в 10 раз выше чем через поделку на erlang)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40000959
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Так в нём из несихронного только O(ut)O(f)B(and) и, опять-таки - кто и когда этим пользовался?
Достоверно известно, что через OOB в Oracle реализована возможность останавливать запущенные запросы.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001065
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Выходит, тоже синхронный протокол?
Вы всё пропустили - про "синхронный" RS-232 я уже ёрничал.
Если вы сделаете небольшое усилие и подумаете над передачей потока данных в рамках отдельного TCP-соединения, то, возможно, вам удастся сделать правильные выводы.

P.S.
Ещё в восьмидесятых годах прошлого века было показано, что "синхронная" семантика удалённого вызова процедур и "асинхронная" семантика обмена сообщениями полностью эквивалентны. Плюс есть вариант для "асинхронный удалённый вызов процедур".
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001066
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Достоверно известно, что через OOB в Oracle реализована возможность останавливать запущенные запросы.
Замечательно.
А в вашем прикладном коде вы использовали OOB-флаг для TCP-сокетов? А ваши коллеги? А часто?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001081
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Что БЛ? Её _принципиально_ нельзя сделать асинхронной, чтобы ты отправлял запрос и ждал колбек? Можно на примере того же ajax. Вешаешь юзерскрипт и херак, любой древний вебчик вдруг превращается в spa и из "синхронного" становиться "асинхронным". Чудеса. Но как же так, хттп же синхронный протокол... Может ты не в курсе про download manager'ы, которые кочают один url в дохера потоков? Как такое может быть в синхронном протоколе, где все куски сообщения должны передаваться синхронно от первого до последнего? Или ты не в курсе про http туннели через http прокси, где вообще можно гонять хоть ssh. Как такое возможно? Хттп же должен синхронно передать данные и закрыться.

какая-то бесовщина уже началась... Если мы ждем откуда-то вменяемого ответа (а не квитанции о получении), то это взаимодействие синхронное. Никакой асинхронности в AJAX нет, оно так названо только для того, чтобы веб-макаки за данными ходили в другом потоке, а не в UI, при этом в большинстве случаев этот AJAX заканчивается тем, что при отправке запроса пользователю начинает показываться крутилка/спинер/неведомаяхерня, а при получении ответа она убирается - какое здесь к черту асинхронное взаимодействие?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001166
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
какая-то бесовщина уже началась...

Бесовщина началась, когда некоторые начали утверждать, что amqp - это аснихронно и никак иначе, независимо от того, что они там под этим подразумевали.
Андрей Панфилов
чтобы веб-макаки за данными ходили в другом потоке

Там один поток.
Андрей Панфилов
здесь к черту асинхронное взаимодействие?

Вопрос не ко мне.


Андрей Панфилов
Если мы ждем откуда-то вменяемого ответа (а не квитанции о получении), то это взаимодействие синхронное.

Ок. Давайте отталкиваться от этого определения. В AMQP вы ждем вменяемого ответа (а не квитанции о получении) из очереди. Вопрос синхронности/асинхронности закрыт за отсутствием смысла.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001169
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

авторчерез AMQP-брокер, который осуществляет маршрутизацию, возможно гарантирует доставку, распределение потоков данных, подписку на нужные типы сообщений.
В ТЗ есть эти 4 функционала как нужные?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001229
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
Никакой асинхронности в AJAX нет, оно так названо только для того, чтобы веб-макаки за данными ходили в другом потоке, а не в UI

В javascript нет потоков, в нем не может быть асинхронного выполнения скрипта, однако браузер приложение многопоточное, за счет этого AJAX отправляет запросы и скрипт продолжает работу не дожидаясь выполнения запроса и получения результата, при этом запросов отправленных последовательно, но выполняющихся параллельно может быть много. Когда браузер получает ответ на запрос из js, он ставит соответствующий делегат в очередь на выполнение и когда скрипт закончит свою работу на исполнение пойдет очередь делегатов с результатами выполненных запросов.

PS: to all, по моему в своем горячем обсуждении вы смешали в кучу многопоточность и асинхронность.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001254
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
В ТЗ есть эти 4 функционала как нужные?

В тз есть микросервисы. Если это - не нужные функции, ну ок. Но тогда нахрена вообще микросервисы и хттп, обычные вызовы внутри монолита уделают хттп без шансов и ТСу не надо будет делать себе голову со сваггером.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001256
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
по моему в своем горячем обсуждении вы смешали в кучу многопоточность и асинхронность.

В этом сраче каждый считает под (а)синхронностью что-то своё, сокровенное, о чем боится всем рассказать.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001258
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
попробуйте свой request/reply посчитать со стороны количества взаимодействий по TCP/IP и потом приходит

Их столько же, сколько при установки хттп.

Андрей Панфилов
ну еще можете прочесть пару десятков RFC на HTTP, чтобы не возмущаться почему по HTTP throughput в 10 раз выше чем

Ну потому что там заворачивают кучу хттп запросов в одно тцп соединение, что конечно же, можно делать и в поделке на ерланге. Только зачем? Если модель взаимодействия микросервисов вида A <-> B <-> C, то нахрена они вообще нужны? Монолит сделать проще, накладных расходов на сеть у вызова метода нет. Дрочить на throughput, так дрочить по-полной.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001263
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp
В ТЗ есть эти 4 функционала как нужные?

В тз есть микросервисы. Если это - не нужные функции, ну ок. Но тогда нахрена вообще микросервисы и хттп, обычные вызовы внутри монолита уделают хттп без шансов и ТСу не надо будет делать себе голову со сваггером.
микросервисами он назвал обычное РЕСТ взаимодействие.
Нахрена тут гарантированная доставка? Маршрутизация? Выделенный сервер специально под брокер и очереди?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001274
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

>Если модель взаимодействия микросервисов вида A <-> B <-> C, то нахрена они вообще нужны?
= академически ты прав. Микросервисы в идеале асинхронны и подписываются на события. "Завели заказ 12345. Все кого это интересуют подписываются"))).
Но микросервисы, как и 100% RESTfull, никто не видел. Недостижимый идеал.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001329
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Их столько же, сколько при установки хттп.
Чет странное насчитали:
- для HTTP/1.0 нужно 3 (SYN) + 2 * 2 (DATA + ACK) + 4 (FIN) = 11 пакетов,
- для request/reply на AMQP: 2 * 2 (DATA + ACK на создание очереди) + 2 * 2 (DATA + ACK на отправку) * 4 = 20 пакетов

т.е. если мы говорим о том, что в случае HTTP/1.0 транспортные издержки довольно высокие, то в случае request/reply на AMQP они просто безумные.

crutchmaster
Дрочить на throughput, так дрочить по-полной.
Чет здесь я вас не понял... Про производительность очередей байки травить начали именно вы, а тут вот выяснилось, что в очередях что latency, что throughput, откровенно говоря, так себе. Что еще у вашего RabbitMQ остается? Призрачная надежность при наличии single point of failure?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001331
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
"Завели заказ 12345. Все кого это интересуют подписываются"
Так ты корову не продашь... "завели заказ ..." - это бизнес-событие, тут же обещается счастье если гнать RPC через очереди
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001405
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
PetroNotC Sharp
"Завели заказ 12345. Все кого это интересуют подписываются"
Так ты корову не продашь... "завели заказ ..." - это бизнес-событие, тут же обещается счастье если гнать RPC через очереди
дак это теретики микросервисов. С учеными степенями. Я сам не люблю их)))
У них для контроля цепочки бизнес логики заводится сквозной еще один процесс))).
Раз низкое связывание значит повышенный контроль (с)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001410
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
crutchmaster перевел стрелки на микросервисы ТС.
Я же предлагаю о них вообще не говорить.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001423
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как вам такая схема интеграции. есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер. триггер все изменения кидает в таблицу. на таблицу натравливаем поллингом апстрим сервис который апдейты выгребает и стримит в кафку. с другой стороны мешок консамеров что что-то там делают. мы использовали два шаблона интеграции

а потом я нашел такую штуку:
https://github.com/debezium/debezium

может кто покритикует такой подход?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001424
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер.
Зависит от базы, но подписаться на событие "произошли изменения" - вполне можно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001435
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
а как вам такая схема интеграции. есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер. триггер все изменения кидает в таблицу. на таблицу натравливаем поллингом апстрим сервис который апдейты выгребает и стримит в кафку. с другой стороны мешок консамеров что что-то там делают. мы использовали два шаблона интеграции

а потом я нашел такую штуку:
https://github.com/debezium/debezium

может кто покритикует такой подход?
Зависит от того насколько ты правильно пересказал, а то может случиться так, что это "Рабинович напел"... Если же отталкиваться от твоего вольного пересказа, то работать с векторами изменений - это тот еще гемор, ну к примеру, вот есть у хибера envers - начало, в принципе, точно такое же как и у тебя, но вот то что залетает в БД - оно может быть полезно только для аудита, а конечный пользователь, глядя на сообщения в духе "значение атрибута поменялось с А на Б", в этом ничерта не понимает. А здесь, судя по твоему описанию, получается что вектор изменений идет в кафку, а потом куда-то дальше, на мой взгляд основные косяки здесь такие:
- чтобы уметь разбирать чужой вектор изменений нужно у себя данные хранить в такой же структуре, зачем так делать - непонятно, потому как никакой бизнес составляющей здесь нет, одна только репликация, а зачем эта репликация сдалась, если другая сторона хочет хранить данные так как ей удобно, тоже непонятно
- когда мы вытаскиваем кишки нашей БД наружу, да и еще навешиваем некий контракт на эти кишки, то становится совсем неочевидно каким образом производить изменения в схеме БД (в том же самом envers нужно постоянно следить за составом колонок и датафиксы делать не только на данные, но и на лог, а если в этой штуке лог в виде EAV, то будет еще печальнее)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001437
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Если критиковать то...
У тебя мешок сервисов пишет в бд.
Почему второй мешок не может читать бд и по меткам времени выгребать изменения?
Зачем триггер?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001439
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
+1
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001440
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть метод такой:
- сервис А требует изменения в бд.
- на что его послать подальше и сказать: "иди в бд, сам и бери изменения".
Это называется умные сервисы.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001447
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Почему второй мешок не может читать бд и по меткам времени выгребать изменения?

Это означает, что второй сервис накладывает ограничение на изменение структуры данных.
И первый сервис уже не может изменять свою структуру под внешними требованиями.
Жуткий bad practice.
Из микросервисного и монолитного миров берется самое плохое - и производительность ниже, из-за сетевого вызова и сериализации, и гибкости нет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001453
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
andreykaT
а как вам такая схема интеграции. есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер. триггер все изменения кидает в таблицу. на таблицу натравливаем поллингом апстрим сервис который апдейты выгребает и стримит в кафку. с другой стороны мешок консамеров что что-то там делают. мы использовали два шаблона интеграции

а потом я нашел такую штуку:
https://github.com/debezium/debezium

может кто покритикует такой подход?
Зависит от того насколько ты правильно пересказал, а то может случиться так, что это "Рабинович напел"... Если же отталкиваться от твоего вольного пересказа, то работать с векторами изменений - это тот еще гемор, ну к примеру, вот есть у хибера envers - начало, в принципе, точно такое же как и у тебя, но вот то что залетает в БД - оно может быть полезно только для аудита, а конечный пользователь, глядя на сообщения в духе "значение атрибута поменялось с А на Б", в этом ничерта не понимает. А здесь, судя по твоему описанию, получается что вектор изменений идет в кафку, а потом куда-то дальше, на мой взгляд основные косяки здесь такие:
- чтобы уметь разбирать чужой вектор изменений нужно у себя данные хранить в такой же структуре, зачем так делать - непонятно, потому как никакой бизнес составляющей здесь нет, одна только репликация, а зачем эта репликация сдалась, если другая сторона хочет хранить данные так как ей удобно, тоже непонятно
- когда мы вытаскиваем кишки нашей БД наружу, да и еще навешиваем некий контракт на эти кишки, то становится совсем неочевидно каким образом производить изменения в схеме БД (в том же самом envers нужно постоянно следить за составом колонок и датафиксы делать не только на данные, но и на лог, а если в этой штуке лог в виде EAV, то будет еще печальнее)

в логе только айдихи измененных (добавленных, удаленных) сущностей.
что мне ПОКА не нравится - надо делать тригер надо делать новую таблицу надо делать кодинг на бд (хотя это имхо больше может быть принято как конфигурация дб а не кодинг). и второе - что будет с перформансом когда пушнут апдейт на миллион записей.
-я так понимаю коммит будет только когда все изменения применятся (это и хорошо и не очень. хорошо потому что если что то упало то и 100% не будет ивента). ну формальная скалябельность - апстримит один подбирают много. видим мощности дб хватает - можем сделать подобие кафковых партиций в бд и апстримить через в принципе любое количество стримеров. главное чтоб база переваривала.

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

что допустимо бизнесом - ордеринг НЕ важен. если одна и та же сущность обновилась 5 раз, то мы берем только одно событие. если зависимые сущности обновились - порядок снова роли в моем случае не играет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001454
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanov
> Почему второй мешок не может читать бд и по меткам времени выгребать изменения?

Это означает, что второй сервис накладывает ограничение на изменение структуры данных.
И первый сервис уже не может изменять свою структуру под внешними требованиями.
Жуткий bad practice.
Из микросервисного и монолитного миров берется самое плохое - и производительность ниже, из-за сетевого вызова и сериализации, и гибкости нет.

интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001455
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Если критиковать то...
У тебя мешок сервисов пишет в бд.
Почему второй мешок не может читать бд и по меткам времени выгребать изменения?
Зачем триггер?

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

что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате?

есть третий вариант - лезем в потроха сервиса (сервисов) которые пишут-шатают базу и там втыкаем "пошли чо нить в мессадж брокер после коммита в бд". а оно возьмет и не пошлет :)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001459
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
в логе только айдихи измененных (добавленных, удаленных) сущностей.
Даже это уже выставляет кишки СУБД наружу, т.е. "у клиента XXX изменился баланс" и "в таблице balance у записи с id=xxx что-то поменялось" - это разные события. Более того, что при таком подходе будет к примеру с удалениями (или изменениями FK, где фактически меняются 2 сущности) - вообще хрен разберешь, т.е. удалили запись из таблицы, записали в лог что такого id больше нет, а к чему он был привязан - хз, т.е. транзакцию закоммитил - контекст изменений потерял. В том хибере можно сделать так: накапливать и аггрегировать изменения на insert/update/delete, а на коммите эти изменения превращать уже в бизнесовые события и писать "правильный" лог, однако, для массовых изменений через SQL придется придумывать компенсации

andreykaT
что будет с перформансом когда пушнут апдейт на миллион записей
В оракле производительность в сравнении с обычным update без тригеров просядет шопипец, как-то можно улучшить за счет compound triggers , но в целом оно будет гораздо медленнее нежели update, а потом компенсация через insert ... select, но я так понимаю что обновлять по миллиону записей за раз - это не основной кейс.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001492
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой.

О, у нас появилось потребность в определениии публичного контракта:)

Ты прав, интеграция через базу это очень распространенный архитектрурный паттерн.
Но, если ты можешь себе позволить интеграцию через базу, то, скорее всего, микросервисы тебе не нужны.

Может это оффтопик, но прежде чем обсуждать паттерны и тебования, попробуй сформулировать, почему и когда бизнес готов платить огромные деньги за микросервисы, не смотря на огромные проблемы с целостностью данных, cross domain отчетностью, большим временем отклика и т.д.

И это явно не просто хайп, потому что люди умеют считать деньги.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001501
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

>например, потому что меток времени нет или они обновляются не с обновлением всех полей
= вы выбирайте. Или паттерн "бд это интеграция и ядро системы" или бд это легаси где нельзя ничего менять.
В первом случае постоянный апдейт бд и есть разработчик бд.
Назовите тогда пробемы?
update field add timestamp (добавить поле времени)
делается на рабочей базе и ничего не блокирует.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001503
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
>что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате?
=
- второй вариант отработан уже лет 20.
Есть OLAP/OLTP паттерн как ты любишь говорить
Есть не "сортировать по дате" а “запросить по индексу“
Есть физические индексы когда "новые записи всегда сверху")))
Есть партицирование таблиц
.....
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001532
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanov
>интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой.

О, у нас появилось потребность в определениии публичного контракта:)

Ты прав, интеграция через базу это очень распространенный архитектрурный паттерн.
Но, если ты можешь себе позволить интеграцию через базу, то, скорее всего, микросервисы тебе не нужны.

Может это оффтопик, но прежде чем обсуждать паттерны и тебования, попробуй сформулировать, почему и когда бизнес готов платить огромные деньги за микросервисы, не смотря на огромные проблемы с целостностью данных, cross domain отчетностью, большим временем отклика и т.д.

И это явно не просто хайп, потому что люди умеют считать деньги.

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

а так одна база на один сервис и все вроде как ясно хотя бы в этом моменте.

ну и тут хорошо бы определиться что ты вкладываешь в понятие "микросервис" а то тут могут и палкой побить если не так скажешь некоторые особо чувствительные личности :)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001533
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
>что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате?
=
- второй вариант отработан уже лет 20.
Есть OLAP/OLTP паттерн как ты любишь говорить
Есть не "сортировать по дате" а “запросить по индексу“
Есть физические индексы когда "новые записи всегда сверху")))
Есть партицирование таблиц
.....

я тебя понял. я подумаю. в этом есть смысл. согласен.
из минусов - надо шатать легаси таблицу.
из плюсов - не надо новую таблицу и триггер.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001543
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
>поэтому хорошо иметь прослойку между базой и чем то еще.
= прослойка это Message Driven Architecture (MDA)
О чем тут мембер crutchmaster топит.
Тогда бд в самой прослойке в виде сервера будет.
Скорость 5-10тыр сообщений в сек
Тебе решать.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001546
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
>поэтому хорошо иметь прослойку между базой и чем то еще.
= прослойка это Message Driven Architecture (MDA)
О чем тут мембер crutchmaster топит.
Тогда бд в самой прослойке в виде сервера будет.
Скорость 5-10тыр сообщений в сек
Тебе решать.

я пока не понимаю как мда привинтить к моему кейсу при всех тех условиях что есть у меня (база как точка интеграции, трогать почти ничего из того что поверх - нельзя).
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001552
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
СервисА, СервисБ, СервисN, СУБД.
Что можно трогать?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001553
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Трогать нельзя, но ты наворотил кафку, триггеры, новую таблу под рутом админом и еще терабайты диска под твой вариант.
Нет логики.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001582
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Трогать нельзя, но ты наворотил кафку, триггеры, новую таблу под рутом админом и еще терабайты диска под твой вариант.
Нет логики.

мне надо написать новый сервис который работает с данными из конкретной указанной пальцем бд. и всё. то что я наворотил триггеры - это единственное что я наворотил. что мне НЕ надо - мне не надо трогать существующие сервисы. или надо но там будет дикий рефакторинг.

второе приближение - это забрать ответственность тех сервисов что пишут в нужную мне таблицу, получать от них данные по синхронному формату, и уже самому класть эти данные в бд и говорить тем сервисам "да, я положил". тем самым я уже на уровне своей ответственности (наверное) буду знать о всех мутациях происходящих в нужных мне таблицах и как то этими знаниями распоряжаться. ну да.. пока не выяснится что кто то что то забыл и есть еще сервисы которые шатают эту бедную таблицу.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001597
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
то в случае request/reply на AMQP они просто безумные.

Ты там nginx где-то потерял по дороге, так что можешь на два умножать свой хттп и в принципе меня всё устраивает.

Андрей Панфилов
Про производительность очередей байки травить начали именно вы

Сам придумал, сам опроверг, сам победил. Молодец. Продолжай спорить сам с собой. Делай в следующий раз это оффлайн, ок?

Производительность при том условии, что нужны все те фишки (или хотя бы некоторые), которые даёт брокер, очевидно. Нахер он вообще твой хттп нужен, когда у тебя две точки и одна из них - не браузер. Закатай штаны обратно и пили лучше монолит, как диды.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001600
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
может кто покритикует такой подход?

Тут, хе хе, раббит от "критики" с трудом дышит, а ты собрался через базу и триггеры всё это гонять.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001609
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Ты там nginx где-то потерял по дороге, так что можешь на два умножать свой хттп и в принципе меня всё устраивает.
По дороге там потерян разве что HTTP/1.1

crutchmaster
Сам придумал, сам опроверг, сам победил. Молодец. Продолжай спорить сам с собой. Делай в следующий раз это оффлайн, ок?
Разве не вы писали?

crutchmaster
Сисколы и походы по сети не такая уж и дешевая вешчь, как может показаться, прощу заметить. А этих соединений может быть не просто много, а дохерища, так что все эти рабиты придумали тоже не от сильно хорошей жизни на хттп.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001612
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Ну дак погоди брать ответственность за запись в бд.
Начни с того что пишешь читающий сервис. Так?
Вот и опиши проблему дальше.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001615
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
По дороге там потерян разве что HTTP/1.1

Ну так я и через раббит могу на единственный сервис отправлять запросы пачкой, как в хттп 1.1. Ничего удивительного.

Андрей Панфилов
Разве не вы писали?

А еще писал, что-то там про точки обмена, очереди которые нужны для того, чтобы могли независимо разгребать n сервисов, но ты почему-то не заметил, а заметил то, что тебе удобно. Как там со всем этим будет работать хттп? Почти так же, но с костылями? Об этом мой вопрос был так-то. Но нахера его слушать, когда ты самый умный.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001619
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Ну так я и через раббит могу на единственный сервис отправлять запросы пачкой, как в хттп 1.1. Ничего удивительного.
О как интересно... в request/reply? пачкой?

crutchmaster
А еще писал, что-то там про точки обмена, очереди которые нужны для того, чтобы могли независимо разгребать n сервисов, но ты почему-то не заметил, а заметил то, что тебе удобно. Как там со всем этим будет работать хттп? Почти так же, но с костылями?
Ну и причем тут броадкасты-то? Вот нужно из одного места послать запрос в другое, нужно всенепременно использовать AMQP потому что в нем можно броадкасты?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002473
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Ну дак погоди брать ответственность за запись в бд.
Начни с того что пишешь читающий сервис. Так?
Вот и опиши проблему дальше.

проблему или все же задачу?
задача выхватывать обновления из бд по ряду сущностей и перекладывать их в индекс(ы) эластика.

детали в общем то не важны. но через бд видится проще в том смысле что не надо шатать текущие сервисы и интегрировать их с кафкой (или отдельными ее топиками).
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002757
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

>проблему или все же задачу?
= я тебе поражаюсь. В школе было
Дано:....
Требуется.....
И мы тебя тоже самое просим.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002758
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

> задача выхватывать обновления из бд по ряду сущностей
= Так как БЛ ты скрыл, то решение в лоб это не триггер, а JOB в бд.
Сканирует с нужной частотой базу по полю
myupdate
CREATE OR REPLACE TRIGGER trg_products
BEFORE INSERT OR UPDATE ON products
FOR EACH ROW
BEGIN
:new.myupdate := sysdate;
END;
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002759
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
По этому триггеру бд не встанет под нагрузкой
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002760
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Кроме того, в хибере уже есть счетчик версии сущности int field
Можешь добавить в анализ и его. Но основное это новое свое поле метки времени.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002793
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Кроме того, в хибере уже есть счетчик версии сущности int field
Можешь добавить в анализ и его. Но основное это новое свое поле метки времени.

в хибере много че есть. и интерцепторы и ивенты например. одна проблема. то место где хибер оно как бы нешатаемо и перебирать пару сотен методов или там сущностей чтоб одни махом (все сломать нахер) вариант не очень. нет хибера. забудь про него.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002794
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,

> задача выхватывать обновления из бд по ряду сущностей
= Так как БЛ ты скрыл, то решение в лоб это не триггер, а JOB в бд.
Сканирует с нужной частотой базу по полю
myupdate
CREATE OR REPLACE TRIGGER trg_products
BEFORE INSERT OR UPDATE ON products
FOR EACH ROW
BEGIN
:new.myupdate := sysdate;
END;

ты предлагаешь триггером выставлять тихонечко значения в полях на запись вместо того чтоб создать новую запись? выигрыш я тут вижу в том что у нас не будет второй таблицы. ну или только если перформанс этого подхода будет на мульон порядков выше.
из минусов.. представь задачу мне апстрим сервиса одного мало. как мне запустить 5 сервисов которые будут поллить базу и чтоб они выхватывали только свою часть данных? плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002873
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
>представь задачу мне апстрим сервиса одного мало. как мне запустить 5 сервисов которые будут поллить базу и чтоб они выхватывали только свою часть данных?
= мы по кругу пошли?
Проблема в каждом сервисе написать (псевдокод)
select field from t where myupdate > sysdate - 1
?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002874
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

>плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов.
Новое ТЗ в полтора слова на иврите?
Переведи.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003000
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmasterЭто не очевидно? Ты отправляешь вызов по сети и ждешь, пока придёт ответ. Пакеты тебе могут притди не один
за другим, возможно потребуется повторная передача, по этому же интерфейсу идут пакеты для других приложений и т.д и т.п.
Синхронно (a->b->c) работает только процессор и то не всегда. Спасибо, Ссылкой на спеку не поделитесь ?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003004
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanovМожет это оффтопик, но прежде чем обсуждать паттерны и тебования, попробуй сформулировать, почему и когда
бизнес готов платить огромные деньги за микросервисы, не смотря на огромные проблемы с целостностью данных, cross domain отчетностью, большим временем отклика и т.д.

И это явно не просто хайп, потому что люди умеют считать деньги. Дай свыше им здоровья !
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003018
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,

>плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов.
Новое ТЗ в полтора слова на иврите?
Переведи.

смотри. сейчас план такой - консамер полит базу, выгребает икс записей, превращает их в мессаджи и пуляет в кафку после успешного пулла (пулл, пулять. ого. надо запомнить), стирает выгребленное из бд. стейта нет. между поллингом упал - всем пофиг.

теперь сервис который гребет по таймстампу. откуда и как ему знать между каким и каким таймстампом ему надо выгребать данные? я про этот оффсет. сверху пример - отметка в базе - ноль записей. тут мне где то оффсет хранить надо или как то сами записи помечать как отгруженные. второй вариант не очень ибо требует апдейт+1
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003026
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Ты сначала ответь утвердительно что понял мой вариант.
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД.
Константа в зависимости от железа иинагрузки
Например 1000мсек.
- это понятно?
Теперь расскажи откуда консумер знает когда выгребать?
Итого два вопроса.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003035
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Ты сначала ответь утвердительно что понял мой вариант.
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД.
Константа в зависимости от железа иинагрузки
Например 1000мсек.
- это понятно?
Теперь расскажи откуда консумер знает когда выгребать?
Итого два вопроса.

отличный вариант. а если рассинхрон? ты либо чо нить пропустишь либо задублируешь. а если в какой то момент продюсер упал?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003049
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
1. В моем варианте нет продюсера. Есть сервисА, Б, С, N.
2. Подробнее про рассинхрон сервисаА расскажи. С примерами.
Потом уже про "упал" и космические катаклизмы.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003056
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Если мой триггер заменить на твой, то как раз будет рассихрон и дублирование вероятность.
Ваш кеп.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003130
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в моем тригере будет дабл если два раза обновится одна и та же запись. ну заапдейть триггер чтоб был инсерт если больше такого ентити айди нет. либо схлопывай в сет записи и шли мессаджи уникальными айди. но даже тут если вдруг у тебя будет дабл это не так страшно если вдруг айди вообще не уйдет. например, потому что рассинхрон был где то. тут это в принципе исключено. запись делается при коммите, запись всегда будет прочтена. единственный кейс если запись пропадет - это только где то в недрах кафки.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003195
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

>в моем тригере
= блин, я его спрашиваю про свой вариант. А он сплошным текстом всё в кучу без абзацев.
Попробуй сформулировать мысль с нумерацией:
1...
2...
3...
Где дублирование в моем варианте?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003205
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Ты сначала ответь утвердительно что понял мой вариант.
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД.


Что то херня, что то херня если посмотреть как устроены matview логи в оракле, то там в snaptime$$ изначально ставится время, которое довольно далеко в будущем от текущего момента (4000 год чтоли), а никак не текущее время (тут с определением текущего времени не все гладко в плане того, что время вставки в лог - так себе якорь, и время фиксации изменений тоже так себе), а потом записи из лога либо удаляются (если один консюмер), либо snaptime$$ выставляется в дату запуска джоба (если несколько консюмеров), поэтому запрос типа "дай мне что добавилось с последнего запуска" работает более-менее вменяемо.

Если же смотреть на задачу в более общем виде, то идея типа "мы приложение менять не хотим, да и что-то забыть можем, поэтому давайте создадим лог на таблицы, который будем разбирать" - она откровенно так себе, потому что ну очень сильно попахивает ETL/ELT, что в абсолютном большинстве случаев получится какая-то неподдерживаемая хрень, почему так будет:
- если посмотреть на вакансии по ETL/ELT, то там можно невооруженным взглядом заметить, что у них у всех довольно общий паттерн: нужно знать какую-то более-менее распространенную систему, SQL и какие-то скриптовые ЯП начиная от петона и заканчивая шелом, т.е. в целом практика такая, что ETL/ELT обычно строят из говна и палок.
- в бизнес-приложении мы работаем с бизнес-сущностями, а не с таблицами, ровно также если говорить о messaging, то там тоже бизнес события ходят, а в решении "на тригерах" мы сначала бизнес-сущности превращаем в таблицы, а потом из таблицы пытаемся получить бизнес-событие, и при этом утверждаем, что так типа надежно, не нужно ломать текущее приложение и пр., на самом же деле получится так, что чтобы из лога сформировать бизнес-событие, придется в ETL/ELT-поделку воткнуть бизнес-логику, а потом еще придется за этой поделкой следить постоянно - а там вместо вменяемой доменной модели будет какой-то говнокод

Исходя из вышесказанного куда лучше немного разломать приложение на хибере чем прикручивать откровенные костыли.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003206
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно. как ломать будем? пушить сразу в очередь?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003219
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Я ни разу не слышал что в субд метка времени на запись имеет проблемы.
Либо я не понял вас. Нужен пруф.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003224
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
возможно. как ломать будем? пушить сразу в очередь?

Пушить в очередь это создать другую архитектуру со своей еще одной бд очереди. Message driven architecture
Перевожу коротко его пост.
- второй его абзац это ответ на ваш триггер с созданием лога изменений.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003225
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Андрей Панфилов,
Я ни разу не слышал что в субд метка времени на запись имеет проблемы.
Либо я не понял вас. Нужен пруф.

Если я правильно понял Андрея, то он видет проблему в том, что "времени записи" две штуки:
1. когда прошел INSERT
2. когда прошел COMMIT

В триггере Вы скорее всего будете оперировать первым, а реально выгребать со стороны читателя более правильно по второй.

Вариант с простановкой времени вот лично мне совершенно не нравится. Я бы или просто измененные записи помечал, а при репликации убирал флаг (но плохо для производительности и блокировки), либо бы использовал очередь. Очередь хороша еще и тем, что кроме INSERT?/UPDATE, есть еще и DELETE. А при DELETE метку времени банально некуда ставить.

IMHO

Андрей Панфилов
Исходя из вышесказанного куда лучше немного разломать приложение на хибере чем прикручивать откровенные костыли.


В большинстве случаев разломать может потребоваться почти все приложение. Т.к. бизнес-сущность может встречаться в 100500 местах.

Обычно бизнес сущности более-менее мапятся на таблицу(ы). Т.ч. особой костыльности лично я не вижу. К тому же, задача репликации обычно более системная, чем прикладная. И переусложнять прикладной софт системными задачами, которые легко решить на уровне БД (триггер), тоже особого смысла нет.

IMHO
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003229
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Два времени в одно поле?
Одна бизнес транзакции нового объекта. Вставка.
Может через час если изменения то триггер обновит поле.
Когда job робот будет проходить, тогда он и захватит новый или уже модифицированный.
Так?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003231
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

>Вариант с простановкой времени вот лично мне совершенно не нравится. Я бы или просто измененные записи помечал, а при репликации убирал флаг
= я же про репликацию и отправку куда то вообще не говорил.
Выше 4 умных сервиса САМИ берут изменения.
Если отправлять в кафку или очередь то я аредлагал JOB.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003234
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Про delete вы правы.
Но имхо это уже БЛ.
Кому нужно знать такие тонкости? Пусть строят шину сообщений))
Имхо
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003236
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Вообще, часто сущности не удаляют. Их адейтет на Не актуальные)))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003243
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Leonid Kudryavtsev,
Два времени в одно поле?
Одна бизнес транзакции нового объекта. Вставка.
...
Так?

Клиентский софт на MS Access, FoxPro, PowerBuilder выдал команду INSERT. Триггер отработал. Время 13:10.
коллеги пошли на бизнес ланч и мы с ними....
В 13:15 запустился сервис выгребания обновлений
вернулись с бизнес ланча, пошли покурили
Покурили, сели за компьютер, вспомнили, что не нажали кнопку сохранить. Нажали. Прошел COMMIT. Время 14:30

В СУБД появилась запись с timestamp insert'а 13:10, которую никто не обработал
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003253
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Время между вставкой и коммитом с разницей под 8 часов может быть только в десктоп приложениях.
Это ограничение нужно учесть. При построении систем.
В принципе, ничего страшного.
Архитектура всегда компромисс.
Вряд ли у него будут длинные транзакции. Тогда второй проход джоба заберет эту сущность.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003307
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

Время между вставкой и коммитом с разницей под 8 часов

А какая разница с точки зрения написания программы, между "разницей под 8 часов", "разницей под 8 секунд" и "разницей под 8 милисекунд" ?

Я вижу только одну: "разницу под 8 часов" - очень легко тестировать, это плюс
"разницу под 8 милисекунд" - фиг протестируешь и проверишь, это большой минус
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003319
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Время между вставкой и коммитом с разницей под 8 часов может быть только в десктоп приложениях
То что долгих транзакций в вебе не бывает (или непринято, или еще что) - это довольно распространенное заблуждение, распространяемое бракоделами, если исходить из UX, то ничто не мешает нам когда мы хотим обновить пару миллиардов записей пользователю в браузер кидать сообщение, что обновился очередной миллион и он у себя будет наблюдать некий прогресс-бар и видеть что система не зависла, а помимо этого существуют еще фоновые задания, которые вообще ничего про пользователей не знают и там транзакции можно сутками держать, собственно, если исходить из того что разница между вставкой и фиксацией может занимать пару секунд, то ничего не мешает этой разнице занимать и пару часов - разница или есть или ее нет, поэтому ваша компенсация этой разницы в виде:
PetroNotC Sharp
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД
это ни что иное как полная хрень, потому что есть более ровный алгоритм, описанный ранее и работающий в Oracle уже десятки лет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003322
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Хмм.
- если одна сек, то она меньше периода синхронизации БД = 5 мин. Как пример.
То есть вообще не учитывается. Погрешность.
- в ОРМ длинные транзакции не применяются. Тоже можно послать такие клиенты подальше.
Тестировать что? Дайте ТЗ на тест. Райзе ведь не будет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003325
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Вы спутали бизнес транзакцию и физическую.
Хибер и сервлет обычно 0,01сек.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003327
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

>это ни что иное как полная хрень,
= я вашу хрень выше не понял и пруф просил.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003331
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Вы спутали бизнес транзакцию и физическую.
Хибер и сервлет обычно 0,01сек.

вот я пишу:
Код: plsql
1.
2.
3.
begin transaction; // начало запроса
// здесь какая-то логика
commit; // перед отдачей ответа

в каком месте у меня появляется гарантия в 0.01 сек?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003338
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Контейнер сервлетов нормально работает и обеспечивает 0,01сек.
Если вы НЕ СТОПОРИТЕ ПОТОК И НЕ НАГРУЖАЕТЕ ГЛУПЫМ КОДОМ
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003342
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Leonid Kudryavtsev,
Хмм.
- если одна сек, то она меньше периода синхронизации БД = 5 мин. Как пример.
То есть вообще не учитывается. Погрешность.
- в ОРМ длинные транзакции не применяются. Тоже можно послать такие клиенты подальше.
Тестировать что? Дайте ТЗ на тест. Райзе ведь не будет.


Что за ерунда про период синхронизации. А если это одна секунда как раз попала на момент синхронизации:
1. Сторона A сделала INSERT
2. прошло пол секунды
3. Сторона B сделали SELECT * ... WHERE timestamp < prev_timestamp
4. прошло еще пол секунды
5. Сторона A сделала COMMIT, зафиксировала транзакцию

PetroNotC Sharp

select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД

Жуткий велосипед и костыль

1. Кто будет принимать решение, сколько миллисекунд достаточно?
2. Кто будет гарантировать, что эти миллисекунды никогда не будут нарушены?
Как пример:
a) программист на ПРОД базе запустил приложение под отладчиком и кусок кода проходить в пошаговом режиме. Такое конечно плохо, но иногда встречается (банально на ПРОД ошибка есть, на ТЕСТ повторить не удается; ПРОД настолько уникальный, что полноценный TEST даже не сделать /например лично отлаживался на серваке, который физически располагался где-то на Лондонской бирже, аналогичного для TEST никто в Лондон не повезет/).
b) сервир приложения выдал INSERT, ушел в глубокий Hibernate ))), вышел из Hibernate и выдал COMMIT.
Сервер приложения развернут на кластере VM Ware которая умеем себя с на ноду перетаскивать
3.
Т.е. принимающая сторона получит и измененые данные и ряд данных, которые она уже ранее обрабатывала? Т.е. на принимающей стороне должен еще быть не хилый компаратор, который сравнивает пришли новые данные или это старый мусор (который обрабатывать не надо) ?

А если таблиц много и разной структуры.... жуть какая-то. IMHO
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003348
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Вот тут мембер пишет про 2 сек 22205323
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003349
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev

Вариант с простановкой времени вот лично мне совершенно не нравится. Я бы или просто измененные записи помечал, а при репликации убирал флаг (но плохо для производительности и блокировки), либо бы использовал очередь. Очередь хороша еще и тем, что кроме INSERT?/UPDATE, есть еще и DELETE. А при DELETE метку времени банально некуда ставить.

Вот давайте на примере...

допустим мы имеем такую структуру:
- есть книжка, у книжки автор: book(id, title, author_id, modify_date)
- у автора имя: person(id, name)

Есть внешняя система, с которой мы синхронизируем изменения, система хранит данные в виде book(id, title, author_name) и мы какбы об этом знаем. Что должно происходить когда у person меняется name а нам нужно это как-то отправить во внешнюю систему? Варианты видятся следующие:
- пишем лог что у автора изменилось имя, дальше подключается ETL/ELT и начинается написание довольно стремного кода по выяснению где этот person еще участвует. Завтра разработчики системы добавили еще пару таблиц ссылающихся на person и наш ETL/ELT развалился
- в хибере ловим изменения в person и делаем условный update book set modify_date=sysdate - бизнес-логика за рамки приложения не вышла (аргумент типа "мы можем что-то потерять" - никакой не аргумент, я в предыдущем пункте обосновал), однако получаем дополнительную блокировку на обновляемых строках - идея так себе, потому что мы в СУБД изначально имеем возможность организовывать данные таким образом, чтобы где-то избегать конкуренции, а где-то, наоборот, порождать, тут же получается подход как у некоторых имбецилов, которые хранят данные в виде table(id, json) и у них возникает конкуренция на любой чих
- в хибере ловим изменения в person и вместо update делаем insert into book_log(id, change) - бизнес-логика там где и должна быть, блокировок лишних нет.

Leonid Kudryavtsev
В большинстве случаев разломать может потребоваться почти все приложение. Т.к. бизнес-сущность может встречаться в 100500 местах.

Обычно бизнес сущности более-менее мапятся на таблицу(ы). Т.ч. особой костыльности лично я не вижу. К тому же, задача репликации обычно более системная, чем прикладная. И переусложнять прикладной софт системными задачами, которые легко решить на уровне БД (триггер), тоже особого смысла нет.

Вопрос изначально был не про репликацию, а про бизнес-события.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003351
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Андрей Панфилов,
Контейнер сервлетов нормально работает и обеспечивает 0,01сек.
Если вы НЕ СТОПОРИТЕ ПОТОК И НЕ НАГРУЖАЕТЕ ГЛУПЫМ КОДОМ


1. Сервер может работать под нагрузкой
2. В Java есть чудо опция Garbage Collection, для которой 0,01 сек - это вообще ни о чем )))
3. Кроме сервера есть еще и сеть .

и 100500 других причин. по которой 0,01 сек это "ни о чем".
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003354
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Контейнер сервлетов нормально работает и обеспечивает 0,01сек
Какой именно механизм гарантиует, что транзакция будет длиться на 0.01 сек, а не две секунды и не час?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003369
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
PetroNotC Sharp
Контейнер сервлетов нормально работает и обеспечивает 0,01сек
Какой именно механизм гарантиует, что транзакция будет длиться на 0.01 сек, а не две секунды и не час?
ты должен писать так))))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003371
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
>это ни что иное как полная хрень,
= я вашу хрень выше не понял и пруф просил.
Ну не знаю... вроде алгоритм простой: в лог пишем не текущую дату, а заведомо бОльшую, заведомо бОльшая дата - это как NULL, но по ней еще индекс можно строить, в итоге запрос в духе "дай там, то что еще не видели" будет выглядеть как "select * from .. where dt > last_seen", без каких-то компенсаций, повторных обработок и пр. Кроме этого, его еще можно раскатывать на несколько консамеров, путем сериализации доступа к логу и выставления "dt" в значение даты запуска.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003375
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не готов спорить, т.к. самого предмета спора в общем-то нет

Андрей Панфилов

- пишем лог что у автора изменилось имя, дальше подключается ETL/ELT и начинается написание довольно стремного кода по выяснению где этот person еще участвует. Завтра разработчики системы добавили еще пару таблиц ссылающихся на person и наш ETL/ELT развалился

Не очень понимает, какой код "по выяснению где этот person еще участвует" нужен.
Если хранилище данные нормализованы как в OLTP, реплицируем табличку и все
Если в хранилище данные денормализованы, архитектор/программисты хоторые проектировали хранилища и так должны знать, куда они этот person позасовывали.

Андрей Панфилов

Вопрос изначально был не про репликацию, а про бизнес-события.

Могу судить только по тем системам. с которыми сталкивался

Даже если бизнес-сущности соответствует 100500 таблиц (например Заказ/Order в OeBS: заказ, строки заказа, скидки/наценки, резерв на складе и 100500 связанных сущностей), то обычно, все равно, есть 1-2 "главные таблицы"

Если нам нужно отслеживать вновь оформленные заказы, то банальный триггер на ORDERS который будет следить за изменением поля Status с "Заказ оформляется" на "Заказ подтвержден".

Если счета в CC&B (Hibernate, Java, Cobol), то аналогично. Большинство действий со счетом автоматически будут менять и саму запись CI_BILLS.

Т.е. отследить бизнес-события наблюдая за не большим набором таблиц - проблем нет.

Ну и хорошо, если приложение разрабатывает одна команда. А если сорцов нет? Или с СУБД может работать сразу несколько приложений разрабатываемыми разными людьми?
(Основная система в офисе, Личный кабинет в I-net, интеграция с платежными системами которые инсертят данные из Сбера и т.к. и т.п.)

Т.ч. называть триггера "откровенные костыли" IMHO перебор ))) Вполне нормальное, древнее, проверенно и работоспособное решение. В ряде случаев - единственное доступное.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003383
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
+1
Есть бд и бд- центристкие решения. Она главная и все нормализовано.
И есть трехзвенки в полный рост где нет триггеров.
Все работает и там и там.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003423
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
реплицируем...
OeBS...
Могу поспорить, что в этом OeBS (тут вроде даже не знают как слово suite читается ) какой-нить org chart представлен не меньше чем десятком таблиц, а может и двумя десятками, так вот в ИС, у которой org chart - это не основная функциональность, нужно из этого десятка таблиц только штуки 3-4, причем уже в другой структуре, а не так как это давным-давно увидели индусы из оракла, к тому же вопрос с репликацией уже был раскрыт здесь
Leonid Kudryavtsev
Т.ч. называть триггера "откровенные костыли" IMHO перебор ))) Вполне нормальное, древнее, проверенно и работоспособное решение. В ряде случаев - единственное доступное.
Это уже в духе предыдущего оратора про RPC через очереди сообщений: "пофиг что оно медленно, у кого-то же работает". То что бывают ситуации когда иначе никак (другими словами: архитекторы ИС не предусмотрели отправку событий/запись журнала по основным бизнес-сущностям, а те кто систему сопровождает/интегрируется за десяток лет так и не удосужились написать фиче-реквест), совершенно не означает что в реальности всегда нужно так делать, в особенности когда есть более другие способы.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009491
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коллеги, вопрос. тут всё про то же самое - поллинг апдейтов и триггеры )
тут кто-то упомянул что можно не в лог-таблицу апдейты сладывать а выгребать по скажем, полю апдейтед (обновляем строку в таблице, обновляется поле апдейтед, выгребаем по полю).

собссно вопрос следующий, понятно что выгребать по таймстампу от сих до сих. тут кто то упомянул опцию что не надо сохранять последние выгребленные данные и можно как то так знать смещение.. вопрос.. как? я вижу что мне в любом случае как сервису надо узнать какие последние обновления я ыгребал (скажем, хранить где то в хранилище последний успешный процесс, типа от сих до сих выгребли). можно как то без этого?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009502
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
авторопцию что не надо сохранять последние выгребленные данные и можно как то так знать смещение.. вопрос.. как? я вижу что мне в любом случае как сервису надо узнать какие последние обновления я ыгребал (скажем, хранить где то в хранилище последний успешный процесс, типа от сих до сих выгребли). можно как то без этого?
Может ты сам разберешься, надо сервису знать когда он что выгребал или у него плохо с памятью?
Например, на sql.ru надо знать чтобы подсветить красным новые топики.
Теперь соберись ты и расскажи тебе это зачем.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009514
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
авторопцию что не надо сохранять последние выгребленные данные и можно как то так знать смещение.. вопрос.. как? я вижу что мне в любом случае как сервису надо узнать какие последние обновления я ыгребал (скажем, хранить где то в хранилище последний успешный процесс, типа от сих до сих выгребли). можно как то без этого?

Может ты сам разберешься, надо сервису знать когда он что выгребал или у него плохо с памятью?
Например, на sql.ru надо знать чтобы подсветить красным новые топики.
Теперь соберись ты и расскажи тебе это зачем.
о точно это был ты. и вроде говорил что эт оможн окак то делать без сохранения стейта.

зы. я уже вроде рассказывал выше. нужно просто по набору данных строить индексы в эластике и всё. данные изменились находим соответствующие документы - актуализируем. всё. ну далее сверху обвес по работе с этими индексами. ничего особого.

интегрироваться с сервисом через какой нибудь брокер тема так себе потому что там 100500 мест что шатают базу. кроме того там в целом, не один сервис который шатает эту базу.

итого одно из решений (помимо всяких брось сообщение в кафку при апдейте) -- сделать триггер который логгирует апдейты (создание) записей. поверх этой таблицы стоит сервис, что выгребает все накопившиеся изменения оттуда по таймеру и говорит индексатору положить новые обновить старые нужные документы. второе решение - меняющий значения в бд сервис собссно да шлет мессадж в брокер. за брокером консамеры эти мессаджи соответственно разбирают.
третье решение - вроде ты озвучивал. по полю апдейтед выгребать нужные обновленные записи и говорить об этом сервису который держит эластик индекс ап ту дейт.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009524
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
о точно это был ты. и вроде говорил что эт оможн окак то делать без сохранения стейта

я говорил что сервисы не тупые а умные.
И не могу представить себе что он не помнит вообще ничего.
авторитого одно из решений (помимо всяких брось сообщение в кафку при апдейте) -- сделать триггер который логгирует апдейты
Мы по кругу пошли?
Я говорил про поле с меткой времени и JOB раз в минуту обнаруживает все изменения. Далее делай что хочешь.
Сколько можно про одно и то же?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009530
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT
о точно это был ты. и вроде говорил что эт оможн окак то делать без сохранения стейта

я говорил что сервисы не тупые а умные.
И не могу представить себе что он не помнит вообще ничего.
авторитого одно из решений (помимо всяких брось сообщение в кафку при апдейте) -- сделать триггер который логгирует апдейты

Мы по кругу пошли?
Я говорил про поле с меткой времени и JOB раз в минуту обнаруживает все изменения. Далее делай что хочешь.
Сколько можно про одно и то же?
допустим, есть поле с меткой по времени. сервису последний промежуток времени по которому проверял надо хранить? (ну или последнюю точку проверки как минимум). мне что то показалось ты показал решение когда этого не надо.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009532
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
сервису последний промежуток времени по которому проверял надо хранить?

Зачем?
Сервис умный. Решил проверять каждую минуту. Поставил будильник и ....проверяет.
Это сложно запрограммировать?
"Промежуток времени запоминает таймер" (с)
Не догадался?
)))))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009534
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Сервис упал. И не проверял час-два-три. Дальше?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009547
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
PetroNotC Sharp,

Сервис упал. И не проверял час-два-три. Дальше?
наконец то начал диалог по БЛ.
Если так, тогда мы городим Очередь с гарантированной доставкой
- доп поле флаг в БД "Отправлено"
- меняет его JOB только для одного сервиса - "Очередь доставки / почтальон"
- если почтальон заболел, то JOB после больничного даст ему мешок писем.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009548
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При желании, свои больничные листы сервис может хранить у себя.
См. выше - сервис не тупой!
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009549
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Ну и последнее.
Подумай и скажи. Как миллион пользователей (сервисов) заходя на sql.ru узнают что некоторые топики с новым контентом?.
И о боже! Они бывают после перезагрузки заходят. И после больничного.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009558
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT
PetroNotC Sharp,

Сервис упал. И не проверял час-два-три. Дальше?
наконец то начал диалог по БЛ.
Если так, тогда мы городим Очередь с гарантированной доставкой
- доп поле флаг в БД "Отправлено"
- меняет его JOB только для одного сервиса - "Очередь доставки / почтальон"
- если почтальон заболел, то JOB после больничного даст ему мешок писем.

То есть мне еще и апдейты готовить в БД? Спасибо, не очень. Проще где нибудь в уме держать последнюю точку синхронизации
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009559
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Ну и последнее.
Подумай и скажи. Как миллион пользователей (сервисов) заходя на sql.ru узнают что некоторые топики с новым контентом?.
И о боже! Они бывают после перезагрузки заходят. И после больничного.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009573
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
То есть мне еще и апдейты готовить в БД?
Апдейты и ставить галку может сам JOB когда успешно отправит инфу. Связь ведь может быть с квитанцией или синхронная.
Н у а второй вариант как sql_ru.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40015821
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Это уже в духе предыдущего оратора про RPC через очереди сообщений: "пофиг что оно медленно, у кого-то же работает".

Сделай на своём хттп exchange и прочие routing keys, у тебя конечно же всё заработает со скоростью 100500000000 rqs на китайском роутере.

inb4: кококо. нинужна.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40015823
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Я говорил про поле с меткой времени и JOB раз в минуту обнаруживает все изменения.

Это пока запрос тупой и отрабатывает за минуту.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40015826
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Как миллион пользователей (сервисов) заходя на sql.ru узнают что некоторые топики с новым контентом?

Кстати, уведомления тут сделаны абы-как. Сделать уведомления при ответе на сообщение так невозможно.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40015827
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
есть еще и DELETE

На ответсвеных данных не делают update/delete. Надо знать, что там было раньше, как, кто и когда это поменял.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40015831
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

Нафиг ты топик поднял.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40015871
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
crutchmaster,

Нафиг ты топик поднял.


Наверное вышел новый релиз у хипстерского дермища и теперь у него throughput выше на пару сообщений в секунду
...
Рейтинг: 0 / 0
265 сообщений из 265, показаны все 11 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]