powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Асинхронное выполнение запросов
14 сообщений из 39, страница 2 из 2
Асинхронное выполнение запросов
    #40111642
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче
Вопрос. Как все-таки возможно подержать запрос в 20 секунд, но при этом не блокировать нить бессмысленной работой? Это вообще возможно?


Реактивщина, например идите в Kotlin и используйте ktor и корутины.
В Спринге тоже что-то такое есть.
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40111644
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,
Я не услышал.
Что КОНКРЕТНО происходит если убрать sleep 20 сек из сервлета и не тормозить ответ клиенту?
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40111645
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev

Нитей жалко? Добавте.

А вы представьте, что у вас тысячи операторов и миллионы (в прямом смысле) клиентов в день. А вы предлагаете добавить нитей. Конечно, это решается добавлением балансировки. Но может просто сделать по нормальному? Насколько выйдет.

Для того, чтобы ни у кого не возникало мыслей, а что тут вообще решать объясню: чат для поддержки клиентов конторы охватывающей всю Россию и несколько сопредельных стран. Т.е. много, очень много клиентов и много операторов call-центра.
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40111649
Щиче
Конструкция: Spring Java-backend + React Front. Фронт трогать нельзя.

Фронт постоянно долбит бэк REST (JAX-RS) запросом. По заданию, которое изменять нельзя, бэк немедленно отдает данные, если они есть. Если нет, то надо 20 секунд держать запрос в подвешенном состоянии.

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

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

вы теорию откройте.
Балансировка - это горизонтальное масштабирование. Это основа веб.
Вы это масштабирование как то противопоставляете. Уничижительно)))
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40111684
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как уже сказали для асинхронщины + spring два самых простых решения:
1) Асинхронные сервлеты (должны на автомате подниматься, если из контроллера возвращать CompletableFuture)
2) WebFlux (или какая-нибудь другая реактовщина)
Второй вариант заставит переписывать кучу кода.
Первый вариант вроде бы проще, но тут к сожалению тоже надо будет понимать, что делаешь и какие блокировки есть в коде. Ибо если там Thread.sleep(20)/блокирущие коннект или что-то типа, то будет все довольно печально

P.S ну и ваще странно, что в 21 века надо писать какой-то чат на лонгпуллингах, а не использовать какое-нибудь готовое решение, без написания кода вообще
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40111724
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче
Leonid Kudryavtsev

Нитей жалко? Добавте.

А вы представьте, что у вас тысячи операторов и миллионы (в прямом смысле) клиентов в день. А вы предлагаете добавить нитей. Конечно, это решается добавлением балансировки. Но может просто сделать по нормальному? Насколько выйдет.


Представил, если БД оракл драйвер только синхронный (для остальных тоже, есть там конечно ассинхронные уже для postgres точно, но статус непонятный можно ли в продакт брать).

Срочно сесть и начать писать ассинхронный драйвер или перевести все на монгу или добавить нитей.

Ну и навскидку проект ассихронных jdbc драйверов похоронил oracle, в пользу project loom, говорят ждите - (ждем).
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40112111
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы.
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40112907
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Напоминает троттлинг. Тут по смыслу долбящего фронта надо уведомлять статусом типа
https://developer.mozilla.org/ru/docs/Web/HTTP/Status/429

Ну и фронт, как хороший лапочка-зайчик должен подождать нужное время Retry-After : x seconds.
Это-ж правильный http-клиент? Не?

И на бэке не надо делать пауз а наоборот как можно быстрее "отпустить" управление.


Два чая этому господину. Правильный термин это rate limiting и реализуется отправкой корректного статуса и обработкой на клиенте. Совет собрать яйца в кулак и переписать фронт от Станислава - тоже правильный.
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40113259
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щиче


Вопрос. Как все-таки возможно подержать запрос в 20 секунд, но при этом не блокировать нить бессмысленной работой? Это вообще возможно?

это называется buzy spin - пускай по циклу чтобы не блокировать
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40113275
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
Щиче


Вопрос. Как все-таки возможно подержать запрос в 20 секунд, но при этом не блокировать нить бессмысленной работой? Это вообще возможно?

это называется buzy spin - пускай по циклу чтобы не блокировать

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

Busy spin это и есть бессмысленная работа, которую ТС хочет избежать
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40113284
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Щиче
Можно подробнее, как его там "мариновать нужное время" не останавливая поток?
Есть FIFO-очередь, в которой находятся объекты, содержащие данные о времени поступления запроса, об инициаторе запроса и ServletResponce, в который надо записать ответ. Эти объекты формирует и помещает в очередь (ваш) обработчик POST-запроса в (вашем) сервлете.
Эту очередь разгребают "совсем отдельные" потоки.
Если для конкретного запроса есть данные - возвращаем их клиенту.
Если данных нет - возвращаем объект обратно в очередь. Для FIFO-очереди это будет "в конец очереди".
Если на очередной итерации обнаруживается, что с момента поступления запроса прошло больше заданного интервала ожидания, а данных всё ещё нет - возвращаем пустой список в качестве ответа.


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

Поставить в конец FIFO, значит обречь себя на неизвестное время извлечения.
То ли процесс зациклится на повторном помещении единственного сообщения в очередь, то ли в обработку оно придет много позже положенных 20 секунд - сие функция длины очереди.
Вариант очереди с приоритетом позволит не просто поставить в очередь, а поставить в порядке планового времени ожидаемого ответа.
Кроме того, по ситуации, ее можно сделать двухструйной, где в одной струе - "нормальные ответы", а в другой отложенные, которые очередь не отдает до наступления назначенного им момента. В последнем случае на высоких нагрузках может потребоваться дополнительное правило, управляющее старшинством обработки "струй" в зависимости от их текущего размера, например.

как-то так мне кажется.
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40113285
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут обычные зеленые потоки нужны, может даже в java допилят их когда-то Как там проект LOOM, жив еще?
...
Рейтинг: 0 / 0
Асинхронное выполнение запросов
    #40113303
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Поставить в конец FIFO, значит обречь себя на неизвестное время извлечения.
Это пофигу, если количество элементов в очереди исчисляется сотнями-тысячами, а поток, извлекающий конкурентов из очереди занят "только распределением".
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Асинхронное выполнение запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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