2013-06-22 3 views
5

Я искал информацию о преимуществах асинхронного ввода-вывода в Java, особенно из проектирования стека приложений.Асинхронный ввод-вывод - Java

я столкнулся с многочисленными примерами, управляемых событиями серверов, таких как Node.js, Tornedo и т.д.

То, что я не смог понять, почему кто-то, имеющий весь стек приложений в Java EE с JBoss или мигрируют Weblogic сервер приложений для управляемая событиями архитектура.

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

Просьба предоставить мне несколько входов по следующим строкам.

  1. Почему традиционная архитектура Java EE с Apache-Tomcat/JBoss/Weblogic рассматривает переход к архитектуре, управляемой событиями.
  2. Будет ли архитектура, управляемая событиями, полезной для предоставления устройства/агностического веб-сайта/приложения.
  3. При проектировании приложения в облаке мы будем использовать асинхронный ввод-вывод.
  4. Является ли производительность, управляемая событиями, более эффективной, чем традиционная архитектура Java EE, или это миф.

ответ

2

Одним из ключевых понятий, которые вы упомянули это:

Да, они наделение потока для каждого запроса

Было показано, что с потоком по запросу с привязанным к IO приложением в конечном итоге выйдет из потока пула, когда ваша цель состоит в поддержке большого количества одновременных пользователей. Как оказалось, рамки, о которых вы говорите, такие как Node.js, Tornado и т. Д., Превосходят обработку большого количества одновременных пользователей, где ваше приложение, скорее всего, просто ждет чего-то, что не произойдет, и не делает никакого CPU связанных задач. Другими словами, эти инструменты отлично подходят для создания приложений реального времени, таких как онлайн-игры, чаты, системы регистрации, системы уведомлений, в которых основной целью является скорейшая координация передачи небольших сообщений со многими пользователями, как можно быстрее.

На самом деле, эти инструменты отлично подходят для написания приложений на основе websocket, потому что это действительно предложение пользователю в реальном времени или почти в реальном времени.

Несмотря на то, что многие компании используют эти платформы с самого начала, я думаю, что для компаний с традиционными стеками чаще используются инструменты, управляемые событиями, как дополнительные дополнения к их системе. Когда вы идете с чем-то вроде node.js или Tornado, вы можете отказаться от большого количества встроенного программного обеспечения, на которое вы полагаетесь, за то, что вам нужно сворачивать свои собственные api и драйверы. node.js существует уже некоторое время, и на самом деле существует большая поддержка для подключения к базам данных, платформам nosql и системам сборки, но для этого потребовалось некоторое время.

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

Затем посмотрите, как далеко вы можете получить с node.js, используя только один поток, его поток по умолчанию. Вы обнаружите, что сможете поддерживать чрезвычайно большое количество одновременных запросов в секунду. Известно, что оно масштабируется в миллионах, потому что оно не ограничено потоками, оно ограничено только памятью, количеством дескрипторов файлов и процессором в этой точке.

Чтобы ответить на ваши вопросы лучше, я могу:

  1. Я не думаю, что это возможно, чтобы просто угробить всю вашу платформу только потому, что вы слышите, как большой Node.js и архитектуры управляемых событий являются. Вы действительно должны спросить себя, если у вас есть необходимость в создании высокоприоритетного приложения, связанного с IO. Если да, почему бы просто не использовать его для дополнения существующего стека?
  2. Я не уверен в вашем втором вопросе, что вы подразумеваете под устройством?
  3. Вы можете создать отличное приложение в облаке на основе традиционных инструментов, а также использовать архитектуры, управляемые событиями. Тот факт, что он может быть «облачным» приложением, действительно не имеет никакого отношения к выбору платформы.
  4. Я бы сказал, что это больше о масштабах, чем о производительности. Вы можете обнаружить, что приложение node.js работает медленнее или быстрее, чем приложение java, работающее с тем же кодом. Но то, что может сделать node.js, позволяет значительно повысить пропускную способность, потому что это не повлияет на этот поток, о котором я упоминал. И это также означает, что вы создали правильное приложение, управляемое событиями, где вы не блокируете. Если вы блокируете, вы снимаете всю систему!
0

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

1

Я считаю его больше о лежащей в основе реализации, а также сделки, в накладных расходов это дает:

Прядения совершенно новому выделенный поток для обработки запроса. Каждый поток блокирует ввод-вывод. Однако манипулирование таким параллелизмом на уровне нитей - беспорядок.

против

Используя одну нить, которая остается гибкой и обещает справиться с StuFF некоторое время в будущем. Не блокируется при выполнении операций ввода-вывода, управление параллелизмом не требуется на уровне потока. Пусть OS справится с этим.

Почему традиционная архитектура Java EE с Apache-Tomcat/JBoss/Weblogic рассмотреть переход к событию ведомой архитектуры.

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

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

Я не думаю, что они так связаны. На одной и той же JVM может работать более одного языка. Это возможность JVM запускаться на нескольких хостах и ​​выставлять стандартную api, которая приносит агностические возможности устройства.Другим примером является веб-браузер.

При проектировании приложения на облаке мы бы пошли на асинхронный ввод-вывод .

В зависимости от требований. Async I/O не решает все проблемы. Но это может помочь, если вы собираетесь легко создавать, быстро масштабируемые решения. Хороший выбор для новых стартапов с жесткими ограничениями.

Является ли управляемая событиями характеристика архитектуры лучше, чем традиционная архитектура Java EE , или это миф.

Лучше протестируйте производительность с помощью good benchmarks, настроенного на требования вашего бизнеса.

Смежные вопросы