如何在 AWS 中正确高效地进行负载均衡
How to load balance correctly and efficiently in AWS
目前我有一个 EC2 实例(2 CPU,8GB 内存,Linux):
- NodeJS Express 服务器(后端)
- NodeJS "Microservice" Express 服务器(与 API 等通信)
- PostgresQL 数据库
- Redis(作为我的服务器 (1) 和我的微服务服务器 (2) 之间的消息代理
- 与服务器通信的 ReactJS 应用程序(前端)(1)
现在这在低流量下工作正常,但随着流量增加(minutes/hours 中有 10k 次访问),整个事情变得不堪重负,CPU 正在进入可爆发区域。这也是一种危险的方法,因为我的所有功能都在一个实例上。作为一个快速的解决方案,我使用我的 PM2 管理器将服务器 (1) 集群化,现在它运行得更好了。但作为一个长期解决方案,我需要拆分事物并使用负载平衡。这就是我想将其拆分为不同的 EC2 实例的方式:
- NodeJS Express 服务器(后端)+ NodeJS Express 服务器(后端)+ 两者之间的负载平衡器 - 每个都有 512MB RAM,1 CPU
- NodeJS "Microservice" Express 服务器 - 512MB 内存,1 CPU
- AWS RDS 上的 PostgresQL(1GB 内存,1CPU)
- AWS ElastiCache 上的 Redis(缓存。t2.micro)
- ReactJS 应用程序(前端)- 512MB 内存,1 CPU
现在我有两个问题:
- 我应该负载平衡我的后端(两个服务器副本)还是我的前端(ReactJS 应用程序)?或者两者都有?
- 我是否应该为后端获取更多 CPU(每个 2 CPU)?因为现在有了这个新架构,我就不能像以前那样对它进行集群了。什么会更有效率?在 2 CPU 秒上集群服务器或在 2 台服务器之间进行负载平衡,每台服务器 1 CPU?
- 您需要每个服务的两个实例,即 2 个后端、2 个微服务、2 个前端,最好 运行 在不同的可用性区域。
- 每对服务之间的LB
- 服务A为服务B调用LB,从不直接服务B。
这意味着负载均衡器后面的每项服务始终至少有一个健康的实例,并且当您添加或删除单个服务节点时,您的 DNS 记录等保持不变 - 您可以将微服务扩展到 3 个节点,而无需更改任何其他地方。
这会增加成本,但会提供冗余 - 这是使用云基础架构的主要要点之一。
目前我有一个 EC2 实例(2 CPU,8GB 内存,Linux):
- NodeJS Express 服务器(后端)
- NodeJS "Microservice" Express 服务器(与 API 等通信)
- PostgresQL 数据库
- Redis(作为我的服务器 (1) 和我的微服务服务器 (2) 之间的消息代理
- 与服务器通信的 ReactJS 应用程序(前端)(1)
现在这在低流量下工作正常,但随着流量增加(minutes/hours 中有 10k 次访问),整个事情变得不堪重负,CPU 正在进入可爆发区域。这也是一种危险的方法,因为我的所有功能都在一个实例上。作为一个快速的解决方案,我使用我的 PM2 管理器将服务器 (1) 集群化,现在它运行得更好了。但作为一个长期解决方案,我需要拆分事物并使用负载平衡。这就是我想将其拆分为不同的 EC2 实例的方式:
- NodeJS Express 服务器(后端)+ NodeJS Express 服务器(后端)+ 两者之间的负载平衡器 - 每个都有 512MB RAM,1 CPU
- NodeJS "Microservice" Express 服务器 - 512MB 内存,1 CPU
- AWS RDS 上的 PostgresQL(1GB 内存,1CPU)
- AWS ElastiCache 上的 Redis(缓存。t2.micro)
- ReactJS 应用程序(前端)- 512MB 内存,1 CPU
现在我有两个问题:
- 我应该负载平衡我的后端(两个服务器副本)还是我的前端(ReactJS 应用程序)?或者两者都有?
- 我是否应该为后端获取更多 CPU(每个 2 CPU)?因为现在有了这个新架构,我就不能像以前那样对它进行集群了。什么会更有效率?在 2 CPU 秒上集群服务器或在 2 台服务器之间进行负载平衡,每台服务器 1 CPU?
- 您需要每个服务的两个实例,即 2 个后端、2 个微服务、2 个前端,最好 运行 在不同的可用性区域。
- 每对服务之间的LB
- 服务A为服务B调用LB,从不直接服务B。
这意味着负载均衡器后面的每项服务始终至少有一个健康的实例,并且当您添加或删除单个服务节点时,您的 DNS 记录等保持不变 - 您可以将微服务扩展到 3 个节点,而无需更改任何其他地方。
这会增加成本,但会提供冗余 - 这是使用云基础架构的主要要点之一。