powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужны фичи servlet 3.0/3.1 ?
98 сообщений из 98, показаны все 4 страниц
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431591
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я понял эти фичи пришли в мир сервлетов благодаря java nio.

Почитав про nio ощущение сложилось следующее, что главная фича это то, что написав write/read мы не блокируемся(наверное внутри есть тред пул, куда эти задачи запихиаются и исполняются по мере возможности)



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

НУ и API у этого nio максимально запутанное какое-то. Как будто пытались написать так, чтобы было непонятно. Но это ладно, это к вопросу не относится.

Удобочитаемое API к NIO, говорят, это netty, на котором, как мы выяснили в соседнем топике, работает play.


Теперь к вопросу:
Объясните такую вещь

Код: java
1.
2.
3.
4.
5.
doGet(....){
    
    //logic    
    //write result to response
}




Понятно, что тред не может быть переиспользован ибо операции выполняется в одном потоке, а внутри логики может быть какое-то io, которое вообще замедлит нашу программу.
Говорят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков.

Как я понял статейки, что я читал в новых сервлетах будет работать типа такого:


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Autowired 
ThreadPoolExecutor executor

doGet(....){
    executor.submit( new Runnable() {
          //logic    
          //write result to response
    }
}



Я понимаю, что скорее всего это как-то не так работает ибо то, что я написал ничего не даёт.
Количество потоков будет даже больше, чем в изначальном варианте на 1(как минимум) поток.

Собственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431594
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смешались в кучу люди, кони.... IMHO
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431595
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
questionerГоворят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков.


Тут вот кстати непонтно, почему томкат не может либо расширить себе тред пул, либо ичпользовать тред пул с очередью, куда будут попадать задачи, которые приходят при заполненой очереди
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431597
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил по серверлетам 3.0 почитать, первая ссылка привела на хабр. Где говорят:
1. Появились аннотации
2. "Для поддержки длительных операций добавилась возможность асинхронной работы сервлета"
Откуда топик стартер взял измышления про NIO, мне в упор не ясно.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431602
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerquestionerГоворят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков.


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

Про томкат не помню, а у апача и любых других вменяемых Web и апп серверов (Weblogic) - никаких 200 потоков нет. Их количество задается в файле конфигурации. И AFAIK значение по умолчанию около 10-и worker threads дабы обычно больше и не нужно и вредно )))
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431623
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно.

Если про это не написано на хабре, не значит, что этого нет.

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

Насчёт смешения коней и людей - согласен
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431625
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

http://pro-java.ru/java-dlya-opytnyx/asinxronnye-servlety-java/

вот тут про NIO
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431643
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev AFAIK значение по умолчанию около 10-и worker threads дабы обычно больше и не нужно и вредно )))

по умолчанию maxThreads=200, minSpareThreads=25
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431682
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerвот тут про NIO
Что такое NIO знаю очень хорошо. Портировал _реальный_ проект на NIO (NIO через http://hc.apache.org/ с http://www.simpleframework.org/). Т.ч. все плюсы, минусы и глюки в относительно высоко нагруженной среде (сотни соединений, сервер 24x7 с 40 ядрами) на своей шкуре испытал )))

questionerСобственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно?
Предполагаю тогда, когда нужны функции, которые появились в API 3.0.
Мне кажется, это очевидно.

Список фичь можно посмотреть например тут:
http://www.oracle.com/technetwork/server-storage/ts-5415-159162.pdf
Java™ Servlet 3.0 API: What's new and exciting

Список достаточно большой, что Вам из этого не понятно - я не знаю. При чем здесь NIO, так же не понимаю.

llemingпо умолчанию maxThreads=200, minSpareThreads=25
Ну то есть, как я и говорил, задается параметром.
Что не устраивает ТС, мне не понятно )))

Никогда tomcat в И-нет не открывал. Как в 90-ые приучили настраивать tomcat за apache http, так и настраиваю. Хоть и не знаю /не знал/ ))), чем это правильнее, чем чистый томкат.

Что в Apache HTTP, что в Weblogic кол-во worker threads явно исчисляется десятком или чуть больше. Т.к., по логике и административным документациям, кол-во одновременно работающих threads рекомендуют иметь максимум в 2-а раза большим, чем CPU. Т.ч. 200 одновременно выполняющихся тредов, это только для 100 процессорного сервера ))) или для устройства полного зависания системы в ситуации наподобие случайной DOS-атаки ))).
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431860
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно.
+1
тут закос у ТС на потоки.
Они видятся везде и в любом вопросе).
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431865
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКак я понял статейки, что я читал в новых сервлетах будет работать типа такого:Что за идиотская привычка читать что угодно, кроме документации ?!
Асинхронное API в сервлетах это способ управления взаимодействовать с пулом потоков контейнера в условиях запрета создавать потоки в своём коде.
Асинхронный ввод-вывод - способ дополнительной оптимизации асинхронного API сервлетов. Дополнительный потому, что тип коннектора вашему коду безразличен. Тип коннекторов выбирает пользователь, который развёртывает ваше приложение в своём контейнере.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431870
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner http://pro-java.ru/java-dlya-opytnyx/asinxronnye-servlety-java/
вот тут про NIO... написан всякий бред.
бредятинаАсинхронные сервлеты основываются на ключевом усовершенствовании в HyperText Traпsfer Protocol (НТТР) 1.1, сделавшем возможными постоянные со­единения. В НТТР 1.0 каждое соединение использовалось для отправки и получения только одной пары «запрос/ответ«; в то же время НТТР 1.1 позволяет веб-приложе­ниям поддерживать соединение в активном состоянии и посылать множественные запросы.

При стандартной реализации прикладная часть Java потребовала бы от­дельного потока, постоянно прикрепленного к НТТР-соединению. Однако небло­кирующее API ввода-вывода языка Java (Java Nonblocking I/O, NIO) возвращает между активными запросами потоки «в оборот» благодаря новым возможностям NIO. На сегодняшний день все совместимые со спецификациями Servlet 3.0 веб­ серверы имеют встроенную поддержку Java NIO.
1. Нет ни малейшей связи между постоянными соединениями и асинхронными сервлетами;
2. Никакой из вариантов Servlet API не предоставляет доступа к нижележащему TCP-соединению. Более того, это не предусмотрено даже спецификацией HTTP-протокола;
3. Нет никаких HTTP-соединений. Есть HTTP-запросы.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431895
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно.
+1
тут закос у ТС на потоки.
Они видятся везде и в любом вопросе).

Просветите же про связь NIO и потоков?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431899
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovАсинхронное API в сервлетах это способ управления взаимодействовать с пулом потоков контейнера в условиях запрета создавать потоки в своём коде.

Откуда может взяться такой запрет?
То есть асинхронные сервлеты будут работать в рамках всё тех же 200 потоков?

Basil A. SidorovАсинхронный ввод-вывод - способ дополнительной оптимизации асинхронного API сервлетов. Дополнительный потому, что тип коннектора вашему коду безразличен. Тип коннекторов выбирает пользователь, который развёртывает ваше приложение в своём контейнере.

Что такое коннектор?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431900
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov2. Никакой из вариантов Servlet API не предоставляет доступа к нижележащему TCP-соединению. Более того, это не предусмотрено даже спецификацией HTTP-протокола;
3. Нет никаких HTTP-соединений. Есть HTTP-запросы.

Как же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp.

А как же веб сокеты?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431905
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerТо есть асинхронные сервлеты будут работать в рамках всё тех же 200 управляемых контейнером потоков ( а не самосделанных потоков )?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431909
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerПросветите же про связь NIO и потоков?
вам 2 человека сказали, причём тут NIO и потоки?
Вы опять как мантру: "ну просвятите же...."
ЗЫ
Код: java
1.
@WebServlet(url="/foo" asyncSupported=true)


https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3
там по ссылке есть демка приложения чата.
Ставьте, изучайте, пишите. Где ваш код?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431915
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКак же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp.
А как же веб сокеты?
это OFFTOP
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39431977
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЯ понимаю, что скорее всего это как-то не так работает ибо то, что я написал ничего не даёт.
Количество потоков будет даже больше, чем в изначальном варианте на 1(как минимум) поток.

Собственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно?
Дает. Мы можем быстро освободить worker thread веб сервера.
Позволяет на захватывать системные (веб сервера) ресурсы, которые нам не принадлежат

