我有一个使用 Openfire、Tomcat6 和 MySQL 堆栈的聊天应用程序。
目前,我已经在单个 Linux 微型实例(613 MB 内存)上安装了所有这些服务器。即使在 10-20 个低用户群的情况下,我也遇到了 CPU 过载问题,这在这里非常明显。
由于我是 Amazon EC2 的新手,有人可以建议我如何根据流量使用情况扩展我的架构吗?
我应该为每个应用服务器(openfire、mysql、tomcat6)使用单独的微实例吗?
我应该对整个服务器堆栈使用单个小型或中型实例吗?
背景中的一些因素:
高度依赖 MYSQL
由于文件传输导致内存占用率过高
网络应用程序与其他 Amazon 服务(如 S3、SES)交互
答案1
我会使用至少一个 m1.small 实例,或者更好的 m1.large 实例。微型实例实际上仅用于开发,因为即使没有用户,613MB 可能很快就会不够用。除此之外,您很可能会看到大量的 CPU 窃取时间,并且您的服务器在出现小规模 CPU 峰值后一段时间内不会做出反应。这非常烦人。
我会尝试让整个堆栈在每个实例上运行,除了 mysql-db。看看 RDS!您不需要自己设置高可用性 mysql 主从基础设施!
答案2
不要将微型实例用于生产,因为它们的 CPU 节流不可预测。在单个实例上运行所有内容更具成本效益,但如果您计划增长和扩展,最好在多个实例中设计和开发您的应用程序。
答案3
从长远来看,最好将应用程序服务器与数据库分开,以实现每个层的最大灵活性和可扩展性。RDS 目前是一个不错的选择,但请记住,它仅限于单个实例,如果流量意外激增超出最大实例的容量,则可能会遇到停机,然后您需要设置具有其他实例的集群,这很复杂。EC2 上的另一个选项是Xeround 的云数据库服务,它与 RDS 的不同之处在于它可以自动扩展到其他实例以适应额外的吞吐量并自动处理集群。至于应用程序服务器,您可以使用亚马逊的云监控特征。