Node.js с балансировкой нагрузки AWS

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

Я использую Amazon ELB (без привязки) с несколькими экземплярами Linux EC2 (apache) и одной базой данных mysql.

У меня есть 3 вопроса:

  1. AWS ELB - есть ли проблемы с запуском node.js через AWS Load Balancer - я читал о том, что у других есть проблемы, но ничего не говорило, действительно ли это можно было сделать успешно или нет.

  2. Может ли Node.js эффективно обновлять таблицы базы данных, а затем отвечать на них? Это реалистично? Я читал, что это возможно, но это не звучит как хорошо используемая функция.

  3. Я понимаю, что node.js прослушивает события (например, jquery). Я обеспокоен, если у меня есть несколько отдельных веб-серверов, на которых запущен файл node.js, чтобы они все отвечали на одни и те же события. Например: некоторые записывают какой-то чат в БД, и все веб-серверы пытаются отправить это клиенту. (это будет проблемой при длительном опросе, поскольку один веб-сервер получит запрос и ответ). Это проблемы?

благодарю вас

1 ответ

Ответить 1 + 3 (не могу сказать о 2):

  1. мы используем aws elb уже более года, и у нас никогда не было проблем. нашему приложению требуется время безотказной работы, близкое к 100%

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

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

http.createServer(function (request, response) {
   // do something with the request, save to db or whatever
   db.save ...

   // and now send the response

   response.write(200);
   response.end();
});
Другие вопросы по тегам