[Перевод] Нагружаем Node под завязку (2-я из 12 статей о Node.js от команды Mozilla Identity)

142f01ed226450dc0ecb93effaf28666.jpgОт переводчика: Это вторая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona. Эта статья написана по мотивам выступления Ллойда Хилайеля на конференции Node Philly 2012 в Филадельфии. Перевод первой статьи, «Охотимся за утечками памяти в Node.js», был опубликован в пятницу. Процесс Node.js выполняется на единственном ядре процессора, так что построение масштабируемого сервера на Node требует особой заботы. Благодаря возможности писать нативные расширения и продуманному набору API для управления процессами, есть несколько разных способов заставить Node выполнять код параллельно. Мы рассмотрим их в этой статье. Кроме того, мы представим модуль compute-cluster — маленькую библиотеку, которая облегчает управление коллекцией процессов для выполнения распределённых вычислений.Постановка задачи Для Persona нам было необходимо создать сервер, который справился бы с обработкой множества запросов со смешанными характеристиками. Мы выбрали для этой цели Node.js. Нам надо было обрабатывать два основных типа запросов: «интерактивные», которые не требовали сложных вычислений и должны были выполняться быстро, чтобы интерфейс приложения был отзывчивым, и «пакетные», которые отнимали примерно пол-секунды процессорного времени и могли быть ненадолго отложены без ущерба для удобства пользователя. В поисках наилучшей архитектуры приложения мы долго и тщательно обдумывали способы обработки этих типов запросов с учётом юзабилити и стоимости масштабирования и в конце концов сформулировали четыре основных требования: Насыщение. Наше решение должно было использовать все доступные ядра процессора. Отзывчивость. Пользовательский интерфейс должен оставаться отзывчивым. Всегда. Отказоустойчивость. Когда нагрузка зашкаливает, мы должны нормально обслужить столько клиентов, сколько сможем, а остальным показать сообщение об ошибке. Простота. Решение должно легко и постепенно интегрироваться в уже работающий сервер. Вооружившись этими требованиями, мы можем осмысленно сравнивать разные подходы.Читать дальше →

© Habrahabr.ru