2013-05-16 5 views
7

Мне интересно, подходит ли node.js для приложения на стороне сервера, которое на самом деле не взаимодействует с браузером, или взаимодействие с браузером - это дополнительная часть всего приложения, используемого скорее для управления.Node.js для связи между сервером и сервером

Идея проста:

  1. сервер получает большое количество трафика UDP с коротких сообщений, содержащих пользовательские данные с другого сервера.

  2. Для каждого сообщения приложение выполняет поиск БД и отфильтровывает сообщения с помощью идентификаторов пользователя, которые не входят в белый список.

  3. Отфильтрованные сообщения обрабатываются, что приводит к другому обновлению БД или передаче данных на другой сервер.

Есть ли такой случай, хороший сценарий для изучения node.js, или, может быть, нет пользы от него по сравнению с, например, Java EE?

+3

Я думаю, что это отличная программа для домашних животных (в зависимости от базы данных), проверьте http://nodejs.org/api/dgram.html для документации –

+1

Узел работает лучше всего, если большая часть вашего времени проводится в IO (db, диск, сеть и т. д.). Хотя ваше приложение выполняет IO, узел может обрабатывать больше запросов. Если он делает много интенсивной обработки процессора, то он застрял, делая это, и ничего больше. Большая часть того, что вы указали, отлично подходит для узла, за исключением, может быть, «Обработано фильтрованных сообщений». Если эта обработка стоит дорого, значит, у вас может быть проблема. –

+0

Вы столкнулись с проблемой java EE? производительности или параллелизма? у вас есть много решений для параллелизма в java, стоит ли добавить еще один слой с другим языком, я так не думаю, если только вы не пробовали. – mpm

ответ

3

Отказ от ответственности: Я работаю в компании, которая вносит свой вклад в node.js и способствует ее использованию, поэтому мое мнение может быть предвзятым.

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

Причина в том, что Node.js сильно оптимизирован для решений, где сервер проводит большую часть времени ожидания. Ожидание соединения с клиентом, ожидание ответа на брандмауэр, ожидание чтения/записи диска, ожидание, когда клиент прочитает ответ и т. Д.

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

Есть одна вещь, которую я хотел бы рассмотреть перед тем, как перейти к node.js: разрешено ли вам развертывать node.js в вашей производственной среде? Переход на новую платформу имеет некоторые связанные с этим издержки, люди, которые работают с вашим приложением, должны будут узнать, как обращаться с приложениями node.js.

+0

> Реализация 'node.js, вероятно, превосходит версию Java EE'. У вас есть данные для поддержки этого? Этот тест, например, точно не подтверждает ваше утверждение: http://www.techempower.com/benchmarks/#section=data-r5 –

+0

> 'Java EE использует многопоточность, где у вас есть один поток для обработки каждого запроса '- Это один из вариантов. Java EE также поддерживает асинхронную обработку HTTP. См. http://www.javakeexample.com/2013/01/creating-asynchronous-servlets-with.html и https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3 –

+0

@ArjanTijms Хорошие баллы. У меня нет жестких данных для поддержки моего заявления о производительности. Однако те бенчмарк, о котором вы говорите, ошибочны, они используют mysql-клиент, у которого есть проблемы с производительностью. Что касается асинхронного J2EE - асинхронного сервлета, вероятно, недостаточно, вы должны использовать async для связи с БД и т. Д., И это не обычное использование для компонентов J2EE, не так ли? –

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