如何在 AWS 中正​​确高效地进行负载均衡

How to load balance correctly and efficiently in AWS

目前我有一个 EC2 实例(2 CPU,8GB 内存,Linux):

  1. NodeJS Express 服务器(后端)
  2. NodeJS "Microservice" Express 服务器(与 API 等通信)
  3. PostgresQL 数据库
  4. Redis(作为我的服务器 (1) 和我的微服务服务器 (2) 之间的消息代理
  5. 与服务器通信的 ReactJS 应用程序(前端)(1)

现在这在低流量下工作正常,但随着流量增加(minutes/hours 中有 10k 次访问),整个事情变得不堪重负,CPU 正在进入可爆发区域。这也是一种危险的方法,因为我的所有功能都在一个实例上。作为一个快速的解决方案,我使用我的 PM2 管理器将服务器 (1) 集群化,现在它运行得更好了。但作为一个长期解决方案,我需要拆分事物并使用负载平衡。这就是我想将其拆分为不同的 EC2 实例的方式:

  1. NodeJS Express 服务器(后端)+ NodeJS Express 服务器(后端)+ 两者之间的负载平衡器 - 每个都有 512MB RAM,1 CPU
  2. NodeJS "Microservice" Express 服务器 - 512MB 内存,1 CPU
  3. AWS RDS 上的 PostgresQL(1GB 内存,1CPU)
  4. AWS ElastiCache 上的 Redis(缓存。t2.micro)
  5. ReactJS 应用程序(前端)- 512MB 内存,1 CPU

现在我有两个问题:

  1. 您需要每个服务的两个实例,即 2 个后端、2 个微服务、2 个前端,最好 运行 在不同的可用性区域。
  2. 每对服务之间的LB
  3. 服务A为服务B调用LB,从不直接服务B。

这意味着负载均衡器后面的每项服务始终至少有一个健康的实例,并且当您添加或删除单个服务节点时,您的 DNS 记录等保持不变 - 您可以将微服务扩展到 3 个节点,而无需更改任何其他地方。

这会增加成本,但会提供冗余 - 这是使用云基础架构的主要要点之一。