2015-01-28 2 views
0

У меня есть приложение в NodeJS.Стратегии масштабирования приложения nodeJS?

Недавно мы получили намного больше трафика (для меня это новый опыт), и поэтому я столкнулся с ошибкой «EMFILE: too many open files», которая возникает, когда один процесс пытается открыть больше файлов, чем позволяет файловая система.

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

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

Менеджер процессов PM2, который позволяет кластеризации ловит мой взгляд (правильно ли я понимаю, что для каждого экземпляра приложения требуется собственное ядро ​​- то есть вы не можете запустить 4 экземпляра на одном ядре?). Существуют ли какие-либо другие методы, которые регулярно используются?

спасибо (заранее)

+0

Вы можете попробовать увеличить количество файлов max, которые можно открыть [см. Эту проблему] (https://github.com/Unitech/PM2/issues/962#issuecomment-71680663). – soyuka

ответ

0

PM2 простое решение, если вы хотите запустить более одного экземпляра узла, другая общая альтернатива является модуль кластера http://nodejs.org/api/cluster.html Имейте в виду, что вам нужно будет настроить другой HTTP сервер, такой как Nginx для обратного прокси-сервера, который запрашивает ваш пользователь для процессов вашего узла.

Вы можете запускать любое количество процессов узла, независимо от количества ядер. Но так как каждый процесс узла является одним потоком, и каждое ядро ​​может выполнять один поток за раз, оптимальная конфигурация - это когда количество ядер соответствует количеству процессов узла. Если количество процессов Node больше, чем количество ядер, под нагрузкой, вы будете испытывать снижение производительности из-за избыточных переключений контекста, которые ваш процессор должен будет выполнить.

+0

pm2 использует модуль кластера, если вы тоже этого хотите;) 'pm2 start app.js -i 0' – soyuka

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