|
|
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerВ итоге у меня сложилось впечатление, что асинхронные сервлеты позволяют экономить на количестве созданных потоков. В синхронных сервлетах если нам пришла задача мы обязательно создавали поток и он жил столько же сколько и задача. В асинхронных сервлетах вся информация о запросе сохраняется в asyncContext обеъекте. Который позволяет вытащить всю информацию позже. При этом пока живёт этот context само http соединение держится. ещё крупнее вывод: - самому потоки не создавать (уже понял почему?) - в 99% ТЗ асинхронность не нужна - если нужна, то использовать штатно 3.0\3.1 декларативно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 11:56 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
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. Если это не кастомные пулы, то мне привиделось.Не привиделось. Только, опять-таки, этот говнокод никак не связан асинхронностью. Если только тем, что для асинхронных сервлетов это совсем говнокод. P.S. "И не в нарды, а в префереанс. И не диван, а дачу. И не выиграл, а проиграл". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:10 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerВ итоге у меня сложилось впечатление, что асинхронные сервлеты позволяют экономить на количестве созданных потоков. В синхронных сервлетах если нам пришла задача мы обязательно создавали поток и он жил столько же сколько и задача.Неверно. Пулом потоков всегда управляет контейнер. И от (а)синхронности сервлета этот факт не зависит. API асинхронных сервлетов позволяет явно передать управление вводом-выводом контейнеру, а это, в свою очередь, позволяет разработчику контейнера оптимизировать использование пула потоков в некоторых сценариях. Типичный такой сценарий - малоактивные клиенты и/или клиенты на медленных каналах связи. Второй сценарий, наоборот, позволяет сервлету (неявно) запрашивать дополнительные потоки исполнения, что даёт возможность одновременной (параллельной) обработки в сервлете запроса и ответа. P.S. Соглашусь, что в очень нагруженных системах надо экономить всё, включая потоки, но "меня опять терзают смутные сомнение", что тех, кому эти потоки надо экономить можно пересчитать по пальцам одной руки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:22 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovТолько, опять-таки, этот говнокод никак не связан асинхронностью. Если только тем, что для асинхронных сервлетов это совсем говнокод. Если можно и не тяжело, киньте ссылку на нормальную доку как нужно А то даже доки / примеры с oracle.com содержат говно код со своим пулом ((( Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:23 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovP.S. Соглашусь, что в очень нагруженных системах надо экономить всё, включая потоки, но "меня опять терзают смутные сомнение", что тех, кому эти потоки надо экономить можно пересчитать по пальцам одной руки. Видел 40 ядерный сервер под реальной нагрузкой, даже 3-5 тыс. потоков по графикам для него было уже "тяжело". Хотя CPU использовалось процентов на 10-20%. Линух Убунту, куча микросервисов под докером. Тут не столько от нагрузки зависит, сколько еще и от паттерна использования сервера. Ну и нагрузку не понятно как считать. При должном профессионализме, любую задачу и при любом оборудование можно сделать "очень нагруженной". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:35 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
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) минуты ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:37 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВидел 40 ядерный сервер под реальной нагрузкой, даже 3-5 тыс. потоков по графикам для него было уже "тяжело". Хотя CPU использовалось процентов на 10-20%. Линух Убунту, куча микросервисов под докером"Вот тут-то вы его и засветили" (ц) старый пошлый анекдот. JVM хороша тем, что это один процесс и накладные расходы на организацию взаимодействия между потоками - минимальны. "Куча микросервисов под докером" это куча отдельных процессов и накладные расходы на организацию между процессами - максимальны. P.S. Для JVM (Java6) на 32-разрядном Windows Server (2x4C/4Гб ОЗУ) "рубежом" были ~1500 потоков. Сдыхало всё где-то на 3,2 тысячах потоков. Правда в нашем случае было приложение "с родовыми утечками" и система не "хайлоад". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:46 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЕсли можно и не тяжело, киньте ссылку на нормальную доку как нужноКогда я переписывал один сервлет (маленький, но с двумя пакостными багами) - даже в голову не пришло создавать собственный пул. Сервлет, конечно, был синхронный, но мысли создать собственный пул не возникло бы в любом сервлете. Можно поинтересоваться - в каких задачах рука сама тянется к пистолету? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:49 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerОк, не мы, а контейнер в общем случае, но можно и свой пул использовать. Вот скажем в спринге есть для этого DefferedResult. https://www.javacodegeeks.com/2015/07/understanding-callable-and-spring-deferredresult.html Скорее всего у него под капотом асинхронные сервлеты.Вы совершенно напрасно не читаете документацию на используемые контейнеры. Конкретно котяра может настраиваться или XML-файлами (предпочтительно) или в коде приложения (встраиваемый контейнер). SpringBoot использует встраиваемый контейнер. Поэтому, естественно, настройка контейнера делается в коде. Код настраивает всё, включая пулы потоков исполнения. Теперь я хочу понять, каким образом из этого следует что: 1. Ваше приложение может использовать пул, настроенный для контейнера? 2. Ваше приложение станет асинхронными сервлетом без всяких усилий с вашей стороны? Но всё таки суть ведь в том, что имеем возможность принять на исполнение задачу от клиента даже если в пуле потоков места нет, а не просто создаём(контейнер-контейнер) поток на каждый запрос.Не можете вы принять задачу на исполнение, если у вас нет ресурсов. Чтобы убедиться в этом достаточно напустить Apache Bench с большим параллелизмом на умалчиваемую конфигурацию котяры: пока контейнер не расширит пул с минимума до предложенной нагрузки - будете получать отлупы которые отобразятся и в статистике ab и в логе (на консоли) контейнера. Отлупов будет немного, но они будут.допустим есть 10 потоков томката которые обрабатывают http запросы и пихают их в некоторый внутренний пул. Размер этого пула скажем 500 потоков. Каждая задача это обращение к внешней системе, которая отвечает минуту и ей пофиг на нагрузку.Задлянафига обсуждать конфигурацию, которая явно не соответствует условиям эксплуатации??? Чтобы посмотреть какие ошибки умеет выдавать контейнер? Ну так соберите и посмотрите. Если у вас ожидается пиковая нагрузка в тысячу клиентов, а время обработки запроса достаточно велико, то коннектор должен быть настроен для приёма тысячи подключений, а пул потоков - для обработки тысячи запросов. И тут нет предмета для обсуждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:05 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovLeonid KudryavtsevЕсли можно и не тяжело, киньте ссылку на нормальную доку как нужноКогда я переписывал один сервлет (маленький, но с двумя пакостными багами) - даже в голову не пришло создавать собственный пул. Сервлет, конечно, был синхронный, но мысли создать собственный пул не возникло бы в любом сервлете. Можно поинтересоваться - в каких задачах рука сама тянется к пистолету? Ваша мысль текла в правильном направлении - не создавать свои пулы в сервлете. Нормальная мысль. Servlet 3.0 Async это допиленный wrapper по стопам JSR 237 Timer and WorkManager (commonj), в websphere он был штатно, к JBoss его прикручивали с переменным успехом (как и в Томкат ). Добавили ссылку в work event на контекст соединения чтобы работать с servlet response/request объектами. Полностью ЗА простый асинхронный апи для сервлетов, не пойму только откуда вылезли массовые примеры с кастомными пулами, ведь это всегда было табу в сервлетном коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:10 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovJVM хороша тем, что это один процесс и накладные расходы на организацию взаимодействия между потоками - минимальны. Что за байки? IMHO & AFAIK в Java уже достаточно давно используются потоки OS. Т.ч. разница Java или C или что-то другое - быть не должно Может и минимальны, но они есть . А алгоритм работы шедулера операционной системы - вещь вроде и хорошо документированная (на Linux, для Windows полностью не документирована), но разобраться как он реально работает - пол литра не хватит. А если больше пол литра, то лично меня уже вырубает ))) и я засыпаю ))) тут уже не до шедулеров ))) Т.ч. понять, как именно он в __конкретном__ случае работает / не работает / __глючит__ - мне печени не хватает ))) При этом проблема решается быстрее, чем находится точное объяснение, что же именно в системе происходит. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:14 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
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 тыс баксов каждый). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:21 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
uid uniqueПреставьте себе клиента который требует достатойно слительного выполнения инициализации на сервере. К примеру, создать какую то . пардон за опечатки, клавиатура непривычной формы и без кириллицы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:23 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov...И тут нет предмета для обсуждения. Тут есть предмет для обсуждения. IMHO Т.к. Вы верно заметили, настройка должна соответствовать планируемой нагрузке и оборудованию. Если у нас штатно хватает 10 потоков, то настраивая на 1000, мы с большой вероятностью получим не ошибку, а просто полное зависание всей системы и, даже, возможно железа. Например сервера на амазоне, по умолчанию не имеют своп памяти. И если мы своей нагрузкой забьем потоки и память - мы даже через SSH подключится не сможем, что бы сервер перегрузить. Ситуация вида DoS /Denial of Service / атаки может быть не только из-за русских хаккеров ( TM ) но и из-за случайного стечения неудачных обстоятельств или ошибки. Basil A. SidorovНе можете вы принять задачу на исполнение, если у вас нет ресурсов. Неправда ваша. Выполнить мы ее не можем (ресурсов не хватает), а вот принять на исполнения и пытаться выполнить (безуспешно) - это элементарно и сплошь и рядом такое происходит. Задача правильно настроенной/спроектированной системы в том и состоит, что бы при превышение максимальной нагрузки, не пытаться выполнять не выполнимые задачи, а сразу же давать отлуп когда нагрузка превышает некоторую заданную. Или по кол-ву work threads или по timeout'ам на исполнение или как-то еще. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:26 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
uid uniqueПреставьте себе клиента теперь представь что JS клиент по умолчанию асинхронный сам и твой сервер асинхронный нафиг не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:29 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Petro123uid uniqueПреставьте себе клиента теперь представь что JS клиент по умолчанию асинхронный сам и твой сервер асинхронный нафиг не нужен. Сам с чем-то похожим сталкивался и, боюсь, тут может оказаться, что "дьявол кроется в мелочах". IMHO & AFAIK Я тоже делал бы обычными сервлетами. Первый запрос - вернуть HTML, в секции инициализации на JS (путь даже onLoad) - банальный AJAX запрос на инициализацию. Подводных камней и возможностей словить глюки масса. Т.ч. без вникание в детали задачи, обсуждать и охаевать я бы не стал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:34 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevIMHO & AFAIK в Java уже достаточно давно используются потоки OS. Т.ч. разница Java или C или что-то другое - быть не должноИменно об этом я говорю. Пока у вас одна JVM (один процесс операционной системы) вы можете навалить любую нагрузку, которую этот процесс выдержит и быть уверенным в том, что затраты на взаимодействие между потоками - минимальны. Как только у вас появились микросервисы - у вас появилось много отдельных процессов системы. И взаимодействовать они должны по сети. В принципе, по виндой, обмен через локалхост по скорости сравним с обменом через память, но дополнительные накладные расходы никуда не делись. Как только вы начинаете расселять микросервисы по отдельным контейнером вы добавляете ещё дополнительных расходов. Конечный результат определяется характером задачи. Если задачи микросервисов относительно объёмны - накладные расходы контейнеризации останутся приемлимо малыми. Если задачи "совсем крохотные" - основное время будет съедено межпроцессным взаимодействием. "Меня опять терзают смутные сомнения", что с этой точки зрения систему никто не анализировал: "когда в моде короткие юбки - не время думать о красоте ног". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:36 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
uid unique... Я имел в виду пример КОДА или доки, т.е. что бы все потоки управлялись апп-сервером. Просто такого не делал, в какую доку смотреть - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:38 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, согласен. Альтернативы без асинхронности есть. Поэтому пример Прикладной задачи найти трудно. Ведь для этого контейнер изобрели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:47 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЕсли у нас штатно хватает 10 потоков, то настраивая на 1000, мы с большой вероятностью получим не ошибку, а просто полное зависание всей системы и, даже, возможно железа.Такой сценарий, разумеется нельзя исключить. "Но есть ньюанс". 1. Плох тот сисадмин, который не знает возможности своего железа; 2. Если всё настолько плохо, что сдыхает уже на начальном этапе, когда потоки практически не потребляют ресурсов, возникает резонный вопрос что лучше: 2а - огрестись при старте приложения, когда других проблем ещё нет или 2б - огрести проблему в часы наибольшей нагрузки, когда есть риск, что мы уже начали рвать волосы на разных местах ?Ситуация вида DoS /Denial of Service / атаки может быть не только из-за русских хаккеров ( TM ) но и из-за случайного стечения неудачных обстоятельств или ошибки.Вот поэтому ~примерно третий вариант моей реализации сервлета содержал код управления ресурсами. Причём, поразмыслив, я отверг оптимистичную стратегию и реализовал пессимистичную.Выполнить мы ее не можем (ресурсов не хватает), а вот принять на исполнения и пытаться выполнить (безуспешно) - это элементарно и сплошь и рядом такое происходит.Именно это и является ошибкой. Если вы быстро и корректно дали дуба, то балансировщик, за которым вы, скорее всего, находитесь сможет "принять меры". А это, в свою очередь исключит ситуации, когда пользователи уже рвут и мечут, а вы ещё не понимаете, что проблемы уже начались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:49 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Petro123uid uniqueПреставьте себе клиента теперь представь что JS клиент по умолчанию асинхронный сам и твой сервер асинхронный нафиг не нужен. Теперь представь что задание выполняется больше чем http timeout на клиенте... Или клиент недорос до ECMAScript 5 (IE 6, 8 к примеру). Сервлеты начали писать намного раньше чем возникли новомодные js фреймворки и асинхронные обработки на клиенте. Писал примерно в 2007м асинхронную библиотеку под IE 6, для киоска, но там просто было так как IEHost использовался и пинки шли из внешнего кода на С# .NET прямо на js метод. До сих пор этот киоск работает во всех терминалах одного аэропорта, когда прилетаю, вспоминаю о нем. ;-) Не всегда код делается с нуля. Могут попросить улучшить / ускорить существующий код (немаленького размера). Сидишь, представляешь себе как могло бы быть а реальность отличается от мира фантазий; у многих корпоративных клиентов очень консервативная политика обновлений java, серверов, баз данных и браузеров. Скажут обеспечить совместимость с IE 8 (хорошо что не 6) и будь добр обеспечь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:54 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Там не было взаимодействий между микросервисами. Просто железка мощная, в разных доккер контейнерах деплоились разные микросервисы. Железка вроде стояла чуть ли не у поставщика данных (возможно даже на самой бирже, т.е. место дорогое) Вхаимодействовали исключительно по сети с другими серверными (с другими континентами\) В реальности проблема действительно была в ЭТОМ. Вы сразу место ее возникновение верно определили ))) Но проблема была не в коде / архитектуре, а банально: много микро-сервисов + много ядер + докер + шедулер + Numa + java + дебильные настройки JVM по умолчанию = глюки Но факт остается фактом, при многих потоков на машине (5-15 тыс) - накладные ресурсы на переключение зашкаливали. Если по системной статистике время ожидание в очереди на выполнение красное, то можно бороться: 1. или еще более мощная железка 2. или на уровне конфигурации ОС. Например в данном случае, можно было бы ручками выдать affinity по процессорам и NUMA-узлам. Думаю, ОС бы сильно полегчало. 3. или програмно. Например перейти на NIO, уменьшить кол-во потоков в системе на порядок. Ну, или IMHO оптимально все вместе. Что и было сделано. Правда частично. Переписана программа, изменены настройки JVM, выданы рекомендации админам (которые записали, но решили их не внедрять) IMHO p.s. Ну и паттерн нагрузки специфический. Спим, спим, проснулись и много работы для многих потоках. По статистики вроде особо сильной миграции потоков между ядрами и Numa-узлами было не видно, но на деле, подозреваю что она вносила свой вклад (не настолько хорошо умею читать статистику шедулера, аномалии видел, но конкретно разобраться что к ним привело - не стал, а средства мониторинга/профилирования уровня Intel VTune ставить на боевой сервер я не решился) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:59 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЕсли вы быстро и корректно дали дуба, то балансировщик, за которым вы, скорее всего, находитесь сможет "принять меры". А это, в свою очередь исключит ситуации, когда пользователи уже рвут и мечут, а вы ещё не понимаете, что проблемы уже начались. Корректно дать дуба - это выдать ошибку "Нет ресурсов". Принять на выполнение 100500 отдельных запросов и уйти в зависание.... Тут никакой балансировщик не поможет, т.к. мы задачи выполняем, никакой ошибки нет и, даже возможно, к утру успешно ее закончим. Задать "нормальные" timeout'ы не всегда реально, что делать в том случае, если большинство запросов у нас выполняется 0,05 секунды, но изредка, по бизнес-правилам, могут быть запросы которые выполняются минуты и даже десятки минут. По хорошему, нужно бы разделить эти две группы запросов и настроить им разные timeout'ы, но не всегда это осмысленно и возможно. Т.ч. IMHO ошибка timeout имеет право на жизнь, но лучше до нее не доводить. В общем, мы друг друга поняли ))) А дальше начинаем говорить об одном и том же, но разными словами ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:09 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, я помню это обсуждение. Но вот лично я о NUMA системах знаю, только что они существуют и что для них есть дополнительные особенности. Как минимум - "доступ в чужую память". Тем не менее. 1. Докер может быть лёгковесным средством изоляции процессов друг от друга в рамках физического хоста. Т.е. это вопрос организации безопасной среды исполнения с разграничением доступа; 2. Микросервисы или монолит - всё равно остаётся предметом для обсуждения. Точнее так. Если ваше железо справится с планируемой нагрузкой в любом варианте - делайте как удобнее. Я не вижу плюсов у микросервисов, но это мои личные тараканы. Если требуется "последний дюйм" без модернизации железа и среды исполнения, то монолит становится вполне реальным вариантом - модульность и компонентность ничуть ни хуже микросервисных. Меняются только стратегии развёртывания и администрирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:14 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
uid uniqueСервлеты начали писать намного раньше чем возникли новомодные js фреймворки и асинхронные обработки на клиенте шутка? Я вот не помню когда JS был не асинхронный)) А пример с 2-х минутным запросом обсуждали. Делается Заявка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:25 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39432782&tid=2123001]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 319ms |

| 0 / 0 |
