Size: a a a

2020 October 26

 P

 ‌‌Gleb Pilipets... in pro.jvm
Я почитал, что для этого используются web sockets или http long polling, но не понимаю, что конкретно мне нужно будет делать, чтобы оно работало, как я написал выше...
источник

И

Иλьямбда in pro.jvm
 ‌‌Gleb Pilipets
Ребят, а как в микросервисной архитектуре реализовать обработку запроса от клиента?

Например, флов такой.
client->s1(initial)->s2|s3|s4->s5|s3->sx(final)->client

s1(initial), sx(final) работают как один микросервис, просто разные endpoints.
s - префикс для микросервиса.

Что в это время происходит с запросом клиента? Ну то есть в случае одного сервера он просто в хендлере сделает всю работу и вернёт ответ, а здесь тогда что?

Нужно как-то понимать, на sx, был ли такой запрос на s1, и если был, то отправить ответ и удалить инфу о запросе, но как это сделать?🤔🤔
А на s1 нужно как-то хранить запросы
А в чём проблема? Можно просто в s1 при обработке запроса от клиеньа сделать запрос на s2, дождаться ответа от s2 и послать его клиенту
источник

И

Иλьямбда in pro.jvm
Разумеется, всё это надо делать асинхронно, чтобы с масштабируемостью всё было хорошо
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Иλьямбда
А в чём проблема? Можно просто в s1 при обработке запроса от клиеньа сделать запрос на s2, дождаться ответа от s2 и послать его клиенту
Ну ответ будет не от s2, а от другого сервиса, например?
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Как такое захендлить
источник

И

Иλьямбда in pro.jvm
 ‌‌Gleb Pilipets
Ну ответ будет не от s2, а от другого сервиса, например?
Не понимаю проблемы. Ну будет, и что с того?
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Иλьямбда
Не понимаю проблемы. Ну будет, и что с того?
Ну s1 будет ожидать ответ от s2, а s2 от s5 и т.д.
А потом это будет разворачиваться в обратную сторону?
Я не хочу висящую цепочку микросервисов.

Я хочу из s1 отправить запрос на микросервис s2 и продолжить работу. Потом в какой-то момент получить ответ от любого другого микросервиса, проверить, что такой запрос был и послать на клиент ответ.
источник

AK

Alexander Komarov in pro.jvm
вам может какой-нить grpc взять, rsocket или вообще через брокер это все обрабатывать?
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Alexander Komarov
вам может какой-нить grpc взять, rsocket или вообще через брокер это все обрабатывать?
Вот и пытаюсь разобраться. До этого не работал с микросервисами просто ))
источник

И

Иλьямбда in pro.jvm
 ‌‌Gleb Pilipets
Ну s1 будет ожидать ответ от s2, а s2 от s5 и т.д.
А потом это будет разворачиваться в обратную сторону?
Я не хочу висящую цепочку микросервисов.

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

 P

 ‌‌Gleb Pilipets... in pro.jvm
Иλьямбда
Ну вообще при висячей цепочке проблем не так много, если у тебя треды не блокируются
Ну если представить большие системы, тот же убер например, то вряд-ли там будут такие цепочки. Вот и хочу понять, как правильно сделать.
источник

DC

Denis Chikanov in pro.jvm
 ‌‌Gleb Pilipets
Ну если представить большие системы, тот же убер например, то вряд-ли там будут такие цепочки. Вот и хочу понять, как правильно сделать.
Ну так всё то же самое, просто надо неблокирующие подходы использовать
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Alexander Komarov
вам может какой-нить grpc взять, rsocket или вообще через брокер это все обрабатывать?
А что позволит сделать брокер, не подскажите? То есть какую проблему решит?
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Denis Chikanov
Ну так всё то же самое, просто надо неблокирующие подходы использовать
Ну сокеты будут заняты на всём пути до получения ответа. Нету смысла просто держать такую цепочку в висящем состоянии, насколько я понимаю
источник

DC

Denis Chikanov in pro.jvm
 ‌‌Gleb Pilipets
А что позволит сделать брокер, не подскажите? То есть какую проблему решит?
Ну все сервисы обмениваются сообщениями через брокер, и респонсы надо будет просто вычитывать по мере появления (а реквесты, соответственно, слать)
источник

И

Иλьямбда in pro.jvm
 ‌‌Gleb Pilipets
А что позволит сделать брокер, не подскажите? То есть какую проблему решит?
Проблему доставки сообщений от одного срвиса другому. Брокеры и надёжную доставку помогают обесечить, и дублирование устранить, и так далее
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Denis Chikanov
Ну все сервисы обмениваются сообщениями через брокер, и респонсы надо будет просто вычитывать по мере появления (а реквесты, соответственно, слать)
А как будет выглядеть флов, что я описывал выше через брокер, Kafka например.

Тип что изменится в логике?🤔🤔

Тип цель такова. Отправить из s1 запрос, и отправить ответ, когда его получит sx.
Путь не интересует
источник

AE

Alexandr Emelyanov in pro.jvm
 ‌‌Gleb Pilipets
Ну сокеты будут заняты на всём пути до получения ответа. Нету смысла просто держать такую цепочку в висящем состоянии, насколько я понимаю
Ну заняты и заняты, не большая беда
источник

GM

Gerr Mes in pro.jvm
опять же если rsocket поверх quic'а - дак даже сокеты не будут заняты и loom сверху :)) какое то светлое будущее приближается :)
источник

DP

Denis Pavlyuchenko in pro.jvm
Gerr Mes
опять же если rsocket поверх quic'а - дак даже сокеты не будут заняты и loom сверху :)) какое то светлое будущее приближается :)
квик поверх io_uring, я надеюсь? Иначе 3 юзера в час не обработать 😄
источник