Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем смысл Webflux из Spring5 / 25 сообщений из 28, страница 1 из 2
03.06.2019, 19:51
    #39821924
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Прочитал вот это вот:
https://www.baeldung.com/spring-reactor

скачал себе:

https://github.com/eugenp/tutorials/tree/master/spring-5-reactive

и так и не понял в чём профит от этих Flux и Mono

Что значит, что репозиторий должен быть реактивным?
...
Рейтинг: 0 / 0
03.06.2019, 20:29
    #39821935
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questioner,

Классный туториал. Спасибо за ссылку.
...
Рейтинг: 0 / 0
04.06.2019, 01:06
    #39822014
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Sergunkaquestioner,

Классный туториал. Спасибо за ссылку.

Сарказм?
...
Рейтинг: 0 / 0
04.06.2019, 15:52
    #39822358
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Может кто на пальцах объяснить зачем это надо?

Чем это отличается от асинхронных сервлетов?
...
Рейтинг: 0 / 0
04.06.2019, 19:06
    #39822480
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Так Баелдунг в начале статьи и пишет Why reactor.

А по поводу чем оно отличается от асинхронных сервлетов - я не знаю. Ты расскажи что это такое за сервлеты.
...
Рейтинг: 0 / 0
04.06.2019, 19:47
    #39822506
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
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, которую выполнит какой-то другой поток. При этом поток, который слушает запрос - освобождается, но соединение висит и клиент получит ответ только по его выполнению
...
Рейтинг: 0 / 0
04.06.2019, 19:50
    #39822509
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questionerПо поводу асинхронных сервлетов:
Грубо говоря метод контроллера возвращает Future, которую выполнит какой-то другой поток. При этом поток, который слушает запрос - освобождается, но соединение висит и клиент получит ответ только по его выполнениюсо стороны использования websocket - это велосипед
...
Рейтинг: 0 / 0
04.06.2019, 20:42
    #39822522
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questionerЕсть какой-то там паттерн, который помогает строить асинхронные реактивные приложения(что это на самом деле непонятно).
Этот паттерн основан на событийной архитектуре для асинхронной обработки большого количества конкурентных запросов к сервисам приходящих от одного или нескольких сервис хэндлеров.

Честно, я не особо вкурил, что это значит.

Смотри. Если ты делаешь интернет магазин на 5-10 чел. То тебе пофиг какой там будет Реакт или Не-реакт.
Ты разницы не заметишь. Но если ты кодишь hi-load. И утебя 10000 Threads висят но ожидании I/O то ... учоные
установили что в этом случае лучше "ожидать" это событие по другому. Вот про это и эти рекативные фреймворки.

По поводу реактивного сервлета. Не уверен. Надо смотреть. Callable/Future - это просто обёртки которые
ничего не делают и просто обладают контрактом. Надо смотреть какой двигатель их двигает.

Пользователям Node.JS скорее всего подобные фреймворки не нужны вообще. У них такой I/O изначально был заложен.
...
Рейтинг: 0 / 0
04.06.2019, 20:59
    #39822530
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
вадяquestionerПо поводу асинхронных сервлетов:
Грубо говоря метод контроллера возвращает Future, которую выполнит какой-то другой поток. При этом поток, который слушает запрос - освобождается, но соединение висит и клиент получит ответ только по его выполнениюсо стороны использования websocket - это велосипед

Тут речь не про сокеты. Хотя клиенту по барабану как внутренняя кухня сервера устроена. Работает то также
...
Рейтинг: 0 / 0
04.06.2019, 21:23
    #39822540
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
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.
    @Bean
    EventBus createEventBus(Environment env) {
        return EventBus.create(env, Environment.THREAD_POOL);
    }



Смотрим в коде библиотеки что означает Environment.THREAD_POOL

Код: java
1.
	public static final String THREAD_POOL = "threadPoolExecutor";



Опа-на! Так это всеми нами так горячо любимый пул экзекьютор

Надеюсь всем полегчало... хорошего дня коллеги
...
Рейтинг: 0 / 0
05.06.2019, 10:53
    #39822682
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
SergunkaОпа-на! Так это всеми нами так горячо любимый пул экзекьютор

Надеюсь всем полегчало... хорошего дня коллеги

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


Пользовали этот прореактор еще до spring5 для ассинхронных запросов между микросервисами вместе с retrofit.
...
Рейтинг: 0 / 0
05.06.2019, 11:34
    #39822720
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
maytonquestionerЕсть какой-то там паттерн, который помогает строить асинхронные реактивные приложения(что это на самом деле непонятно).
Этот паттерн основан на событийной архитектуре для асинхронной обработки большого количества конкурентных запросов к сервисам приходящих от одного или нескольких сервис хэндлеров.

Честно, я не особо вкурил, что это значит.

Смотри. Если ты делаешь интернет магазин на 5-10 чел. То тебе пофиг какой там будет Реакт или Не-реакт.
Ты разницы не заметишь. Но если ты кодишь hi-load. И утебя 10000 Threads висят но ожидании I/O то ... учоные
установили что в этом случае лучше "ожидать" это событие по другому. Вот про это и эти рекативные фреймворки.

По поводу реактивного сервлета. Не уверен. Надо смотреть. Callable/Future - это просто обёртки которые
ничего не делают и просто обладают контрактом. Надо смотреть какой двигатель их двигает.

Пользователям Node.JS скорее всего подобные фреймворки не нужны вообще. У них такой I/O изначально был заложен.

Сервлеты не реактивные, а асинхронные)


По поводу реактивных фреймфорков хочется больше конкретики, за счёт чего это всё достигается.
...
Рейтинг: 0 / 0
05.06.2019, 11:38
    #39822722
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
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.
    @Bean
    EventBus createEventBus(Environment env) {
        return EventBus.create(env, Environment.THREAD_POOL);
    }



