Подтвердить что ты не робот

Как создать распределенное приложение node.js?

Создание приложения node.js достаточно просто.

var app = require('express')();
app.get('/',function(req,res){
    res.send("Hello world!");
});

Но предположите, что люди стали одержимы вашим приложением Hello World! и исчерпали свои ресурсы. Как этот пример может быть расширен на практике? Я не понимаю этого, потому что да, вы можете открыть несколько экземпляров node.js на разных компьютерах, но когда кто-то обратится к http://your_site.com/, он прямо нацелен на то, что конкретные machine, этот конкретный порт, этот конкретный процесс node. Итак, как?

4b9b3361

Ответ 1

Есть много способов справиться с этим, но это сводится к двум вещам:

  • возможность использования большего количества ядер на сервер
  • возможность масштабирования более чем на одном сервере.

node -cluster

Для первого варианта вы можете использовать пользователь node-cluster или то же решение, что и для опции seconde. node-cluster (http://nodejs.org/api/cluster.html) по существу является встроенным способом для преобразования процесса node в один мастер и несколько рабочих. Как правило, вам нужны 1 мастер и n-1 до n сотрудников (n - ваше количество доступных ядер).

балансировщики нагрузки

Второй вариант - использовать балансировщик нагрузки, который распределяет запросы среди нескольких сотрудников (на одном сервере или на разных серверах).

Здесь у вас есть несколько вариантов. Вот несколько:

Еще одна вещь: после того, как вы начнете выполнять несколько запросов, обслуживающих запросы, вы больше не сможете использовать память для хранения состояния, вам нужна дополнительная служба для хранения общих состояний, Redis (http://redis.io) является популярным выбором, но отнюдь не единственным.

Если вы используете такие сервисы, как cloudfoundry, heroku и другие, они настраивают его для вас, поэтому вам нужно только беспокоиться о своей логике приложений (и использовать службу для работы с общим состоянием).

Ответ 2

Я работаю с node в течение довольно долгого времени, но недавно получил возможность попробовать масштабировать свои приложения node и уже некоторое время занимаюсь исследованиями по той же теме и натолкнулся на следующие предварительные условия для масштабирование:

  • Мое приложение должно быть доступно в распределенной системе, каждая из которых запускает несколько экземпляров node

  • Каждая система должна иметь балансировщик нагрузки, который помогает распределять трафик через экземпляры node.

  • Должен быть основной балансировщик нагрузки, который должен распределять трафик через экземпляры node в распределенных системах.

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

Для вышеуказанных реквизитов я столкнулся с следующим:

  • Используйте модули типа cluster, чтобы запустить несколько экземпляров node в системе.

  • Всегда используйте nginx. Это один из самых простых механизмов создания балансировщика нагрузки, на который я до сих пор сталкивался.

  • Используйте HAProxy, чтобы действовать как основной балансировщик нагрузки. A несколько указателей о том, как использовать его и поддерживать навсегда.

Полезные ресурсы:

Я буду продолжать обновлять этот ответ по мере продвижения.

Ответ 3

Основной способ использования нескольких машин - разместить их за балансировщиком нагрузки и указать весь трафик на балансировщик нагрузки. Таким образом, кто-то отправится в http://my_domain.com, и он укажет на машину балансировки нагрузки. Единственная цель (для этого примера в любом случае, теоретически может быть сделано) балансировки нагрузки - это делегировать трафик на заданную машину, на которой выполняется ваше приложение. Это означает, что у вас может быть x количество компьютеров, на которых запущено ваше приложение, однако внешняя машина (в данном случае браузер) может перейти на адрес балансировки нагрузки и перейти к одному из них. Клиент не (и не должен) знать, какая машина фактически обрабатывает свой запрос. Если вы используете AWS, довольно легко настроить и управлять этим. Обратите внимание, что ответ Pascal содержит более подробные сведения о ваших вариантах.

С Node в частности, вы можете захотеть просмотреть модуль Node Cluster. У меня на самом деле нет большого опыта работы с этим модулем, однако он должен позволить вам запускать несколько процессов вашего приложения на одной машине, все используют один и тот же порт. Также Node, что он все еще экспериментальный, и я не уверен, насколько он будет надежно.

Ответ 4

Я бы рекомендовал взглянуть на http://senecajs.org, набор инструментов для микросервисов для Node.js. Это хорошая начальная точка для начинающих и начать думать о "услугах" вместо монолитных приложений.

Сказав, что создание распределенных приложений затруднено, уделите время изучению, LOT времени, чтобы овладеть им, и обычно вам придется столкнуться с большим компромиссом между производительностью, надежностью, и др.