Кроме того, не обязательно для каждого запроса порождать свой поток. Если несколько запросов может быть обработано одновременно, можно контекст запроса просто сохранить в какой ни будь коллекции и не плодить потоки. (получится или нет, зависит и от реализации Servlet API и разного шаманства)

В статьях используют сочетание "долго работающий запрос", на мой взгляд, это не совсем удачно. Т.к. долго выполняющийся запрос может быть по двум причинам:
1) он просто жрет CPU и что-то считает - тут ничего не поможет ))) кроме HP Super Dom'в )))
2) он не может обработать запрос, т.к. ждет каких-то внешних событий/ресурсов - а вот здесь, асинхронность может помочь очень сильно. IMHO & AFAIK

Сам с асинхронными сервлетами не работал. Но с NIO и обычными сервлетами работал.
IMHO & AFAIK
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432000
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev2) он не может обработать запрос, т.к. ждет каких-то внешних событий/ресурсов - а вот здесь, асинхронность может помочь очень

Когда мы используем асинхронные потоки какой тредпул используется для потоков воркеров? кто его менеджит?

Пускай у нас 200 потоков на томкате и 500 потоков в пуле по воркеров.


итого 700.

Будет ли разница с вариантом если просто в томкате выделить 700 потоков?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432050
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКогда мы используем асинхронные потоки какой тредпул используется для потоков воркеров? кто его менеджит?

не знаю. Не использовал

questionerПускай у нас 200 потоков на томкате и 500 потоков в пуле по воркеров.
итого 700.
Будет ли разница с вариантом если просто в томкате выделить 700 потоков?
Так же не знаю. Думаю разница не сильно большая )))

Другое дело, что проблема не в потоках, а в программисте, который собирается делать такую похабень. Ну и совсем уж не ясно, зачем для такой похабени понадобились асинхронные фичи. Т.к. они и нужны IMHO , что бы кол-во потоков уменьшать (если это возможно)

Если же не получается, то проще томкат/http сконфигурировать на много-много потоков и не забивать себе голову. Я бы еще, архитектурно, поделил бы задачу на два http сервера. Один обычный, один для порнографии с потоками )))
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432069
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerОткуда может взяться такой запрет?Оттуда.
Технически вы можете создавать потоки, если контейнер не работает под диспетчером безопасности. Можете и под диспетчером, если настроите. Но, поскольку контейнер не особо в курсе вашей деятельности, вы можете с легкостью огрести проблем на ровном месте. Оно вам надо?
То есть асинхронные сервлеты будут работать в рамках всё тех же 200 потоков?Дались вам эти двести потоков. Котяра с лёгкостью держит сотни-тысячи подключений. Если, конечно, вопрошающие удосужились почитать документацию.
Асинхронные сервлеты позволяют уменьшить использование ресурсов в некоторых сценариях.
Что такое коннектор?Вы уже реально запарили . Выбираете интересующую вас версию и читаете.
Но архитектура (котяры) от версий не зависит: сервер -> движок -> коннектор -> хост -> контекст.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432070
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут можно предложить два более жизненных сценария:

I

1. HTTP сервер с 10-ом или даже меньше worker threads который обрабатывает обычные/короткие http запросы
2.Длинные или "вялотекущие" HTTP запросы преобразуются в асинхронные и живут в отдельном помойке (путь даже Ваши 690 тредов). Для которых реализован свой велосипедный механизм управление.
Тогда асинхронные запросы, позволяют не портить очередь обработки нормальных запросов и реализовать велосипед для "специфических" случаев.

II,
Например реальная задача. Сервер слушает один источник данных (биржа), откуда приходят котировки (за бабло). У сервера есть свои клиенты-подписчики (несколько десятков/сотня открытых соединений, на самом деле каждое соединение это отдельная подсистема у которой тысячи реальных юзеров-брокеров).

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

В случае NIO:
Каждый подписчик, это просто ОБЪЕКТ s коллекции. Поток слушатель, при получение котировки, проходит по списку подписчиков и помещает данные в очередь клиента (если channel клиента в состояние suspend то он пробуждается), специальный поток ввода-вывода для всех активным channel'ов отсылает данные. Кол-во потоков исчисляется единицами.

Наверное аналогично можно организовать и через асинхронные сервлеты
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432079
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКак же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp.Ключевое слово - "обычно". Если читать спецификацию, то HTTP требует восьмибитный канал и ничего больше.
При минимальных ограничениях, не нарушая ни спецификации, ни семантики, можно реализовать HTTP поверх UDP.А как же веб сокеты?А вебсокеты - изврат, который получается у программистов, не читающих спецификацию. Это работающий изврат, но изврат.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432084
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov]А вебсокеты - изврат, который получается у программистов, не читающих спецификацию. Это работающий изврат, но изврат.
Мне как-то кажется, что у вебсокетов вроде же свое API (в Tomcat'е), которое с subj связано совершенно опосредованно.

Могу ошибаться. Читал год назад, не освоил, в проекте не использовал (руки не дошли)
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432092
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovА вебсокеты - изврат, который получается у программистов, не читающих спецификацию. Это работающий изврат, но изврат.
назвать можно какхочешь, но сейчас идёт поголовное их внедрение....
они очень помогают снизить нагрузку на сервер.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432101
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственный сценарий, в котором необходимы асинхронные сервлеты - "конвейер".
Т.е. ситуация, когда вы принимаете данные клиента и можете выдавать ответ ещё до того, как будет прочитан весь входной поток.
Если пытаться сделать такое без асинхронных сервлетов, то, во-первых, получится головоломный конечный автомат, а во-вторых - он будет ненадёжным. При проблемах на канале связи вся обработка будет зависать на неопределённое время - вплоть до трёх-пяти минут.
В случае асинхронных сервлетов контейнер может штатно создать второй поток исполнения, который позволит "развязать" операции чтения и записи.
Разумеется, логика синхронизации/взаимодействия двух потоков всё равно будет требоваться, но, в большинстве случаев эта логика сведётся к простейшему "подождать, пока клиент не прислал очередную порцию данных".
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432103
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМне как-то кажется, что у вебсокетов вроде же свое API (в Tomcat'е), которое с subj связано совершенно опосредованно.Да, WebSocket API стандартизировано и включено в дистрибутив "обученных" контейнеров. Да, веб-сокеты не связаны напрямую с асинхронностью. Но это отменяет факта извращённости.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432107
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема не столько в web-socket'ах, сколько в попытках скрестить ежа с ужом в современных API

Даже по названию web-SOCKET и HTTP Servlets совершенно разные вещи, идеологически разные. Первое обмен данными по соединению, второе протокол вида запрос-ответ. В классическом, историческом виде. Ну а так, как генетиков сейчас много - все время попадается колючая проволока. Хотя даже и проволока, пусть и колючая, вещь полезная. Асинхронные сервлеты мне кажется из этой же оперы. Выглядит коряво, но поскольку других возможностей в сервел апи нет, спасибо и на этом. IMHO

А.П.Чехов. РевизорЧто там? веревочка? давай и веревочку! и веревочка в дороге пригодится: тележка обломается, или что другое, – подвязать можно
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432114
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЕдинственный сценарий, в котором необходимы асинхронные сервлеты - "конвейер".
Т.е. ситуация, когда вы принимаете данные клиента и можете выдавать ответ ещё до того, как будет прочитан весь входной поток.
Thanks. Возьму на заметку. Частая ситуация. Хотя с проблемами и не сталкивался.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432128
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
асинхронность и предлагает http2.
один из недостатков http/http2 - обязательность "запрос-ответ" и инициатором может быть только клиент
а вот comet прочие и есть "колючая проволока".
что отсутствует у ws.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432138
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяодин из недостатков http/http2 - обязательность "запрос-ответ" и инициатором может быть только клиент

https://en.wikipedia.org/wiki/HTTP/2_Server_Push
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432140
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz https://en.wikipedia.org/wiki/HTTP/2_Server_Push
Понял. Сам дурак.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432168
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВозьму на заметку. Частая ситуация. Хотя с проблемами и не сталкивался.Требуется понимать ограничения
Спецификация HTTP не требует, чтобы клиент мог читать ответ сервера до полной отправки своего запроса. А раз нет требований, то нет и гарантий.
Даже если клиент умеет - нет гарантий, что "где-то посередине" не попадётся какой-нибудь прокси, "который не умеет".
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432172
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяодин из недостатков http/http2 - обязательность "запрос-ответ" и инициатором может быть только клиентТипичный косяк мышления программистов.
Да, только клиент может инициировать (сетевое) подключение к серверу. И это - принципиальное ограничение. Да, http работает в схеме запрос/ответ.
Только всё это никак не означает, что сервер не может инициировать передачу данных на клиента.
Единственная проблема в том, что у такой "инициативной передачи" нет чёткой семантики. Поэтому сделать пару клиент-сервер, для которой "всё будет работать" - можно, а создать спецификацию - нет.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432184
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТолько всё это никак не означает, что сервер не может инициировать передачу данных на клиента.
Единственная проблема в том, что у такой "инициативной передачи" нет чёткой семантики. Поэтому сделать пару клиент-сервер, для которой "всё будет работать" - можно, а создать спецификацию - нет.
но ws и сделано для того чтоб всё упростить и систематизировать.
если в десктопных это решалось, то в браузерах придумали comet и прочие штучки.
раньше подобное реализовалось с помощь флэш.
с появлением ws всё стало очень просто. появился стандарт. и этим всё сказано.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432188
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяс появлением ws всё стало очень просто. появился стандарт. и этим всё сказано.Да ничего этим не сказано.
Кадрирование, которое вводит спецификация веб-сокетов, с точно такими же усилиями делается в рамках HTTP. Даже ещё проще.
Но - "белые парни не умеют прыгать".
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432196
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovКадрирование, которое вводит спецификация веб-сокетов, с точно такими же усилиями делается в рамках HTTP. Даже ещё проще.
Но - "белые парни не умеют прыгать".
да, для "десктопов" - делалось давно. но в браузерах....
счас это приведено к единообразию - серверу одинаково, кто подключается приложение, браузер, приложение на андроиде.(может и на яблоке)
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432199
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяда, для "десктопов" - делалось давно. но в браузерах....Вы так нифига и не поняли.
Для браузера нет никакой разницы.
Веб-сокеты надо было реализовать.
Реализация обработчика для application/web-socket потребовала бы таких же (или даже меньших) усилий.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432210
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВы так нифига и не поняли.
Для браузера нет никакой разницы.
Веб-сокеты надо было реализовать.
Реализация обработчика для application/web-socket потребовала бы таких же (или даже меньших) усилий.

браузер с сервером мог общаться только по протоколу запрос-ответ, либо с использованием cомет и ему подобного извращения, да и то с ограничениями и без таких возможностей как у ws.
стандартного варианта не было.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432214
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадястандартного варианта не было.Ещё раз - "стандартный вариант" не требовал разработки нового протокола. Не требовал и не нуждался в новом протоколе.
Отдельное API - сколько угодно. А вот отдельный протокол надо было отсечь бритвой Оккама.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432217
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovне требовал разработки нового протокола. Не требовал и не нуждался в новом протоколе.
это твоё мнение, с ним я спорить не буду.
мне этот протокол нравится и устраивает, и то что не надо никаких арi, а всё их коробки тоже.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432227
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот только не протокол вам нравится, а API протокола.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432236
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВот только не протокол вам нравится, а API протокола.
да мне по-барабану, главное результат и использование , и там хоть горшком назови....
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432276
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если по барабану - зачем встревать в малопонятные вам вещи?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432282
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЕсли по барабану - зачем встревать в малопонятные вам вещи?
я просто показал разницу в использовании в применении к браузерам
то что работает и применяется всё шире, а не развожу демогогию по поводу и без.
люди придумали и внедрили, наверно не глупее тебя, и не от безделия, даже ишаки присоединились.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432424
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevquestionerпропущено...


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

Про томкат не помню, а у апача и любых других вменяемых Web и апп серверов (Weblogic) - никаких 200 потоков нет. Их количество задается в файле конфигурации. И AFAIK значение по умолчанию около 10-и worker threads дабы обычно больше и не нужно и вредно )))
Дополню - в вебсфере вроде было по умолчанию 10 или 50 потоков в веб пуле (память подводит) НО в зависимости от настроек размер пула при переполнении может увеличиваться до десятикратного : ThreadPoolMaxSize * 10. Так что в экстренной ситуации можно легко получить 100 или 500 потоков. Таймаут потока на сфере по умолчанию около 40 минут, вполне можно запинать сервер за это время.
WorkManager пул для асинхронных задач побольше по умолчанию, кажется 300 потоков.

