|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Суть использования асинхронных сервлетов в том, что мы можем вернуть DefferedResult(Если работать через spring). Это приводит к тому, что тред томката освобождается после того как мы передали управление в контроллер(если код правильно написать) освобождается и сразу становится свободным для принятия новых запросов. Далее контроллер вызывает сервис, базу в отдельном треде и как только у нас есть ответ, то мы говорим, что досчитали defferedResult и работа передаётся в тред томката. Есть какой-то новый reactive spring webflux https://stackoverflow.com/questions/46606246/spring-mvc-async-vs-spring-webflux/46621923 Я что-то не могу понять в чём принципиальное отличие. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 16:59 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
questioner, Зачем дубль темы? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 17:12 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
servlet 3.1 вполне себе использует NIO https://stackoverflow.com/questions/39802643/java-async-in-servlet-3-0-vs-nio-in-servlet-3-1 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 17:22 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Tomcat 8.5+ поддерживает это всё. https://dzone.com/articles/servlet-31spring-mvc-non-blocking-io Зачем тогда webflux? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 17:25 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
questionerЗачем тогда webflux?а зачем ты подымаешь всё Г. которое на земле валяется? Это хайповое реактивное программирование. Совсем другое по сути. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 17:30 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
PetroNotC SharpquestionerЗачем тогда webflux?а зачем ты подымаешь всё Г. которое на земле валяется? Это хайповое реактивное программирование. Совсем другое по сути. Ты тут чтоб на вентилятор накинуть? Нечего ответить - помолчи. Weblflux построен на servlet 3.1 для томката, так что никакой магии нет. Еще есть Фишечка, что эта либа умеет в рантайме размеры внутренних пулов тюнить ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:36 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
redwhite90Нечего ответить - помолчи.жду твое молчание на Flux<T> ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:53 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
PetroNotC Sharpredwhite90Нечего ответить - помолчи.жду твое молчание на Flux<T> Что? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 19:08 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
questionerСуть использования асинхронных сервлетов в том, что мы можем вернуть DefferedResult(Если работать через spring). Это приводит к тому, что тред томката освобождается после того как мы передали управление в контроллер(если код правильно написать) освобождается и сразу становится свободным для принятия новых запросов. Далее контроллер вызывает сервис, базу в отдельном треде и как только у нас есть ответ, то мы говорим, что досчитали defferedResult и работа передаётся в тред томката.В что что вы описали нет никакого смысла, какая разница между тем, что запрос обрабатывается в http-потоке или в каком-то другом? Разницы нет никакой, а профит появляется только тогда, когда мы умеем обрабатывать отложенные запросы пачками. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 19:19 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
redwhite90PetroNotC Sharpпропущено... жду твое молчание на Flux<T> Что?нечего по теме сказать - молчи. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 19:44 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Андрей ПанфиловquestionerСуть использования асинхронных сервлетов в том, что мы можем вернуть DefferedResult(Если работать через spring). Это приводит к тому, что тред томката освобождается после того как мы передали управление в контроллер(если код правильно написать) освобождается и сразу становится свободным для принятия новых запросов. Далее контроллер вызывает сервис, базу в отдельном треде и как только у нас есть ответ, то мы говорим, что досчитали defferedResult и работа передаётся в тред томката.В что что вы описали нет никакого смысла, какая разница между тем, что запрос обрабатывается в http-потоке или в каком-то другом? Разницы нет никакой, а профит появляется только тогда, когда мы умеем обрабатывать отложенные запросы пачками. Это фича сервлет 3.0. Как я понимаю суть в том, чтобы сервер мог хотя бы принимать запросы даже если он не справляется с нагрузкой, чтобы все потоки контейнера не были заняты. Например в томкате 100 потоков по дефолту и скажем запрос занимает 5 секунд. И к нам прилетает 101-ый запрос В случае 2.5 мы не можем принять запрос вообще, а в случае 3.0 мы спокойно примем запрос и передадим в другой пул с очередью. Если я ошибаюсь - хочу доказательства ибо такое не в одном месте встречал - например тут: https://stackoverflow.com/a/18187372/2674303 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 23:48 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Андрей Панфилов, https://stackoverflow.com/a/3810625/2674303 Вот вообще похожая формулировка вопроса ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 00:02 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
questionerЕсли я ошибаюсь - хочу доказательства ибо такое не в одном месте встречал - например тут: https://stackoverflow.com/a/18187372/2674303 Бгг, доказательств... вы сначала на пальцах попробуйте рассказать каким боком асинхронная обработка будет снимать нагрузку, в первом же приближении нам что "по классике", что "по новомодному" нужно один и тот же объем данных обработать и оснований полагать, что перенос обработки из одного места в другое что-то там может улучшить, нет никаких (есть малосущественный кейс с отдачей контента клиенту, но он решается более другими простыми способами). Вот вы откуда-то выдумали:questionerЭто приводит к тому, что тред томката освобождается после того как мы передали управление в контроллер(если код правильно написать) освобождается и сразу становится свободным для принятия новых запросов.Ну освободили вы поток, что это дало-то? http-клиенту ничего не дало: он как ждал, так и будет продолжать ждать. Какой выигрыш вы получили для сервера? С большой долей вероятности вы наоборот потеряли: пока клиентские запросы висят в очереди они ничего не стоят, а как только вы их "частично обработали" и переложили в другую очередь то по крайней мере на памяти потеряли (плюс к этому контеншн с tcp-стека в лучшем случае на планировщик операционной системы переложили, а в худшем на базу). Думаете что у сервера приложений маленький пул? ну так увеличьте его, какая вам разница какой пул потоков увеличивать-то? Вот вам примеры из интернетов: https://dzone.com/articles/spring-and-servlet-30-asynchronous-processing - мужик все правильно расписал https://plumbr.io/blog/java/how-to-use-asynchronous-servlets-to-improve-performance - а вот это дичь, на которую вы ведетесь: подменили одно выполнение другим и говорим что стало лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 01:23 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Андрей Панфилов, +1 questionerЭто фича сервлет 3.0. Как я понимаю суть в том, Все время суть от вас ускользает. Вы писали хоть одно асинхронное на сервлетах? То которое, крнтейнер не смог, а вы своим кодом смогли? Теория без практики мертва. Опять рассуждаете о DI не написав ни строчки кода в топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 09:23 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Андрей ПанфиловНу освободили вы поток, что это дало-то? OFF/2 В шарпе MS такая парадигма. Потому что у них нет контейнера с потоками и прогеры сами пишут Async через строчку. Типо помогают серверу. Но думаю что скоро перейдут к решению из java. Уж очень муторный код в итоге на бэке. Имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 09:37 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
PetroNotC SharpАндрей Панфилов, +1 questionerЭто фича сервлет 3.0. Как я понимаю суть в том, Все время суть от вас ускользает. Вы писали хоть одно асинхронное на сервлетах? То которое, крнтейнер не смог, а вы своим кодом смогли? Теория без практики мертва. Опять рассуждаете о DI не написав ни строчки кода в топике. Уважаемый(нет), уймись уже. от тебя толку ноль. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 11:17 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
questioner, Почему то каждый, кто пилит код лет 5, или около того считает что может разговаривать про архитектуру. Увы. Это другая область знаний. ДРУГАЯ. Поэтому, мембер, мне не надо отвечать. Разговаривай по теме топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 11:31 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Андрей ПанфиловquestionerЕсли я ошибаюсь - хочу доказательства ибо такое не в одном месте встречал - например тут: https://stackoverflow.com/a/18187372/2674303 Бгг, доказательств... вы сначала на пальцах попробуйте рассказать каким боком асинхронная обработка будет снимать нагрузку, в первом же приближении нам что "по классике", что "по новомодному" нужно один и тот же объем данных обработать и оснований полагать, что перенос обработки из одного места в другое что-то там может улучшить, нет никаких (есть малосущественный кейс с отдачей контента клиенту, но он решается более другими простыми способами). Вот вы откуда-то выдумали:questionerЭто приводит к тому, что тред томката освобождается после того как мы передали управление в контроллер(если код правильно написать) освобождается и сразу становится свободным для принятия новых запросов.Ну освободили вы поток, что это дало-то? http-клиенту ничего не дало: он как ждал, так и будет продолжать ждать. Какой выигрыш вы получили для сервера? С большой долей вероятности вы наоборот потеряли: пока клиентские запросы висят в очереди они ничего не стоят, а как только вы их "частично обработали" и переложили в другую очередь то по крайней мере на памяти потеряли (плюс к этому контеншн с tcp-стека в лучшем случае на планировщик операционной системы переложили, а в худшем на базу). Думаете что у сервера приложений маленький пул? ну так увеличьте его, какая вам разница какой пул потоков увеличивать-то? Вот вам примеры из интернетов: https://dzone.com/articles/spring-and-servlet-30-asynchronous-processing - мужик все правильно расписал https://plumbr.io/blog/java/how-to-use-asynchronous-servlets-to-improve-performance - а вот это дичь, на которую вы ведетесь: подменили одно выполнение другим и говорим что стало лучше нагрузку не снимается, сервер имеет возможность лучше обрабатывать пиковые нагрузки. Я пока Ваши ссылки не читал, но сейчас почитаю. Во первых контролировать тредпул на стороне приложения в любом случае удобнее. Мне не приходилось настраивать пул потоков в томкате, но могу предположить, что это несколько менее гибко, и скорее всего менее удобно. К тому же где гарантия, что все контейнеры это позволяют? Если в томкате 100 потоков и все они сейчас занимаются обработкой запроса, то 101 просто обломится, а не в очередь встанет. В случае с приложением мы можем настроить тредпул с очередью. Ну вот ещё(автор если что ROSSEN STOYANCHEV): https://spring.io/blog/2012/05/07/spring-mvc-3-2-preview-introducing-servlet-3-async-support In some cases you can return to the client immediately while a background job completes processing. For example sending an email, kicking off a database job, and others represent fire-and-forget scenarios that can be handled with Spring's @Async support or by posting an event to a Spring Integration channel and then returning a confirmation id the client can use to query for the results. In other cases, where the result is required, we need to decouple processing from the Servlet container thread or else we'll exhaust its thread pool. Servlet 3 provides just such support where a Servlet (or a Spring MVC controller) can indicate the response should be left open after the Servlet container thread is exited. To achieve this, a Servlet 3 web application can call request.startAsync() and use the returned AsyncContext to continue to write to the response from some other separate thread. At the same time from a client's perspective the request still looks like any other HTTP request-response interaction. It just takes longer to complete. The following is the sequence of events: Client sends a request Servlet container allocates a thread and invokes a servlet in it The servlet calls request.startAsync(), saves the AsyncContext, and returns The container thread is exited all the way but the response remains open Some other thread uses the saved AsyncContext to complete the response Client receives the response https://spring.io/blog/2012/05/07/spring-mvc-3-2-preview-introducing-servlet-3-async-support ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 11:33 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Про очередь конкретно у томката я прогнал, признаю - https://tomcat.apache.org/tomcat-9.0-doc/config/executor.html ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 11:56 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
questionerнагрузку не снимается, сервер имеет возможность лучше обрабатывать пиковые нагрузки.Физика под этим "лучше обрабатывать" какая лежит? Вот мы берем "типичное" приложение и затаскиваем весь говнокод из контроллеров в DefferedResult - в каком месте и из-за чего оно начнет что-то "лучше обрабатывать"? или таки есть специфичные кейсы где мы можем получить неиллюзорный профит а в остальных случаях ничего кроме геморроя не получить? Вы вообще задумывались по какой причине топят за всякие фиберы в жаве и реактивное программирование? почему поток - это плохо? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 12:22 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
Андрей ПанфиловquestionerСуть использования асинхронных сервлетов в том, что мы можем вернуть DefferedResult(Если работать через spring). Это приводит к тому, что тред томката освобождается после того как мы передали управление в контроллер(если код правильно написать) освобождается и сразу становится свободным для принятия новых запросов. Далее контроллер вызывает сервис, базу в отдельном треде и как только у нас есть ответ, то мы говорим, что досчитали defferedResult и работа передаётся в тред томката.В что что вы описали нет никакого смысла, какая разница между тем, что запрос обрабатывается в http-потоке или в каком-то другом? Разницы нет никакой, а профит появляется только тогда, когда мы умеем обрабатывать отложенные запросы пачками. почему нет смысла? а как на счет того, что поток это жирно для ОС(процесс для ОС еще жирнее, к примеру) и мы можем переложить выполнение некоторых задач(чтение-запись файла) на потоки ядра, которые еще сильнее оптимизированы и тоньше. nginx работающий по такому принципу, значительно производительнее apache, который создает потоки для каждого подключения ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 12:33 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
questionerНу вот ещё(автор если что ROSSEN STOYANCHEV): вы у автора уточните. Он беспокоится за оптимизацию бэка или клиента? У клиента при асинхронном программировании методом AJAX и так всё шеколадно. Он ждёт Асинхронно ответ (в разумных пределах таймаута) и его ничего не парит. Ему не нужно сразу возвращать управление(ответ). Поэтому забудьте о клиенте при доказательствах нужности. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 12:37 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
PetroNotC SharpquestionerНу вот ещё(автор если что ROSSEN STOYANCHEV): вы у автора уточните. Он беспокоится за оптимизацию бэка или клиента? У клиента при асинхронном программировании методом AJAX и так всё шеколадно. Он ждёт Асинхронно ответ (в разумных пределах таймаута) и его ничего не парит. Ему не нужно сразу возвращать управление(ответ). Поэтому забудьте о клиенте при доказательствах нужности. Вот неуёмный какой)) не угомониться ему никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 12:40 |
|
Чем асинхронные сервлеты отличаются от Sping WebFlux
|
|||
---|---|---|---|
#18+
сладкий бубалехчто поток это жирно для ОС Контейнер создавали чтобы в прикладном коде программист меньше думал о потоках. Иначе нужны цифры и доказательства. Накладные расходы растут. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 12:40 |
|
|
start [/forum/topic.php?fid=59&fpage=25&tid=2121217]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 247ms |
total: | 412ms |
0 / 0 |