|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Прочитал вот это вот: https://www.baeldung.com/spring-reactor скачал себе: https://github.com/eugenp/tutorials/tree/master/spring-5-reactive и так и не понял в чём профит от этих Flux и Mono Что значит, что репозиторий должен быть реактивным? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 19:51 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questioner, Классный туториал. Спасибо за ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 20:29 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Sergunkaquestioner, Классный туториал. Спасибо за ссылку. Сарказм? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 01:06 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Может кто на пальцах объяснить зачем это надо? Чем это отличается от асинхронных сервлетов? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 15:52 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Так Баелдунг в начале статьи и пишет Why reactor. А по поводу чем оно отличается от асинхронных сервлетов - я не знаю. Ты расскажи что это такое за сервлеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 19:06 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
maytonТак Баелдунг в начале статьи и пишет Why reactor. А по поводу чем оно отличается от асинхронных сервлетов - я не знаю. Ты расскажи что это такое за сервлеты. Там какая-то вода написана. https://www.baeldung.com/spring-reactor The reactive design pattern is an event-based architecture for asynchronous handling of a large volume of concurrent service requests coming from single or multiple service handlers. And the Spring Reactor project is based on this pattern and has the clear and ambitious goal of building asynchronous, reactive applications on the JVM. Мой перевод: Есть какой-то там паттерн, который помогает строить асинхронные реактивные приложения(что это на самом деле непонятно). Этот паттерн основан на событийной архитектуре для асинхронной обработки большого количества конкурентных запросов к сервисам приходящих от одного или нескольких сервис хэндлеров. Честно, я не особо вкурил, что это значит. По поводу асинхронных сервлетов: Грубо говоря метод контроллера возвращает Future, которую выполнит какой-то другой поток. При этом поток, который слушает запрос - освобождается, но соединение висит и клиент получит ответ только по его выполнению ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 19:47 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questionerПо поводу асинхронных сервлетов: Грубо говоря метод контроллера возвращает Future, которую выполнит какой-то другой поток. При этом поток, который слушает запрос - освобождается, но соединение висит и клиент получит ответ только по его выполнениюсо стороны использования websocket - это велосипед ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 19:50 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questionerЕсть какой-то там паттерн, который помогает строить асинхронные реактивные приложения(что это на самом деле непонятно). Этот паттерн основан на событийной архитектуре для асинхронной обработки большого количества конкурентных запросов к сервисам приходящих от одного или нескольких сервис хэндлеров. Честно, я не особо вкурил, что это значит. Смотри. Если ты делаешь интернет магазин на 5-10 чел. То тебе пофиг какой там будет Реакт или Не-реакт. Ты разницы не заметишь. Но если ты кодишь hi-load. И утебя 10000 Threads висят но ожидании I/O то ... учоные установили что в этом случае лучше "ожидать" это событие по другому. Вот про это и эти рекативные фреймворки. По поводу реактивного сервлета. Не уверен. Надо смотреть. Callable/Future - это просто обёртки которые ничего не делают и просто обладают контрактом. Надо смотреть какой двигатель их двигает. Пользователям Node.JS скорее всего подобные фреймворки не нужны вообще. У них такой I/O изначально был заложен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 20:42 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
вадяquestionerПо поводу асинхронных сервлетов: Грубо говоря метод контроллера возвращает Future, которую выполнит какой-то другой поток. При этом поток, который слушает запрос - освобождается, но соединение висит и клиент получит ответ только по его выполнениюсо стороны использования websocket - это велосипед Тут речь не про сокеты. Хотя клиенту по барабану как внутренняя кухня сервера устроена. Работает то также ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 20:59 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questionermaytonТак Баелдунг в начале статьи и пишет Why reactor. А по поводу чем оно отличается от асинхронных сервлетов - я не знаю. Ты расскажи что это такое за сервлеты. Там какая-то вода написана. https://www.baeldung.com/spring-reactor The reactive design pattern is an event-based architecture for asynchronous handling of a large volume of concurrent service requests coming from single or multiple service handlers. And the Spring Reactor project is based on this pattern and has the clear and ambitious goal of building asynchronous, reactive applications on the JVM. Мой перевод: Есть какой-то там паттерн, который помогает строить асинхронные реактивные приложения(что это на самом деле непонятно). Этот паттерн основан на событийной архитектуре для асинхронной обработки большого количества конкурентных запросов к сервисам приходящих от одного или нескольких сервис хэндлеров. Честно, я не особо вкурил, что это значит. На самом деле Вы правильно перевели, но не поняли прочитанного. Для того, чтоб понять надо видимо прочитать что означает reactive - responsive, scalable, and recilient. Т.е. русским языком ваша апп не падает, маштабируется и эластична (другими словами если шаблон начинает рваться, то автоматически добавляется количество нодов в нашем примере потоков типо) Дальше надо не поленится и глянуть в код (лучше склонировать гитхаб... надеюсь все умеют ) запустить апликуху и посмотреть как дело происходит. В общем идем в https://github.com/eugenp/tutorials/blob/master/spring-reactor/src/main/java/com/baeldung/Config.java смотрим на бин Код: java 1. 2. 3. 4.
Смотрим в коде библиотеки что означает Environment.THREAD_POOL Код: java 1.
Опа-на! Так это всеми нами так горячо любимый пул экзекьютор Надеюсь всем полегчало... хорошего дня коллеги ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 21:23 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
SergunkaОпа-на! Так это всеми нами так горячо любимый пул экзекьютор Надеюсь всем полегчало... хорошего дня коллеги Вопрос для чего это пул используется? Для обработки событий?, если да то обработка блокирующая или нет? вот в чем вопрос. Пользовали этот прореактор еще до spring5 для ассинхронных запросов между микросервисами вместе с retrofit. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 10:53 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
maytonquestionerЕсть какой-то там паттерн, который помогает строить асинхронные реактивные приложения(что это на самом деле непонятно). Этот паттерн основан на событийной архитектуре для асинхронной обработки большого количества конкурентных запросов к сервисам приходящих от одного или нескольких сервис хэндлеров. Честно, я не особо вкурил, что это значит. Смотри. Если ты делаешь интернет магазин на 5-10 чел. То тебе пофиг какой там будет Реакт или Не-реакт. Ты разницы не заметишь. Но если ты кодишь hi-load. И утебя 10000 Threads висят но ожидании I/O то ... учоные установили что в этом случае лучше "ожидать" это событие по другому. Вот про это и эти рекативные фреймворки. По поводу реактивного сервлета. Не уверен. Надо смотреть. Callable/Future - это просто обёртки которые ничего не делают и просто обладают контрактом. Надо смотреть какой двигатель их двигает. Пользователям Node.JS скорее всего подобные фреймворки не нужны вообще. У них такой I/O изначально был заложен. Сервлеты не реактивные, а асинхронные) По поводу реактивных фреймфорков хочется больше конкретики, за счёт чего это всё достигается. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 11:34 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Sergunkaquestionerпропущено... Там какая-то вода написана. пропущено... Мой перевод: Есть какой-то там паттерн, который помогает строить асинхронные реактивные приложения(что это на самом деле непонятно). Этот паттерн основан на событийной архитектуре для асинхронной обработки большого количества конкурентных запросов к сервисам приходящих от одного или нескольких сервис хэндлеров. Честно, я не особо вкурил, что это значит. На самом деле Вы правильно перевели, но не поняли прочитанного. Для того, чтоб понять надо видимо прочитать что означает reactive - responsive, scalable, and recilient. Т.е. русским языком ваша апп не падает, маштабируется и эластична (другими словами если шаблон начинает рваться, то автоматически добавляется количество нодов в нашем примере потоков типо) Дальше надо не поленится и глянуть в код (лучше склонировать гитхаб... надеюсь все умеют ) запустить апликуху и посмотреть как дело происходит. В общем идем в https://github.com/eugenp/tutorials/blob/master/spring-reactor/src/main/java/com/baeldung/Config.java смотрим на бин Код: java 1. 2. 3. 4.
Смотрим в коде библиотеки что означает Environment.THREAD_POOL Код: java 1.
Опа-на! Так это всеми нами так горячо любимый пул экзекьютор Надеюсь всем полегчало... хорошего дня коллеги А зачем тогда база данных должна быть реактивной? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 11:38 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Sergunka, Вот не могу не согласиться - нужно начинать с понимания что такое "реактивное про-е" вообще и для чего оно народу, а не выдергивать "туториал" ( а точнее, рекламный "трейлер" к платному курсу) и требовать публично разжевать. Про "реактор" куча статей и книг, когда освоит - можно переходить к конкретному применению (судя по замечаниям ТС он в принципе не понимает что это и зачем). А то как тут на форуме вэб дизайнер сразу полез проекты на спринге править ибо его "назначили вместо уволившегося джависта" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 11:42 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
давайте конкретику, пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:01 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questionermaytonпропущено... Смотри. Если ты делаешь интернет магазин на 5-10 чел. То тебе пофиг какой там будет Реакт или Не-реакт. Ты разницы не заметишь. Но если ты кодишь hi-load. И утебя 10000 Threads висят но ожидании I/O то ... учоные установили что в этом случае лучше "ожидать" это событие по другому. Вот про это и эти рекативные фреймворки. По поводу реактивного сервлета. Не уверен. Надо смотреть. Callable/Future - это просто обёртки которые ничего не делают и просто обладают контрактом. Надо смотреть какой двигатель их двигает. Пользователям Node.JS скорее всего подобные фреймворки не нужны вообще. У них такой I/O изначально был заложен. Сервлеты не реактивные, а асинхронные) По поводу реактивных фреймфорков хочется больше конкретики, за счёт чего это всё достигается. Корни этой проблемы растут из органзиации процессов операционной системы и I/O. В терминах Java это объяснить скорее всего нельзя. Это уходит во внешний мир железа и операционок. Поэтому чтобы тебе понять конкретику - надо уйти вообще от Java и почитать что нибудь где хард. Язык С, Unix, I/O, select/poll и так далее. Java здесь ничго нового не превносит. Она просто плетётся в хвосте современных approaches в софтостроении для hi-load. Или просто перенимает опыт смежных систем. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:09 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Вот тут пишут про реактивный АПИ к couchbase https://blog.couchbase.com/why-you-should-care-about-reactive-database-access/ Как по мне - профита не много. синхронный вариант: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Реактивный вариант: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Ок. В синхронном варианте мы берем пост, потом первый коммент, второй коммент В реактивном - сначала пост тянем, потом параллельно комменты В синхронном варианте эту логику тоже можно руками написать и сильно не перетрудиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:20 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questioner, наверное потому, что стандартные имплементации jdbc - используют блокирующие стримы.Чтобы добиться асинхронного блокирующего вызова, требуется создать +1 поток. Т.е. - сам вызов базы и основной поток, который будет ждать обращения к базе, потому что оно блокирующее. Это сделать достатчно легко, но в итоге мы получим проблему: -n+1 потоков Если блокирующие потоки(+1 которые все) - живут не долго, ну, наверное, проблемой это не становится. Но как только система нагружается и эти вызовы становятся достаточно длинными, чтобы устроить ад, то об отказустойчивости (которая часть патерна реактивного) говорить не приходится. А так как мы говорим о реактивном чаще в разрезе микросеврисов, каждый из которых запскается в ограниченных ресурсах, то проблема блокирующих потоков как в нехватке ресурсов - всплывает быстро. Я примерно так понимаю проблемы реактивного программирования в разрезе - зачем же реактивные репозитории. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:23 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
реактивно = асинхроннно + что-то. Это так? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:24 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questionerреактивно = асинхроннно + что-то. Это так? надо в голове чуть чуть все сдвинуть. Обычный подход - мы получили данные и мы их обрабатываем . Реактивный подход - мы получим данные и передаем "ссылку" на запрос к данным в дата флоу - последовательность обработчиков. До получения данных мы уже задаем последовательность их обработки.Этот подход дает возможность использовать stateless обработчиков, т.е. все методы, которые должны обраотать данные, гарантированно никакого состояния по итогу обработки хранить не будут. Подобных подход обязывает, чтобы каждый обработчик был не блокирующиим и асинхронным. Надеюсь меня поправят, если я извратил. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:39 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questioner, может быть стоит познакомиться с функциональным программированием. Так проще будет...наверное;) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:40 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Озверинquestioner, наверное потому, что стандартные имплементации jdbc - используют блокирующие стримы.Чтобы добиться асинхронного блокирующего вызова, требуется создать +1 поток. Т.е. - сам вызов базы и основной поток, который будет ждать обращения к базе, потому что оно блокирующее. Это сделать достатчно легко, но в итоге мы получим проблему: -n+1 потоков Если блокирующие потоки(+1 которые все) - живут не долго, ну, наверное, проблемой это не становится. Но как только система нагружается и эти вызовы становятся достаточно длинными, чтобы устроить ад, то об отказустойчивости (которая часть патерна реактивного) говорить не приходится. А так как мы говорим о реактивном чаще в разрезе микросеврисов, каждый из которых запускается в ограниченных ресурсах, то проблема блокирующих потоков как в нехватке ресурсов - всплывает быстро. Я примерно так понимаю проблемы реактивного программирования в разрезе - зачем же реактивные репозитории. Это ж обычная ORM-ная n+1 проблема. Озверинстандартные имплементации jdbc - используют блокирующие стримы на английском стрим как тут будет? (Thread или java-8 Stream или IO stream?) Почему в одном случае поток живёт долго, а в другом не долго? я не понимаю этого Как по мне в обоих случаях надо делать следующее. Thread_1 достаёт сущность Post, идёт по commentId и создаёт Runnable для каждой для доставания коммента и отправляет в экзекутор, делаем волатильную атомик переменную инкремент которой происходит по доставанию коммента и когда счётчик достиг двух - тушим экзекутор, ну и чистим коллекцию если больше двух комментов было подтянуто. ну и кстати тогда мы достанем 2 рандомных коммента, а просят 2 первых. https://blog.couchbase.com/why-you-should-care-about-reactive-database-access/ Now let's say we want to load the first two comments that are published when the blog post is loaded ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:43 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questioner, очепяталсо, не стрим а сокет. Ну стандартная n+1 проблема в orm заключается чуть чуть в другом - неконтроллируем рост обращений к базе, но итог - да, примерно похожий. В одном случае поток живет долго, а в другом нет - потому что в одном случае данные могут запрашиваться\вставляться\обрабатываться - долго, а в другом - нет. Зависит от объема данных, не знаю, вызываемой хранимки, резалтсета и так далее. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:53 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
Озверинquestioner, очепяталсо, не стрим а сокет. Ну стандартная n+1 проблема в orm заключается чуть чуть в другом - неконтроллируем рост обращений к базе, но итог - да, примерно похожий. В одном случае поток живет долго, а в другом нет - потому что в одном случае данные могут запрашиваться\вставляться\обрабатываться - долго, а в другом - нет. Зависит от объема данных, не знаю, вызываемой хранимки, резалтсета и так далее. Хотите сказать, что бывают какие-то волшебные неблокирующие сокеты? Это ведь в любом случае IO и оно может очень не хило тормозить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 13:11 |
|
В чем смысл Webflux из Spring5
|
|||
---|---|---|---|
#18+
questionerХотите сказать, что бывают какие-то волшебные неблокирующие сокеты? Это ведь в любом случае IO и оно может очень не хило тормозить. Сокет - это вообще абстракция. Это просто контракт по которому сетевые пакеты летают туда-сюда и какие хедеры могут прилетать и какие - нет и какое есть состояние с двух сторон. Как оно реализовано - много вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 13:23 |
|
|
start [/forum/topic.php?fid=59&msg=39822720&tid=2121272]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
136ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 233ms |
total: | 478ms |
0 / 0 |