目前,我有一个EC2实例(2个CPU、8GB RAM、Linux),上面有:
- NodeJS Express服务器(后端)
- NodeJS“微服务”Express服务器(与API等通信)
- PostgreSQL数据库
- Redis(作为我的服务器(1)和我的微服务服务器(2)之间的消息代理
- 与服务器(1)通信的ReactJS应用程序(前端)
现在,这在低流量下工作得很好,但是随着流量的增加(每分钟/小时10K次访问),整个系统会变得不堪重负,CPU会进入崩溃区。这也是一种危险的方法,因为我的所有功能都在一个实例上。作为一个快速的解决方案,我使用我的PM2管理器对服务器(1)进行了集群化,现在它的工作更好了。但作为一个长期的解决方案,我需要拆分这些东西并使用负载平衡。这就是我想要将其拆分为不同的EC2实例的方法:
- NodeJS Express Server(后端)+NodeJS Express Server(后端)+两者之间的负载均衡器-每个都具有512MB RAM、1个CPU
- NodeJS“微服务”Express服务器-512MB RAM,1个CPU
- AWS RDS上的PostgreSQL(1GB RAM,1CPU)
- 对AWS弹性痛(cache.t2.micro)
- ReactJS应用程序(前端)-512MB RAM,1个CPU
现在我有两个问题:
- 我应该平衡我的后端(两个服务器副本)还是我的前端(ReactJS应用程序)的负载?或者两者兼而有之?
- 我是否应该为后端获得更多CPU(每个2 CPU)?因为现在有了这个新的架构,我就不能像以前那样对它进行集群了。什么会更有效率?将服务器群集在2个CPU上,或在2个服务器之间进行负载平衡,每个服务器有1个CPU?