Из минусов реализации servlet 3.0 async - пул задается в сервлете, программисты начнут пулы плодить в коде без нормального управления ресурсами в админке сервера, управление пулами будет разбросано по приложениям. Теперь представим что у меня кластер серверов, на каждом с десяток приложений и нужно подкрутить размер пула для асинхронных задач. Глобально а не в каждом приложении.

Чтоб было бы правильнее - допилить напильником work manager API (чтоб work listener был подобием AsyncListener из 3.0 и имел доступ к сервлет контексту).
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432664
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Асинхронные сервлеты как раз и созданы для того, чтобы не "плодить пулы потоков в коде".
Поэтому не очень понятно, размер чего и зачем вы собрались крутить?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432704
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovАсинхронные сервлеты как раз и созданы для того, чтобы не "плодить пулы потоков в коде".
Поэтому не очень понятно, размер чего и зачем вы собрались крутить?
Сервера иногда настраивают под задачи и железо.

Хорошо что кастомный пул не требуется по умолчанию но где гарантия что часть программистов не посмотрит примеры кода и не налепит свои пулы (ведь примеры есть, значит можно так делать).

Погуглил и на первой странице вывалились примеры кастомизации async контекста:

https://www.javacodegeeks.com/2013/08/async-servlet-feature-of-servlet-3.html

http://www.journaldev.com/2008/async-servlet-feature-of-servlet-3
Код: java
1.
2.
3.
4.
ThreadPoolExecutor executor = new ThreadPoolExecutor(100, 200, 50000L,
                TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(100));
        servletContextEvent.getServletContext().setAttribute("executor",
                executor);



Если это не кастомные пулы, то мне привиделось.

http://www.byteslounge.com/tutorials/asynchronous-servlets-in-java
Код: java
1.
private final Executor executor = Executors.newFixedThreadPool(PROCESSING_THREAD_COUNT);
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432730
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге у меня сложилось впечатление, что асинхронные сервлеты позволяют экономить на количестве созданных потоков.

В синхронных сервлетах если нам пришла задача мы обязательно создавали поток и он жил столько же сколько и задача.

В асинхронных сервлетах вся информация о запросе сохраняется в asyncContext обеъекте. Который позволяет вытащить всю информацию позже. При этом пока живёт этот context само http соединение держится.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432742
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВ итоге у меня сложилось впечатление, что асинхронные сервлеты позволяют экономить на количестве созданных потоков.

В синхронных сервлетах если нам пришла задача мы обязательно создавали поток и он жил столько же сколько и задача.

В асинхронных сервлетах вся информация о запросе сохраняется в asyncContext обеъекте. Который позволяет вытащить всю информацию позже. При этом пока живёт этот context само http соединение держится.
ещё крупнее вывод:
- самому потоки не создавать (уже понял почему?)
- в 99% ТЗ асинхронность не нужна
- если нужна, то использовать штатно 3.0\3.1 декларативно.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432766
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid unique https://www.javacodegeeks.com/2013/08/async-servlet-feature-of-servlet-3.html Вообще нет собственного пула. То, что разработчик получает информацию о текущем потоке - вообще никак не связано с асинхронными сервлетами.
Хотя за sleep() вместо wait() надо просто выписывать отдельных люлей в любом коде.
http://www.journaldev.com/2008/async-servlet-feature-of-servlet-3
Код: java
1.
ThreadPoolExecutor executor = new ThreadPoolExecutor ...


Если это не кастомные пулы, то мне привиделось.Не привиделось.
Только, опять-таки, этот говнокод никак не связан асинхронностью. Если только тем, что для асинхронных сервлетов это совсем говнокод.

P.S. "И не в нарды, а в префереанс. И не диван, а дачу. И не выиграл, а проиграл".
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432782
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВ итоге у меня сложилось впечатление, что асинхронные сервлеты позволяют экономить на количестве созданных потоков.
В синхронных сервлетах если нам пришла задача мы обязательно создавали поток и он жил столько же сколько и задача.Неверно.
Пулом потоков всегда управляет контейнер. И от (а)синхронности сервлета этот факт не зависит.
API асинхронных сервлетов позволяет явно передать управление вводом-выводом контейнеру, а это, в свою очередь, позволяет разработчику контейнера оптимизировать использование пула потоков в некоторых сценариях.
Типичный такой сценарий - малоактивные клиенты и/или клиенты на медленных каналах связи.
Второй сценарий, наоборот, позволяет сервлету (неявно) запрашивать дополнительные потоки исполнения, что даёт возможность одновременной (параллельной) обработки в сервлете запроса и ответа.

