-1

到目前为止,我们的网站的访问量不大。我们的开发人员都不是大运维人员,但我们一直领先于它,并保持网站快速启动和运行。也就是说,我们的开发团队很紧张,我们积累了一些技术债务,还有很多优化的机会。

在没有详细说明的情况下,我们只是发现我们将在很短的时间内预计在不久的将来会有大量的流量。几小时内点击数百万次。缩放是一回事,但这比我们现在看到的要大几个数量级。

我们是使用 ELB 和 Postgresql 在 S3 上托管的 Rails 应用程序。

在这种情况下,我想针对扩展和负载测试的广泛起点提出一些建议。

  • 更新:抱歉,EC2,深夜 :)
4

2 回答 2

2

@LastZactionHero 很有趣的问题,让我详细回答你,我希望你在谈论一些电子商务应用程序,企业或 B2B 应用程序没有看到这样的尖峰。由于您已经提到您在 s3 上托管您的 rails 应用程序。让我澄清几件事。1)您不能在 s3 上托管 rails 应用程序。S3 是简单的存储服务。只能存储文件的地方。2) 我猜您已经在 AWS ec2 上托管了您的 rails 应用程序,并在 ec2 实例上方附加了一个弹性负载均衡器,这非常好。

3)您在 ec2 实例上部署了一个自我管理的 Postgresql。

如果您在 AWS 上运行,那么您就安全了一半,并且可以轻松扩展和缩减。

我可以在您当前的模型中看到一个问题,即您的 db. AWS 已将数据库作为服务。这就是所谓的关系数据库服务。它支持 Mysql Oracle 和 MS SQL 服务器。

RDS 具有许多功能,例如自动备份数据库、高 IOPS 等。

但它不支持你的 Postgresql。您需要拥有或管理一个自我管理的 ec2 实例并运行 postgresql 数据库,但要确保它的故障安全,并且您确实有适当的备份和恢复系统。

AWS 提供了 Auto Scaling api 和命令行工具,非常简单。

您不必担心带宽问题等,但我也承认 Angelo 的回答。

您可以使用弹性内存缓存来缓存您的应用程序。如果需要加速您的应用程序,请使用 CDN。RDS 可以管理高达 30000 IOPS,它是一个怪物,它会为你做很多工作。

如果您需要任何帮助,请随时问我。

(免责声明:我是一名在电子商务公司工作的高级 devOps 工程师,在 Rails 上使用 ruby​​)

于 2013-04-04T06:17:45.547 回答
1

恭喜,我希望你的期望成真!!

鉴于现有信息,这是一个很难全面回答的问题。例如,您的站点是否在数据库读取、写入或两者方面都很繁重(并且您的分片/复制策略是否符合您的数据库压力)?带宽是一个问题,等等?显而易见的要点将集中在确保您可以访问适当的硬件,并且您用于配置/部署硬件的任何接收方都是最新的并且可以使用。您通常可以在流量突然激增的情况下使用硬件,直到找到您发现的任何瓶颈的根源(是的,您会在不方便的时候发现它们!)

关于扩展您的应用程序,您至少应该:

1)尽可能缓存。注意缓存过期等。 2)确保您的数据库设置了适当的索引(本质上,您应该在您正在搜索的任何字段上都有一个索引。) 3)密切关注您的日志以识别潜在的长查询,N +1 查询、长视图渲染等 4) 执行 Shopify 在这篇文章中概述的内容:http: //www.shopify.com/technology/7535298-what-does-your-webserver-do-when-a-用户点击刷新#axzz2O0gJDotV 5) 为堆栈的每一层设置一个良好的监控系统(Monit、God 等)——突然的流量高峰会在意想不到的地方迅速成为应用程序的瓶颈并导致更多问题。级联可能很快发生。6) 设置 cron 以自动执行您目前手动执行的所有小任务……一旦您处理流量高峰,您可能会忘记执行这些任务。7)谷歌缩放轨道,你会看到大量的好信息。8)等等,等等,等等……

您可以使用一些分析工具(rubyperf 或 NewRelic 之类的工具等)从它们那里得到的任何响应都可能最好被视为一个粗略的基线。简单的原因是您的分析取决于您的硬件堆栈,这肯定会根据实际流量模式而改变。如果您有一个包含一页静态内容的站点,这很容易做到……如果您的 CMS 站点具有不断增长的数据库和不断增长的流量,则很难做到。

祝你好运!!!

于 2013-04-04T05:35:59.963 回答