我正在EC2实例上部署rails应用程序,我想将Auto Scaling配置为与Elastic Load Balancer一起使用。在特定的阈值上,我想生成一个新实例。配置自动缩放组的触发器时,我们有CPU利用率,网络或磁盘IO的选项;但作为一个rails应用程序,我将面临内存而非CPU或IO的资源紧张。
是否有人为rails应用程序成功配置了EC2 Auto Scaling?将AWS与rails一起使用的首选方法是什么?
仅供参考:我使用乘客作为应用服务器。
感谢您的时间。
答案 0 :(得分:1)
我没有使用Rails,但使用Tomcat中的java。我们使用tomcat阀门/脚本来检测内存使用情况,并将其作为自定义云观察指标发布到Amazon CloudWatch中。您可以根据监控此指标的云监控警报创建横向扩展触发器。
上述技术的某些部分甚至可以与轨道重叠。
答案 1 :(得分:1)
实际上,我认为您应该尝试根据您使用的实例类型调整您的Passenger配置(这是一篇关于此的文章:http://blog.scoutapp.com/articles/2009/12/08/production-rails-tuning-with-passenger-passengermaxprocesses)。这应该确保在满负荷时您使用所有可用的RAM,但是您不会产生比可用RAM更多的乘客实例。
根据我的经验,这导致所有资源(CPU和RAM)饱和,您可以根据CPU使用情况触发自动调度策略。您还应该调整实例类型以获得最佳性能(我已经使用了cc1.xlarge实例并取得了相当大的成功)。
如果您已设置基于RAM的自动缩放,则应该能够在CloudWatch上创建一个指标,该指标使用该指标监控RAM使用情况和自动缩放。创建指标只是使用CloudWatch API(http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/CloudWatch/Metric.html)定期发布指标数据。您可以创建每分钟运行一次的rails后台任务并发布度量标准数据。
答案 2 :(得分:0)
我认为您可以使用新的信令功能,监控内存指标并使用api启动实例:
http://aws.typepad.com/aws/2010/12/amazon-cloudwatch-alarms.html