基于Node.js的express app在ec2微实例上运行速度非常慢

基于Node.js的express app在ec2微实例上运行速度非常慢,node.js,amazon-web-services,amazon-ec2,Node.js,Amazon Web Services,Amazon Ec2,以下是设置: ec2微实例 MySQL 5.6 Redis服务器 Node.js(基于express的应用程序) Nginx作为反向前端代理 很慢。非常慢。我知道这是一个微型实例,你可以得到你所付出的(考虑到它是免费的) 我甚至使用了MySQL的交换文件,速度太慢以至于无法使用。我是否应该启动两个中型实例(一个用于db/redis,一个用于app server)?把所有的东西都放在一起,然后升级到一个大的实例 还有,我应该找什么?MySQL需要更多RAM,应用服务器需要更多CPU?任何输入都

以下是设置:

  • ec2微实例
  • MySQL 5.6
  • Redis服务器
  • Node.js(基于express的应用程序)
  • Nginx作为反向前端代理
很慢。非常慢。我知道这是一个微型实例,你可以得到你所付出的(考虑到它是免费的)

我甚至使用了MySQL的交换文件,速度太慢以至于无法使用。我是否应该启动两个中型实例(一个用于db/redis,一个用于app server)?把所有的东西都放在一起,然后升级到一个大的实例


还有,我应该找什么?MySQL需要更多RAM,应用服务器需要更多CPU?任何输入都会非常有用(尤其是那些在过去使用过类似设置的输入)。

请记住,EC2微实例会限制cpu—可能会有一点喘振,但如果您将一致的cpu负载放在微实例上,它会限制cpu。它们真的是为开发而设计的——我以前使用过微实例作为web服务器,并且在负载增加的时候,当它们节流时付出了代价——基本上停止了

至于你应该使用什么,你真的需要根据数据库大小、工作集大小、用户数量等的基准测试和分析来评估你自己的需求

也就是说,如果你打算扩展你的应用程序,试图把所有东西都放在一台虚拟化服务器上是不可能正常工作的。EC2目前有许多不同的实例类型,针对不同的使用场景进行了优化,以不同的方式强调cpu、内存、本地磁盘或网络容量。扩展应用程序的node.js/nginx端与MySQL和Redis非常不同


就我个人而言(这只是我的观点),我会从两个Small开始,一个是MySQL和Redis,另一个是node和nginx,并仔细监控内存、cpu和磁盘使用情况。EC2(或任何主要的基于云的虚拟实例提供商)最大的优点是,您可以轻松地进行实验并转移到另一种实例类型。为了便于实现这一点,我肯定会使用EBS卷作为您的数据库,因为它使以后移动它变得非常容易(更不用说使用卷快照进行备份)。

好的答案取决于您应用程序的资源和使用情况。您已经为内存缓存设计了设置,但是,微实例上没有太多内存。您可以停止实例并将其切换为小实例。然后逐步提高,直到获得所需的性能。@datasage那么,在这种情况下,我可能(现在)应该将所有内容都放在一起,而不是将其拆分到不同的实例上?很公平。我应该把MySQL放在EBS上吗?如果你正在运行一个微实例,你的MySQL数据应该放在一个EBS卷上。实例存储在微实例上不可用。在实例之间划分服务还有其他原因,但这将取决于您当前的负载、启动时间要求和成本。价格计算器上的小实例没有针对EBS进行优化有什么原因吗?正在尝试解决如何设置所有这些。是的,EBS优化实例旨在支持通过输入到已配置iops EBS卷的高容量。如果您需要这种级别的性能,您可能需要一些具有大型实例或更大实例马力的东西,因此没有必要为小型或中型应用程序提供这种性能。对于您的用例(在micro上运行一切的人),这不应该是一个问题。