【发布时间】:2020-06-25 12:40:28
【问题描述】:
目前我有一个 EC2 实例(2 个 CPU,8GB RAM,Linux):
- NodeJS Express 服务器(后端)
- NodeJS “微服务” Express 服务器(与 API 等通信)
- PostgresQL 数据库
- Redis(作为我的服务器 (1) 和我的微服务服务器 (2) 之间的消息代理)
- 与服务器通信的 ReactJS 应用程序(前端) (1)
现在这在流量较低的情况下可以正常工作,但随着流量的增加(以分钟/小时为单位的 10k 次访问),整个事情变得不堪重负,CPU 进入了可突增区域。这也是一种危险的方法,因为我的所有功能都在一个实例上。作为一个快速的解决方案,我使用我的 PM2 管理器对服务器 (1) 进行了集群化,现在它工作得更好了。但作为一个长期解决方案,我需要拆分事物并使用负载平衡。这就是我认为将其拆分为不同 EC2 实例的方式:
- NodeJS Express 服务器(后端)+ NodeJS Express 服务器(后端)+ 两者之间的负载均衡器 - 每个都有 512MB RAM,1 个 CPU
- NodeJS“微服务”Express 服务器 - 512MB RAM,1 个 CPU
- AWS RDS 上的 PostgresQL(1GB RAM,1CPU)
- AWS ElastiCache 上的 Redis (cache.t2.micro)
- ReactJS 应用程序(前端)- 512MB RAM,1 个 CPU
现在我有两个问题:
- 我应该负载平衡我的后端(两个服务器副本)还是我的前端(ReactJS 应用程序)?或者两者兼而有之?
- 我应该为后端获得更多 CPU(每个 CPU 2 个)吗?因为现在有了这个新架构,我将无法像以前那样对它进行集群。什么会更有效率?将服务器集群在 2 个 CPU 上或在 2 个服务器之间进行负载平衡,每个服务器有 1 个 CPU?
【问题讨论】:
标签: node.js amazon-web-services performance load-balancing