P.S. Соглашусь, что в очень нагруженных системах надо экономить всё, включая потоки, но "меня опять терзают смутные сомнение", что тех, кому эти потоки надо экономить можно пересчитать по пальцам одной руки.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432784
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТолько, опять-таки, этот говнокод никак не связан асинхронностью. Если только тем, что для асинхронных сервлетов это совсем говнокод.

Если можно и не тяжело, киньте ссылку на нормальную доку как нужно

А то даже доки / примеры с oracle.com содержат говно код со своим пулом (((

Заранее благодарен.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432799
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovP.S. Соглашусь, что в очень нагруженных системах надо экономить всё, включая потоки, но "меня опять терзают смутные сомнение", что тех, кому эти потоки надо экономить можно пересчитать по пальцам одной руки.

Видел 40 ядерный сервер под реальной нагрузкой, даже 3-5 тыс. потоков по графикам для него было уже "тяжело". Хотя CPU использовалось процентов на 10-20%. Линух Убунту, куча микросервисов под докером. Тут не столько от нагрузки зависит, сколько еще и от паттерна использования сервера.

Ну и нагрузку не понятно как считать. При должном профессионализме, любую задачу и при любом оборудование можно сделать "очень нагруженной".
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432802
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovquestionerВ итоге у меня сложилось впечатление, что асинхронные сервлеты позволяют экономить на количестве созданных потоков.
В синхронных сервлетах если нам пришла задача мы обязательно создавали поток и он жил столько же сколько и задача.Неверно.
Пулом потоков всегда управляет контейнер. И от (а)синхронности сервлета этот факт не зависит.


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

https://www.javacodegeeks.com/2015/07/understanding-callable-and-spring-deferredresult.html

Скорее всего у него под капотом асинхронные сервлеты.
Basil A. Sidorov
API асинхронных сервлетов позволяет явно передать управление вводом-выводом контейнеру, а это, в свою очередь, позволяет разработчику контейнера оптимизировать использование пула потоков в некоторых сценариях.
Типичный такой сценарий - малоактивные клиенты и/или клиенты на медленных каналах связи.
Второй сценарий, наоборот, позволяет сервлету (неявно) запрашивать дополнительные потоки исполнения, что даёт возможность одновременной (параллельной) обработки в сервлете запроса и ответа.

P.S. Соглашусь, что в очень нагруженных системах надо экономить всё, включая потоки, но "меня опять терзают смутные сомнение", что тех, кому эти потоки надо экономить можно пересчитать по пальцам одной руки.

Но всё таки суть ведь в том, что имеем возможность принять на исполнение задачу от клиента даже если в пуле потоков места нет, а не просто создаём(контейнер-контейнер) поток на каждый запрос.

Вопрос только у меня следующий.

допустим есть 10 потоков томката которые обрабатывают http запросы и пихают их в некоторый внутренний пул. Размер этого пула скажем 500 потоков. Каждая задача это обращение к внешней системе, которая отвечает минуту и ей пофиг на нагрузку.

грубо говоря если к нам пришло сразу 1000 запросов, то мы будем ждать как минимум (1 + constant_overhead) или (2 + constant_overhead) минуты ?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432813
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВидел 40 ядерный сервер под реальной нагрузкой, даже 3-5 тыс. потоков по графикам для него было уже "тяжело". Хотя CPU использовалось процентов на 10-20%. Линух Убунту, куча микросервисов под докером"Вот тут-то вы его и засветили" (ц) старый пошлый анекдот.
JVM хороша тем, что это один процесс и накладные расходы на организацию взаимодействия между потоками - минимальны.
"Куча микросервисов под докером" это куча отдельных процессов и накладные расходы на организацию между процессами - максимальны.

P.S. Для JVM (Java6) на 32-разрядном Windows Server (2x4C/4Гб ОЗУ) "рубежом" были ~1500 потоков.
Сдыхало всё где-то на 3,2 тысячах потоков. Правда в нашем случае было приложение "с родовыми утечками" и система не "хайлоад".
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432818
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсли можно и не тяжело, киньте ссылку на нормальную доку как нужноКогда я переписывал один сервлет (маленький, но с двумя пакостными багами) - даже в голову не пришло создавать собственный пул.
Сервлет, конечно, был синхронный, но мысли создать собственный пул не возникло бы в любом сервлете.
Можно поинтересоваться - в каких задачах рука сама тянется к пистолету?
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432835
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerОк, не мы, а контейнер в общем случае, но можно и свой пул использовать. Вот скажем в спринге есть для этого DefferedResult.
https://www.javacodegeeks.com/2015/07/understanding-callable-and-spring-deferredresult.html
Скорее всего у него под капотом асинхронные сервлеты.Вы совершенно напрасно не читаете документацию на используемые контейнеры.
Конкретно котяра может настраиваться или XML-файлами (предпочтительно) или в коде приложения (встраиваемый контейнер).
SpringBoot использует встраиваемый контейнер. Поэтому, естественно, настройка контейнера делается в коде. Код настраивает всё, включая пулы потоков исполнения.
Теперь я хочу понять, каким образом из этого следует что:
1. Ваше приложение может использовать пул, настроенный для контейнера?
2. Ваше приложение станет асинхронными сервлетом без всяких усилий с вашей стороны?
Но всё таки суть ведь в том, что имеем возможность принять на исполнение задачу от клиента даже если в пуле потоков места нет, а не просто создаём(контейнер-контейнер) поток на каждый запрос.Не можете вы принять задачу на исполнение, если у вас нет ресурсов.
Чтобы убедиться в этом достаточно напустить Apache Bench с большим параллелизмом на умалчиваемую конфигурацию котяры: пока контейнер не расширит пул с минимума до предложенной нагрузки - будете получать отлупы которые отобразятся и в статистике ab и в логе (на консоли) контейнера.
Отлупов будет немного, но они будут.допустим есть 10 потоков томката которые обрабатывают http запросы и пихают их в некоторый внутренний пул. Размер этого пула скажем 500 потоков. Каждая задача это обращение к внешней системе, которая отвечает минуту и ей пофиг на нагрузку.Задлянафига обсуждать конфигурацию, которая явно не соответствует условиям эксплуатации??? Чтобы посмотреть какие ошибки умеет выдавать контейнер? Ну так соберите и посмотрите.
Если у вас ожидается пиковая нагрузка в тысячу клиентов, а время обработки запроса достаточно велико, то коннектор должен быть настроен для приёма тысячи подключений, а пул потоков - для обработки тысячи запросов.
И тут нет предмета для обсуждения.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432838
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovLeonid KudryavtsevЕсли можно и не тяжело, киньте ссылку на нормальную доку как нужноКогда я переписывал один сервлет (маленький, но с двумя пакостными багами) - даже в голову не пришло создавать собственный пул.
Сервлет, конечно, был синхронный, но мысли создать собственный пул не возникло бы в любом сервлете.
Можно поинтересоваться - в каких задачах рука сама тянется к пистолету?
Ваша мысль текла в правильном направлении - не создавать свои пулы в сервлете. Нормальная мысль.

Servlet 3.0 Async это допиленный wrapper по стопам JSR 237 Timer and WorkManager (commonj), в websphere он был штатно, к JBoss его прикручивали с переменным успехом (как и в Томкат ). Добавили ссылку в work event на контекст соединения чтобы работать с servlet response/request объектами.

Полностью ЗА простый асинхронный апи для сервлетов, не пойму только откуда вылезли массовые примеры с кастомными пулами, ведь это всегда было табу в сервлетном коде.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432842
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovJVM хороша тем, что это один процесс и накладные расходы на организацию взаимодействия между потоками - минимальны.

Что за байки?

IMHO & AFAIK в Java уже достаточно давно используются потоки OS. Т.ч. разница Java или C или что-то другое - быть не должно

Может и минимальны, но они есть . А алгоритм работы шедулера операционной системы - вещь вроде и хорошо документированная (на Linux, для Windows полностью не документирована), но разобраться как он реально работает - пол литра не хватит. А если больше пол литра, то лично меня уже вырубает ))) и я засыпаю ))) тут уже не до шедулеров ))) Т.ч. понять, как именно он в __конкретном__ случае работает / не работает / __глючит__ - мне печени не хватает ))) При этом проблема решается быстрее, чем находится точное объяснение, что же именно в системе происходит. AFAIK
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432849
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevBasil A. SidorovТолько, опять-таки, этот говнокод никак не связан асинхронностью. Если только тем, что для асинхронных сервлетов это совсем говнокод.

