node.js - 在 AWS 上扩展 Nodejs 应用程序

标签 node.js amazon-web-services amazon-ec2

我有在 AWS EC2 上运行的 Nodejs 应用程序。

我想通过创建更多实例来扩展它。

我不太明白如何在网络方面做到这一点。

假设我创建了另一个实例,它正在监听不同的端口。 我应该更改客户端以从两个不同的端口请求吗?我相信这可能会导致数据库上的竞争条件

我是否应该监听 EC2 计算机上的一个端口并将请求定向到其中一个实例?在这种情况下,端口将处于繁忙状态,直到实例完成请求,而不是与其他实例并行处理请求

有人可以指点一下,或者可以给我指出一些关于这个主题的文档吗?

最佳答案

在基础级别,您将拥有 Node.js 应用程序的多个实例,连接到公共(public)数据库后端。 (您的数据库也应该是集群的,但这是另一篇文章的主题。)

如果您已经遵循最佳实践,则一个请求将是一个响应,并且后续请求是否到达不同的应用程序服务器也没有关系。也就是说,客户端可以随时点击其中任何一个,并且不会有任何副作用。如果没有,您将需要某种服务器固定(通常通过 cookie 或类似方法完成)以确保客户端始终位于同一应用程序服务器上。

最简单的负载平衡方法是让您的客户端连接到一个主机名,并将该主机名以循环方式解析到多个主机。这会分散流量,但不一定正确。例如,一台主机上的特定命令或问题可能意味着它只能处理 5 个请求,而其他服务器可以处理 5000 个请求。大多数云提供商都有负载平衡管理。 AWS 确实如此。

由于您已经在 AWS 上,我建议您通过 Elastic Beanstalk 部署应用程序。它按照配置自动启动/拆卸。您当然可以推出自己的解决方案,但使用现有的解决方案可能会更容易。负载均衡器配置有 Beanstalk。

关于node.js - 在 AWS 上扩展 Nodejs 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47300142/

相关文章:

node.js - 在 Mongoose Schema 中使用多个值的唯一文档

node.js - 在 NodeJS 中使用 Lambda@Edge 对 CloudFront 进行基本 HTTP 身份验证

c++ - AWSStringStream.h : No such file or directory

android - 如何在亚马逊 ec2 上运行安卓模拟器?

node.js - 为什么我可以访问我的网站(IP地址):port but not (domain name):port?

javascript - 如何在写入时拆分 WriteStream?

javascript - MongoDB - MongoError : connect ECONNREFUSED

node.js - 重新连接 SocketIO 后重新加入同一房间时出现问题

Python 发送带有 Base64 编码图像作为附件的电子邮件

amazon-web-services - 如何重置 EC2 ubuntu 实例?