提问者:小点点

如何正确高效地实现AWS中的负载均衡


目前,我有一个EC2实例(2个CPU、8GB RAM、Linux),上面有:

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

现在,这在低流量下工作得很好,但是随着流量的增加(每分钟/小时10K次访问),整个系统会变得不堪重负,CPU会进入崩溃区。这也是一种危险的方法,因为我的所有功能都在一个实例上。作为一个快速的解决方案,我使用我的PM2管理器对服务器(1)进行了集群化,现在它的工作更好了。但作为一个长期的解决方案,我需要拆分这些东西并使用负载平衡。这就是我想要将其拆分为不同的EC2实例的方法:

  1. NodeJS Express Server(后端)+NodeJS Express Server(后端)+两者之间的负载均衡器-每个都具有512MB RAM、1个CPU
  2. NodeJS“微服务”Express服务器-512MB RAM,1个CPU
  3. AWS RDS上的PostgreSQL(1GB RAM,1CPU)
  4. 对AWS弹性痛(cache.t2.micro)
  5. ReactJS应用程序(前端)-512MB RAM,1个CPU

现在我有两个问题:

  • 我应该平衡我的后端(两个服务器副本)还是我的前端(ReactJS应用程序)的负载?或者两者兼而有之?
  • 我是否应该为后端获得更多CPU(每个2 CPU)?因为现在有了这个新的架构,我就不能像以前那样对它进行集群了。什么会更有效率?将服务器群集在2个CPU上,或在2个服务器之间进行负载平衡,每个服务器有1个CPU?

共1个答案

匿名用户

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

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

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