Если можно и не тяжело, киньте ссылку на нормальную доку как нужно

А то даже доки / примеры с oracle.com содержат говно код со своим пулом (((

Заранее благодарен.
Один из примеров использования асинхронных сервлетов
Преставьте себе клиента который требует достатойно слительного выполнения инициализации на сервере. К примеру, создать какую то среду, скопировать что то и тд. Выполняется задача за 30 секунд к примеру.
Сам клиент тоже жирный js код, который развертывается 15 секунд до готовности.
Клиент начинает инициализацию и посылает на сервер запрос подготовить ему окружение (обработка файлов, запросы какие то и тд), это запрос обрабатывается асинхронно. Клиент быстро получает ответ и продолжает инициализацию.
Через 15 секунд клиент инициализирован и ждет сервер еще 15 секунд, после этого всего готово к работе - всего через 30 секунд от старта.

Без асинхронной обработки клиент инициализируется 15 секунд и ждет сервер 30 секунд, уходит 45 секунд на инициализацию вместо 30 секунд из примера выше. Ускорение в полтора раза.

К примеру, в компании 5000 человек, каждый хотя бы раз в день инициализирует тонкого клиента, экономится 15 сек * 5000 времени в день или почти 21 час, по ставке 50 баксов в час (к примеру), экономится 1000 долларов в день или 350 тыс баксов в год. Хватит сервера обновить (5 серверов по 50 тыс баксов каждый).
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432850
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueПреставьте себе клиента который требует достатойно слительного выполнения инициализации на сервере. К примеру, создать какую то .
пардон за опечатки, клавиатура непривычной формы и без кириллицы...
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432853
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov...И тут нет предмета для обсуждения.
Тут есть предмет для обсуждения. IMHO

Т.к. Вы верно заметили, настройка должна соответствовать планируемой нагрузке и оборудованию.

Если у нас штатно хватает 10 потоков, то настраивая на 1000, мы с большой вероятностью получим не ошибку, а просто полное зависание всей системы и, даже, возможно железа. Например сервера на амазоне, по умолчанию не имеют своп памяти. И если мы своей нагрузкой забьем потоки и память - мы даже через SSH подключится не сможем, что бы сервер перегрузить.

Ситуация вида DoS /Denial of Service / атаки может быть не только из-за русских хаккеров ( TM ) но и из-за случайного стечения неудачных обстоятельств или ошибки.

Basil A. SidorovНе можете вы принять задачу на исполнение, если у вас нет ресурсов.
Неправда ваша.

Выполнить мы ее не можем (ресурсов не хватает), а вот принять на исполнения и пытаться выполнить (безуспешно) - это элементарно и сплошь и рядом такое происходит.

Задача правильно настроенной/спроектированной системы в том и состоит, что бы при превышение максимальной нагрузки, не пытаться выполнять не выполнимые задачи, а сразу же давать отлуп когда нагрузка превышает некоторую заданную. Или по кол-ву work threads или по timeout'ам на исполнение или как-то еще.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432854
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueПреставьте себе клиента
теперь представь что JS клиент по умолчанию асинхронный сам и твой сервер асинхронный нафиг не нужен.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432859
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123uid uniqueПреставьте себе клиента
теперь представь что JS клиент по умолчанию асинхронный сам и твой сервер асинхронный нафиг не нужен.

Сам с чем-то похожим сталкивался и, боюсь, тут может оказаться, что "дьявол кроется в мелочах". IMHO & AFAIK

Я тоже делал бы обычными сервлетами. Первый запрос - вернуть HTML, в секции инициализации на JS (путь даже onLoad) - банальный AJAX запрос на инициализацию. Подводных камней и возможностей словить глюки масса. Т.ч. без вникание в детали задачи, обсуждать и охаевать я бы не стал.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432860
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevIMHO & AFAIK в Java уже достаточно давно используются потоки OS. Т.ч. разница Java или C или что-то другое - быть не должноИменно об этом я говорю. Пока у вас одна JVM (один процесс операционной системы) вы можете навалить любую нагрузку, которую этот процесс выдержит и быть уверенным в том, что затраты на взаимодействие между потоками - минимальны.

Как только у вас появились микросервисы - у вас появилось много отдельных процессов системы. И взаимодействовать они должны по сети. В принципе, по виндой, обмен через локалхост по скорости сравним с обменом через память, но дополнительные накладные расходы никуда не делись.
Как только вы начинаете расселять микросервисы по отдельным контейнером вы добавляете ещё дополнительных расходов.

Конечный результат определяется характером задачи.
Если задачи микросервисов относительно объёмны - накладные расходы контейнеризации останутся приемлимо малыми.
Если задачи "совсем крохотные" - основное время будет съедено межпроцессным взаимодействием.
"Меня опять терзают смутные сомнения", что с этой точки зрения систему никто не анализировал: "когда в моде короткие юбки - не время думать о красоте ног".
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432861
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid unique...

Я имел в виду пример КОДА или доки, т.е. что бы все потоки управлялись апп-сервером.

Просто такого не делал, в какую доку смотреть - не знаю.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432866
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
согласен.
Альтернативы без асинхронности есть. Поэтому пример Прикладной задачи найти трудно.
Ведь для этого контейнер изобрели.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432868
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсли у нас штатно хватает 10 потоков, то настраивая на 1000, мы с большой вероятностью получим не ошибку, а просто полное зависание всей системы и, даже, возможно железа.Такой сценарий, разумеется нельзя исключить.
"Но есть ньюанс".
1. Плох тот сисадмин, который не знает возможности своего железа;
2. Если всё настолько плохо, что сдыхает уже на начальном этапе, когда потоки практически не потребляют ресурсов, возникает резонный вопрос что лучше:
2а - огрестись при старте приложения, когда других проблем ещё нет
или
2б - огрести проблему в часы наибольшей нагрузки, когда есть риск, что мы уже начали рвать волосы на разных местах
?Ситуация вида DoS /Denial of Service / атаки может быть не только из-за русских хаккеров ( TM ) но и из-за случайного стечения неудачных обстоятельств или ошибки.Вот поэтому ~примерно третий вариант моей реализации сервлета содержал код управления ресурсами. Причём, поразмыслив, я отверг оптимистичную стратегию и реализовал пессимистичную.Выполнить мы ее не можем (ресурсов не хватает), а вот принять на исполнения и пытаться выполнить (безуспешно) - это элементарно и сплошь и рядом такое происходит.Именно это и является ошибкой.
Если вы быстро и корректно дали дуба, то балансировщик, за которым вы, скорее всего, находитесь сможет "принять меры". А это, в свою очередь исключит ситуации, когда пользователи уже рвут и мечут, а вы ещё не понимаете, что проблемы уже начались.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432871
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123uid uniqueПреставьте себе клиента
теперь представь что JS клиент по умолчанию асинхронный сам и твой сервер асинхронный нафиг не нужен.
Теперь представь что задание выполняется больше чем http timeout на клиенте... Или клиент недорос до ECMAScript 5 (IE 6, 8 к примеру). Сервлеты начали писать намного раньше чем возникли новомодные js фреймворки и асинхронные обработки на клиенте. Писал примерно в 2007м асинхронную библиотеку под IE 6, для киоска, но там просто было так как IEHost использовался и пинки шли из внешнего кода на С# .NET прямо на js метод. До сих пор этот киоск работает во всех терминалах одного аэропорта, когда прилетаю, вспоминаю о нем. ;-)

Не всегда код делается с нуля. Могут попросить улучшить / ускорить существующий код (немаленького размера).
Сидишь, представляешь себе как могло бы быть а реальность отличается от мира фантазий; у многих корпоративных клиентов очень консервативная политика обновлений java, серверов, баз данных и браузеров. Скажут обеспечить совместимость с IE 8 (хорошо что не 6) и будь добр обеспечь.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432879
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Там не было взаимодействий между микросервисами.

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

Вхаимодействовали исключительно по сети с другими серверными (с другими континентами\)

В реальности проблема действительно была в ЭТОМ. Вы сразу место ее возникновение верно определили ))) Но проблема была не в коде / архитектуре, а банально:
много микро-сервисов + много ядер + докер + шедулер + Numa + java + дебильные настройки JVM по умолчанию = глюки