Смотрим в коде библиотеки что означает Environment.THREAD_POOL

Код: java
1.
	public static final String THREAD_POOL = "threadPoolExecutor";



Опа-на! Так это всеми нами так горячо любимый пул экзекьютор

Надеюсь всем полегчало... хорошего дня коллеги

А зачем тогда база данных должна быть реактивной?
...
Рейтинг: 0 / 0
05.06.2019, 11:42
    #39822727
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Sergunka,
Вот не могу не согласиться - нужно начинать с понимания что такое "реактивное про-е" вообще и для чего оно народу, а не выдергивать "туториал" ( а точнее, рекламный "трейлер" к платному курсу) и требовать публично разжевать. Про "реактор" куча статей и книг, когда освоит - можно переходить к конкретному применению (судя по замечаниям ТС он в принципе не понимает что это и зачем).
А то как тут на форуме вэб дизайнер сразу полез проекты на спринге править ибо его "назначили вместо уволившегося джависта"
...
Рейтинг: 0 / 0
05.06.2019, 12:01
    #39822741
Герой дня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
давайте конкретику, пожалуйста
...
Рейтинг: 0 / 0
05.06.2019, 12:09
    #39822751
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
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. Или просто перенимает опыт смежных систем.
...
Рейтинг: 0 / 0
05.06.2019, 12:20
    #39822759
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Вот тут пишут про реактивный АПИ к 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.
JsonDocument post = bucket.get("post::1");

// Extract the list of comment IDs
JsonArray commentIds = post.content().getArray("comments");

// grab as much comments as needed and add it to the list
List<JsonDocument> comments = new ArrayList<JsonDocument>();
for (int i = 0; i < commentIds.size(); i++) {
	if (comments.size() == 2) {
	    break;
	}
	
	JsonDocument comment = bucket.get(commentIds.getString(i));
	if (comment != null && comment.content().getBoolean("published")) {
	    comments.add(comment);
	}
}


Реактивный вариант:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
List<JsonDocument> comments = bucket
    .async()
    .get("post::1")
    .flatMap(post -> Observable.from(post.content().getArray("comments").toList()))
    .flatMap(commentId -> bucket.async().get((String) commentId))
    .filter(comment -> comment.content().getBoolean("published"))
    .take(2)
    .toList()
    .timeout(2500, TimeUnit.MILLISECONDS)
    .toBlocking()
    .single();



Ок. В синхронном варианте мы берем пост, потом первый коммент, второй коммент

В реактивном - сначала пост тянем, потом параллельно комменты

В синхронном варианте эту логику тоже можно руками написать и сильно не перетрудиться.
...
Рейтинг: 0 / 0
05.06.2019, 12:23
    #39822760
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questioner, наверное потому, что стандартные имплементации jdbc - используют блокирующие стримы.Чтобы добиться асинхронного блокирующего вызова, требуется создать +1 поток. Т.е. - сам вызов базы и основной поток, который будет ждать обращения к базе, потому что оно блокирующее. Это сделать достатчно легко, но в итоге мы получим проблему: -n+1 потоков

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

Я примерно так понимаю проблемы реактивного программирования в разрезе - зачем же реактивные репозитории.
...
Рейтинг: 0 / 0
05.06.2019, 12:24
    #39822762
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
реактивно = асинхроннно + что-то.

Это так?
...
Рейтинг: 0 / 0
05.06.2019, 12:39
    #39822769
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questionerреактивно = асинхроннно + что-то.

Это так?

надо в голове чуть чуть все сдвинуть.
Обычный подход - мы получили данные и мы их обрабатываем .
Реактивный подход - мы получим данные и передаем "ссылку" на запрос к данным в дата флоу - последовательность обработчиков. До получения данных мы уже задаем последовательность их обработки.Этот подход дает возможность использовать stateless обработчиков, т.е. все методы, которые должны обраотать данные, гарантированно никакого состояния по итогу обработки хранить не будут.

Подобных подход обязывает, чтобы каждый обработчик был не блокирующиим и асинхронным.
Надеюсь меня поправят, если я извратил.
...
Рейтинг: 0 / 0
05.06.2019, 12:40
    #39822772
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questioner, может быть стоит познакомиться с функциональным программированием. Так проще будет...наверное;)
...
Рейтинг: 0 / 0
05.06.2019, 12:43
    #39822774
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Озверин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
...
Рейтинг: 0 / 0
05.06.2019, 12:53
    #39822779
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questioner, очепяталсо, не стрим а сокет.

Ну стандартная n+1 проблема в orm заключается чуть чуть в другом - неконтроллируем рост обращений к базе, но итог - да, примерно похожий.

В одном случае поток живет долго, а в другом нет - потому что в одном случае данные могут запрашиваться\вставляться\обрабатываться - долго, а в другом - нет. Зависит от объема данных, не знаю, вызываемой хранимки, резалтсета и так далее.
...
Рейтинг: 0 / 0
05.06.2019, 13:11
    #39822796
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
Озверинquestioner, очепяталсо, не стрим а сокет.

Ну стандартная n+1 проблема в orm заключается чуть чуть в другом - неконтроллируем рост обращений к базе, но итог - да, примерно похожий.

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

Хотите сказать, что бывают какие-то волшебные неблокирующие сокеты?

Это ведь в любом случае IO и оно может очень не хило тормозить.
...
Рейтинг: 0 / 0
05.06.2019, 13:23
    #39822804
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем смысл Webflux из Spring5
questionerХотите сказать, что бывают какие-то волшебные неблокирующие сокеты?

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

Как оно реализовано - много вариантов.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем смысл Webflux из Spring5 / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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