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