Но факт остается фактом, при многих потоков на машине (5-15 тыс) - накладные ресурсы на переключение зашкаливали. Если по системной статистике время ожидание в очереди на выполнение красное, то можно бороться:
1. или еще более мощная железка
2. или на уровне конфигурации ОС. Например в данном случае, можно было бы ручками выдать affinity по процессорам и NUMA-узлам. Думаю, ОС бы сильно полегчало.
3. или програмно. Например перейти на NIO, уменьшить кол-во потоков в системе на порядок.
Ну, или IMHO оптимально все вместе. Что и было сделано. Правда частично. Переписана программа, изменены настройки JVM, выданы рекомендации админам (которые записали, но решили их не внедрять)

IMHO

p.s. Ну и паттерн нагрузки специфический. Спим, спим, проснулись и много работы для многих потоках. По статистики вроде особо сильной миграции потоков между ядрами и Numa-узлами было не видно, но на деле, подозреваю что она вносила свой вклад (не настолько хорошо умею читать статистику шедулера, аномалии видел, но конкретно разобраться что к ним привело - не стал, а средства мониторинга/профилирования уровня Intel VTune ставить на боевой сервер я не решился)
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432888
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЕсли вы быстро и корректно дали дуба, то балансировщик, за которым вы, скорее всего, находитесь сможет "принять меры". А это, в свою очередь исключит ситуации, когда пользователи уже рвут и мечут, а вы ещё не понимаете, что проблемы уже начались.
Корректно дать дуба - это выдать ошибку "Нет ресурсов".

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

Задать "нормальные" timeout'ы не всегда реально, что делать в том случае, если большинство запросов у нас выполняется 0,05 секунды, но изредка, по бизнес-правилам, могут быть запросы которые выполняются минуты и даже десятки минут. По хорошему, нужно бы разделить эти две группы запросов и настроить им разные timeout'ы, но не всегда это осмысленно и возможно. Т.ч. IMHO ошибка timeout имеет право на жизнь, но лучше до нее не доводить.

В общем, мы друг друга поняли ))) А дальше начинаем говорить об одном и том же, но разными словами )))
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432893
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, я помню это обсуждение.
Но вот лично я о NUMA системах знаю, только что они существуют и что для них есть дополнительные особенности. Как минимум - "доступ в чужую память".

Тем не менее.
1. Докер может быть лёгковесным средством изоляции процессов друг от друга в рамках физического хоста. Т.е. это вопрос организации безопасной среды исполнения с разграничением доступа;
2. Микросервисы или монолит - всё равно остаётся предметом для обсуждения.

Точнее так.
Если ваше железо справится с планируемой нагрузкой в любом варианте - делайте как удобнее.
Я не вижу плюсов у микросервисов, но это мои личные тараканы.
Если требуется "последний дюйм" без модернизации железа и среды исполнения, то монолит становится вполне реальным вариантом - модульность и компонентность ничуть ни хуже микросервисных. Меняются только стратегии развёртывания и администрирования.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432905
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueСервлеты начали писать намного раньше чем возникли новомодные js фреймворки и
асинхронные обработки на клиенте
шутка?
Я вот не помню когда JS был не асинхронный))
А пример с 2-х минутным запросом обсуждали. Делается Заявка.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432909
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevТ.ч. IMHO ошибка timeout имеет право на жизнь, но лучше до нее не доводить.Я отказался от ожидания освобождения ресурсов во втором варианте своего сервлета.
Мотивировка очень проста. С тайм-аутом, при нагрузках близких к пиковым, но ещё не предельным, всё больше клиентов будут сначала ждать и только потом получать или ответ или ошибку.
Это плохо тем, что для клиентов "система уже зависла", а для нас "пока всё в порядке".
Т.к. нехватка клиентского пула протоколировалась предупреждением - админ сразу видел, в чём дело и мог или увеличить размер пула или начать разбираться почему запросы клиентов стали дольше обрабатываться.

Есть, конечно, ньюансы, связанные с разными типами клиентов, но в моём случае запросы от клиентов шли весьма часто и при задержках ответов - интерфейс клиента переставал отвечать на действия пользователя. Это, конечно, косяк клиента (толстое приложение), но проще всего было разрулить проблему моментальной выдачей ошибки с сервера.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432913
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЯ не вижу плюсов у микросервисов, но это мои личные тараканы.
Если требуется "последний дюйм" без модернизации железа и среды исполнения, то монолит становится вполне реальным вариантом - модульность и компонентность ничуть ни хуже микросервисных. Меняются только стратегии развёртывания и администрирования.
Микро сервисы имеют свои плюсы.
Любое мало мальски значимое изменение в большом приложении oзначает регрессионное тестирование, путь от DEV до PROD может легко занять полгода.

Бывает что в одном приложении в веб контейнере тяжело подружить тяжелые несовместимые версии библиотек.
Писать плагины для веб приложения это гемморой (велосипед, хотя можно написать) а упаковывать несколько war в еаr, иметь шаманские пляски с бубном, выясняя какие библиотеки не так грузятся и тд это гемморой. Особенно гемморой когда пишешь продукт под (Боже упаси) 3 - 4 сервера и хотя бы пару версий под каждый.

Еще накладываются баги на самом сервере. Собирается большой запутанный комок. Для обычных java приложений сто лет как пишу плагины - сервисы не нужны. Кому нужна кастомизация на проектах у клиентов, подкладывает свой плагин.

С микросервисами попроще обновлять и расширять, модильный подход но на уровне приложений а не компоненты в одном пакете.
Поставил сервисы, связал их с основным приложением и расширяй меняй отдельные сервисы, меньше времени уходит на согласования и тестирование.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432921
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
микросервисы вроде не имеют отношения к сабжу.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432930
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123uid uniqueСервлеты начали писать намного раньше чем возникли новомодные js фреймворки и
асинхронные обработки на клиенте
шутка?
Я вот не помню когда JS был не асинхронный))
А пример с 2-х минутным запросом обсуждали. Делается Заявка.
Ajax появился в 2004, массово пошел примерно в 2007, в IE до IE7 он не использовался (корпоративные клиенты массово сидят на IE).
В 2012 еще выкорчевывали IE6 изо всех сил у клиентов.

У меня первое приложение с использованием Java на сервере было написано в 2000-м, но тогда он него отмахнулись, сказали на С быстрее, продолжим на нем писать (приложение было на CGI на апаче сервере).
Довольно долго писал апплеты на Java и J++ (для винды из за лучшего UI под виндой чем у Sun Java), на js делались совсем не такие приложения как сейчас (и не так легко).

Не особо отслеживаю последние веяния от ECMAScript, но как помню js интерпретатор был однопоточным и даже при использовании HTML5 web worker API куча ограничений на доступ к объектам (вроде только с тексом работа, нет?)
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432932
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Хоть NUMA, хоть не Numa. Проблемы при переключении потоков (и процессов) одни и те же.

Предположим, что планировшик тупо выполняет ожидающий поток на случайном процессоре. Если у нас двух-сокетный сервер, что значит миграция с одного процессора на другой? Как минимум, что у нас пропадет вся информация в кэше. А это может быть сотни килобайт или даже мегабайты кода и данных (!). Т.е. затраты времени на "разогрев" кэша представить можно.

Если у нас 1 процессорная система, то речь только о L1/L2 кэше ядра/хипертрейдинга, L3 будет общий. Если много сокетный ксеон - то все уже значительно хуже. Если же Numa железка, то еще хуже.

Кроме собственно переключения, IMHO есть еще и проблема "объема". Если у нас выполняется 100500 _одинаковых_ и компактных потоков, то как минимум, их код всегда будет в кеше (код у них одинаковый), а как максимум, вполне возможно, что и данные будут переживать переключение

Другое дело, если у нас 5000 потоков совершенно __разного__ типа. То при высокой частоте переключения, вероятность, что наши данные выжили в кэше, становится практически нулевая.

Поэтому AFAIK планировщики содержат сложные алгоритмы, которые стараются минимизировать и переключение потоков и миграцию.

