我有在 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/