【问题标题】:How to load balance correctly and efficiently in AWS如何在 AWS 中正​​确高效地进行负载平衡
【发布时间】:2020-06-25 12:40:28
【问题描述】:

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

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

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

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

现在我有两个问题:

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

【问题讨论】:

    标签: node.js amazon-web-services performance load-balancing


    【解决方案1】:
    1. 每个服务都需要两个实例,即 2x 后端、2x 微服务、2x 前端,最好在不同的可用区中运行。
    2. 每对服务之间的负载均衡
    3. 服务 A 为服务 B 调用 LB,从不直接服务 B。

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

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

    【讨论】:

    • 理论上什么会更好? 2x 1CPU 服务器或 1x 2CPU 服务器与集群之间的负载均衡器?因为目前预算有限,我面临着增加 CPU 或添加负载均衡器的问题,但不是两者兼而有之
    • 我会选择 LB + 2x 单核节点而不是 1x2core 节点。
    • 为什么?我也这么认为
    • 主要是为了恢复。如果一个核心出现故障,您将失去 50% 的流量,如果 1x2core 出现故障,您将失去一切。
    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 2022-08-03
    • 2014-09-18
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多