Стараются... но не всегда оптимально и не всегда это им удается. IMHO ну и как любой сложный алгоритм, при определенном паттерне нагрузки, вместо оптимизации можно получить де-оптимизацию. Т.к. создатели шедулера думали, что в 95 % случаев их поведение оптимально, но наш паттерн нагрузки относится как раз к оставшимся 5 %.

В общем, на моем компьютере с 4 ядрами - все работало без проблем, а на реальной железке под реальной нагрузкой, возникали непонятные АНОМАЛИИ (глюки). Когда элементарнейший код (весь код потока в 10 строк!), поток просыпался 20 раз в секунду, выполнял обычный цикл по коллекции в 30 элементов, если в этой коллекции были закрытые объекты, вызывал некую функцию - работал на сервера в СОТНИ раз медленнее (замерялось банальным GetNanoTime)

В общем IMHO "все счастливые сервера похожи друг на друга, а все высоконагруженные сервера высоконагружены по-своему" ( C ) Л.Н.Толствой Анна Каренина в моей интерпретации )))
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432935
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueС микросервисами попроще обновлять и расширять, модильный подход но на уровне приложений а не компоненты в одном пакете.
Поставил сервисы, связал их с основным приложением и расширяй меняй отдельные сервисы, меньше времени уходит на согласования и тестирование.Мы точно одинаково понимаем микросервисы?
Для меня микросервис это нечто, работающее в отдельной JVM и выставляющее наружу какой-нибудь REST или любой другой вариант RPC.

Технически я не вижу проблем изолировать отдельное приложение (контекст сервлет-контейнера) в отдельном jar-нике, который разрабатывается, тестируется и развёртывается отдельно от остальных приложений.
Остаётся "задружить" плохо совместимые версии сторонних библиотек, но в рамках одного приложения такой проблемы быть не должно (или мы что-то не так делаем), а для разных приложений возможны варианты.

Поскольку приложения работают в одной JVM - вместо RPC можно просто вызывать функции одного приложения из другого. Разумеется, возникают ньюансы при работе в кластере, но это вполне решабельно и затрагивает, в основном процесс развёртывания.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432937
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueУ меня первое приложение с использованием Java на сервере было написано в 2000-м, но тогда он него отмахнулись, сказали на С быстрее, продолжим на нем писать (приложение было на CGI на апаче сервере).

Давайте мериться ....

У меня первое было году в 98-99. При этом код на Java был универсальный. Приложение работало как на Апачи, так и просто через Live Connect в браузере ))) доступ к БД через FoxPro ODBC драйвер (+JDBC-ODBC бридж), в общем веб-приложение, без веб сервера.

)))
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432942
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВ общем, на моем компьютере с 4 ядрами - все работало без проблем, а на реальной железке под реальной нагрузкой, возникали непонятные АНОМАЛИИ (глюки). Когда элементарнейший код (весь код потока в 10 строк!), поток просыпался 20 раз в секунду, выполнял обычный цикл по коллекции в 30 элементов, если в этой коллекции были закрытые объекты, вызывал некую функцию - работал на сервера в СОТНИ раз медленнее (замерялось банальным GetNanoTime)

Не нужно забывать об JNI в недрах джавы (что у вас и что на сервере разный код), плюс иногда дубовые решения под нагрузкой работают лучше = тот же atomic сходит с ума (привет от sun.misc.Unsafe) и работает медленее в сотни раз под большой нагрузкой а synchronized нет.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432947
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТехнически я не вижу проблем изолировать отдельное приложение (контекст сервлет-контейнера) в отдельном jar-нике, который разрабатывается, тестируется и развёртывается отдельно от остальных приложений.

А я вообще не понимаю как. В JVM одна из главных проблем - heap. Его никак в рамках апп-сервера между приложениями не изолировать.

Работал с микросервисами, было круто ))). На проде запросто работающие сервисы киляли и деплоили новые версии. Т.к. пофиг. Кильнул сервис, балансир клиентов перебросил на запасной (или через секунду дал ретрай), новая версия подхватилась.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432951
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueНе нужно забывать об JNI в недрах джавы (что у вас и что на сервере разный код)

Там ни JNI, ни Atomic'ов не было. Сами грешили сначало на IOControl.resume, (NIO), потом на Atomic'и и конкарент коллекции. А глюку обнаружили на банальном цикле, по банальному листу, 10-ок строк кода. Никакой логики. Тупо как 3-и копейки.

Какие-то малообъяснимые приколы с ОС-шедулером происходили. "Вылечилось" настройкой JVM.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432960
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДавайте мериться ....

У меня первое было году в 98-99. При этом код на Java был универсальный. Приложение работало как на Апачи, так и просто через Live Connect в браузере ))) доступ к БД через FoxPro ODBC драйвер (+JDBC-ODBC бридж), в общем веб-приложение, без веб сервера.

)))
В 1998м меня java только заинтересовала как потенциально полезная вещь, занимался самообразованием, лепил клиент сервер дома, о production речи не шло. Ее далеко не везде воспринимали всерьез. На Java на полную катушку переключился после 2000го и то периодически пробегали работы на С, С++ (по чуть чуть), была пара жирных проектов на С#.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432962
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА я вообще не понимаю как. В JVM одна из главных проблем - heap. Его никак в рамках апп-сервера между приложениями не изолировать.Куча создаёт проблемы, когда профилирование показывает, что проблемы в куче.
В моём частном случае проблемы были в коде. Начиная со статического блока инициализации (да, в сервлете). Потом был корявый пул собственного розлива и заканчивалось всё банальной ленью с одним try-блоком там, где требовалось три.

Переделывалось всё очень просто:
0. Выкинуты все "глобальности". Вся настройка задавалась в описателях контекста;
1. Общий service() был разбить на отдельные doGet и doPost. Был добавлен и doHead - "для консистентности";
2. Реализованы init() и destroy().
После всех переделок из одного jar-файла можно было развернуть несколько контекстов с разными параметрами. Точно также можно было перезагрузить контекст без перезапуска всего контейнера - хоть для смены параметров, хоть для развёртывания новой версии.

Я понимаю, что у меня был очень простой случай, но, вроде, можно хотя бы попытаться написать сложное приложение правильно.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432971
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovОстаётся "задружить" плохо совместимые версии сторонних библиотек, но в рамках одного приложения такой проблемы быть не должно (или мы что-то не так делаем), а для разных приложений возможны варианты.

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

Самое главное - модификация одного сервиса и тестирование не затрагивает другие сервисы, это большая экономия.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432975
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovКуча создаёт проблемы, когда профилирование показывает, что проблемы в куче.

AFAIK в 90% случаев, куча или не настроена или настроена по принципу "Oracle умный, ему виднее" ( C ) админы базы данных

При этом, в 90% процентов случаев, паттерн нагрузки и требования к настройкам кучи у разных кусков кода / приложений - принципиально разный. Для REST web'а обычно - максимум под eden, минимум под old. А для каких ни будь служб хранения данных (типа in memory хранилища), все под old, пофиг на eden )))

Т.ч. в 85 % случаев, проблемы с настройкой JVM - это куча.

AFAIK по опыту. Разумеется, если в приложение "вечный цикл" и поэтому все стоит колом, то на настройки и кучи и всего остального - глубоко пофиг )))
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432978
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevBasil A. SidorovКуча создаёт проблемы, когда профилирование показывает, что проблемы в куче.

AFAIK в 90% случаев, куча или не настроена или настроена по принципу "Oracle умный, ему виднее" ( C ) админы базы данных

При этом, в 90% процентов случаев, паттерн нагрузки и требования к настройкам кучи у разных кусков кода / приложений - принципиально разный. Для REST web'а обычно - максимум под eden, минимум под old. А для каких ни будь служб хранения данных (типа in memory хранилища), все под old, пофиг на eden )))

Т.ч. в 85 % случаев, проблемы с настройкой JVM - это куча.

