Node.js с балансировкой нагрузки AWS
Я только собираюсь создать приложение для чата, и я хочу использовать node.js (это будет мой первый раз, когда я буду его использовать).
Я использую Amazon ELB (без привязки) с несколькими экземплярами Linux EC2 (apache) и одной базой данных mysql.
У меня есть 3 вопроса:
AWS ELB - есть ли проблемы с запуском node.js через AWS Load Balancer - я читал о том, что у других есть проблемы, но ничего не говорило, действительно ли это можно было сделать успешно или нет.
Может ли Node.js эффективно обновлять таблицы базы данных, а затем отвечать на них? Это реалистично? Я читал, что это возможно, но это не звучит как хорошо используемая функция.
Я понимаю, что node.js прослушивает события (например, jquery). Я обеспокоен, если у меня есть несколько отдельных веб-серверов, на которых запущен файл node.js, чтобы они все отвечали на одни и те же события. Например: некоторые записывают какой-то чат в БД, и все веб-серверы пытаются отправить это клиенту. (это будет проблемой при длительном опросе, поскольку один веб-сервер получит запрос и ответ). Это проблемы?
благодарю вас
1 ответ
Ответить 1 + 3 (не могу сказать о 2):
мы используем aws elb уже более года, и у нас никогда не было проблем. нашему приложению требуется время безотказной работы, близкое к 100%
Событие 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();
});