AFAIK по опыту. Разумеется, если в приложение "вечный цикл" и поэтому все стоит колом, то на настройки и кучи и всего остального - глубоко пофиг )))
EJB еще дарит сюрпризов массу... к примеру когда нужно на одном сервере в одном приложении подружить 2 версии клиенских библиотек с EJB. Бывают сюрпризы. Проще сделать 2 сервиса.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39432996
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueБиблиотеки бывают очень тяжелые, загрузка одного приложения может наглухо прибить какое нибудь другое приложение на том же сервереВарианты бывают разные. Скажем в нашем случае jar-ники сборки должны были развёртываться в WEB-INF/lib.
Чтение документации показало, что это (мягко говоря) не самый лучший вариант. Соответственно, я разбил сборку на то, что могло находиться в ${catalina.base}/lib и то, что должно было находиться в WEB-INF/lib.
Почти все сторонние библиотеки попали в первую категорию. Дальше должно быть понятно:
1. Сторонние библиотеки обновляются крайне редко и это уменьшало затраты на разбрасывание нового кода по сайтам;
2. Сторонние библиотеки развёртывались до старта приложений, что минимизировало глюки с ojdbc/log4j и уменьшало время развёртывания собственно приложений;
3. Приложение могло развёртываться без перезапуска контейнера, что ранее было просто невозможно. Этим мы почти не пользовались, но наличие возможности лучше её отсутствия
Да, в теории, обо всё этом должен думать разработчик, но на практике сисадмины из программистов - так себе.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39433010
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДавайте мериться ....Крылья... Ноги... Хвосты... detected !!!
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39433021
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЧтение документации показало, что это (мягко говоря) не самый лучший вариант. Соответственно, я разбил сборку на то, что могло находиться в ${catalina.base}/lib и то, что должно было находиться в WEB-INF/lib.

Подобная папка для библиотек разделенных между всеми приложениями есть на всех серверах с которыми сталкивался.
Если конфликтов нет, все хорошо, но выносом библиотек в эту папку можно дров наломать, если выносятся библиотеки кодеков (где доступ к кодеку идет по имени а не по классу из singleton регистра в JDK, получится что мы кодеки обновили для всех приложений включая сервер.

Пока ваше приложение одно на сервере, все хорошо, можно сервер подкручивать исключительно под ваши нужды.
Иногда проще сделать приложение сервером. Простой http сервер входит в JDK a всякие спринг буты на раз два позволяют сделать embedded tomcat или jetty. Старые кастомные решения (к примеру в Jenkins) позволяли собрать war который либо ставился на сервер как веб приложение либо запускался как standalone приложение с сервером внутри. Нужно только добавить свой загрузчик в jar (как это сделано в спринг бут) или в war (то же самое), как в Jenkins.

Другая ситуация когда у клиента жирный сервер, на нем много чего еще есть (и что именно есть, вам не говорится пока жалоб не будет на вас) и вам нужно не только свое запустить но и чужое не поломать (такое же требование к разработчикам других приложений на том же сервере). В этом случае ext/lib трогать не рекомендуется (долгие согласования)
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39433022
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanКрылья... Ноги... Хвосты... detected !!!
+1
вот, заняться нечем как искать где бы применить @async=true
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39433876
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueДругая ситуация когда у клиента жирный сервер, на нем много чего еще есть (и что именно есть, вам не говорится пока жалоб не будет на вас) и вам нужно не только свое запустить но и чужое не поломать (такое же требование к разработчикам других приложений на том же сервере). В этом случае ext/lib трогать не рекомендуется (долгие согласования)

Давно уже есть виртуальные сервера.
Одно приложение - один сервер. Это не проблема.
А сейчас есть модные контейнеры, которые почти как виртуальные сервера, только "легковеснее".
Так что взаимодействие м/у приложениями, это сейчас проблема не программистов, а внедренцев и админов.
Создали на одном сервере приложений "зоопарк" - сами себе злобные буратины. :-)
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39433914
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulТак что взаимодействие м/у приложениями, это сейчас проблема не программистов, а внедренцев и админов.
Создали на одном сервере приложений "зоопарк" - сами себе злобные буратины. :-)
Конечно все так но не всегда проекты строятся с нуля и не всегда мир вертится вокруг хотелок разработчика.
Представьте себе в качестве клиента крупный банк (крупнее Сбера в несколько раз), или крупную страховую контору, вы для них делаете один из кубиков большого паззла, один или два специализированных сервиса или приложение. Или адаптируете свой продукт.

1. У клиента есть инфраструктура и штат поддержки и список имеющихся версий баз данных, серверов приложений и тд. Если у клиента есть Оракл а у вас по умолчанию MS SQL, скорее всего придется перейти на Оракл (и наоборот).
2. Внесение новых решений и технологий сразу порождает вопрос - кто будет заниматься поддержкой. Особенно если технология open source. Либо придется оказывать поддержку вам либо искать другую контору.
3. Согласование, закупка оборудования и тд может занять пару лет а у вас на проект до его запуска к примеру год.

Вы можете работать через компанию прокладку (аггрегатор) потому что вы слишком маленькая компания и у вас недостаточно штата и оборотов для прямой работы с заказчиков (недостаточно покрытия для страхового случая и тд), те вы еще отстегиваете посреднику за прикрытие и доступ к крупному клиенту. В этом случае маневра еще меньше так как прибыльность ниже и работаете на перспективу (иногда в убыток) и будете максимально подстраиваться под заказчика, в этом случае "Сам себе Буратино" отзеркаливается...
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39433927
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueКонечно все так но не всегда проекты строятся с нуля и не всегда мир вертится вокруг хотелок разработчика.
Представьте себе в качестве клиента крупный банк"Узок их круг, страшно далеки они от народа" - дедушка Ленин о декабристах.
Типичная (и массовая) ситуация, когда на одном сервере крутятся несколько потенциально несовместимых web-приложений возникает из-за банальной лени заказчика - он уже всё оплатил и не считает нужным работать со своей инфраструктурой.
"Всё на одного" - одна крайность, "всё по контейнерам (микросервисам)" - другая.
...
Рейтинг: 0 / 0
Зачем нужны фичи servlet 3.0/3.1 ?
    #39434537
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueКонечно все так но не всегда проекты строятся с нуля и не всегда мир вертится вокруг хотелок разработчика.
Представьте себе в качестве клиента крупный банк (крупнее Сбера в несколько раз), или крупную страховую контору, вы для них делаете один из кубиков большого паззла, один или два специализированных сервиса или приложение. Или адаптируете свой продукт.

1. У клиента есть инфраструктура и штат поддержки и список имеющихся версий баз данных, серверов приложений и тд. Если у клиента есть Оракл а у вас по умолчанию MS SQL, скорее всего придется перейти на Оракл (и наоборот).
2. Внесение новых решений и технологий сразу порождает вопрос - кто будет заниматься поддержкой. Особенно если технология open source. Либо придется оказывать поддержку вам либо искать другую контору.
3. Согласование, закупка оборудования и тд может занять пару лет а у вас на проект до его запуска к примеру год.

Вы можете работать через компанию прокладку (аггрегатор) потому что вы слишком маленькая компания и у вас недостаточно штата и оборотов для прямой работы с заказчиков (недостаточно покрытия для страхового случая и тд), те вы еще отстегиваете посреднику за прикрытие и доступ к крупному клиенту. В этом случае маневра еще меньше так как прибыльность ниже и работаете на перспективу (иногда в убыток) и будете максимально подстраиваться под заказчика, в этом случае "Сам себе Буратино" отзеркаливается...

Ох-ох-ох...
Вообще при внедрении или даже развитии какой-то ИС (или приложения) всегда можно пропихнуть аппаратную часть.
Как минимум во всех проектах, в которых я участвовал этот пункт как минимум рассматривался.
Причем предварительно проводился анализ окружения. Что есть и что надо (аппаратная часть).
А дальше уже внедренцы должны были с этим анализом и аргументами обосновать заказчику, что таки оборудование надо докупить.
Или как минимум подумать о виртуализации.
Как минимум лет 10 назад у нас (в Казахстане) пошел массовый переход на виртуальные сервера.
И сейчас это фактически "стандарт".
Причем переносили и "унаследованные" приложения.

Например мне, когда требовалось развернуть небольшой сервис, для какой-нибудь мелочовки (типа обратиться по распианию к определенным сервисам, забрать информацию и положить ее в БД) было проще договориться с админами заказчика на выделение минимальной виртуалки, чтобы моя мелочевка там крутилась.
Причем все естественно оформлялось в виде официальных писем и т.д. РП.
Но обычно перед бумажным прикрытием была договоренность с админами заказчика.

Если же заказчик беден и/или жаден.
То опять же официальное письмо, что работоспособность ИС не гарантирована, т.к. аппаратное обеспечение и окружение не соответствует требованиям.
Такие случаи тоже были...
Но там если что-то "падало", то виноват был "заказчик", но мы всегда "входили в положение" ;-)
...
Рейтинг: 0 / 0
98 сообщений из 98, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужны фичи servlet 3.0/3.1 ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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