Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 扩展以在短时间内支持大量流量_Ruby On Rails_Amazon S3_Scaling_Load Testing_Stress Testing - Fatal编程技术网

Ruby on rails 扩展以在短时间内支持大量流量

Ruby on rails 扩展以在短时间内支持大量流量,ruby-on-rails,amazon-s3,scaling,load-testing,stress-testing,Ruby On Rails,Amazon S3,Scaling,Load Testing,Stress Testing,到目前为止,我们的网站拥有适度的流量。我们的开发人员中没有一个是大型运营人员,但我们一直保持领先地位,并保持网站快速运行。这就是说,我们的开发团队已经捉襟见肘,我们积累了一些技术债务,还有很多机会进行优化 在没有详细说明的情况下,我们刚刚发现,我们预计在不久的将来,在很短的时间内会有大量的流量。在几小时内点击数达到几百万次。缩放是一回事,但这比我们现在看到的要大几个数量级 我们是一个使用ELB和Postgresql托管在S3上的Rails应用程序 在这种情况下,我想为扩展和负载测试的广泛起点提供

到目前为止,我们的网站拥有适度的流量。我们的开发人员中没有一个是大型运营人员,但我们一直保持领先地位,并保持网站快速运行。这就是说,我们的开发团队已经捉襟见肘,我们积累了一些技术债务,还有很多机会进行优化

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

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

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

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

    • 祝贺你,我希望你的期望成真

      鉴于现有信息,这是一个很难全面回答的问题。例如,您的站点是否大量使用数据库读取、写入或两者兼而有之(并且您的分片/复制策略是否符合您的数据库紧张程度)?带宽是一个问题吗?显而易见的一点是,要确保您能够访问适当的硬件,并且无论您使用什么样的方法来配置/部署您的硬件,都是最新的,并且可以正常使用。你经常可以在流量突然增加时抛出硬件,直到你找到瓶颈的根源为止(是的,你会在不方便的时候发现它们!)

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

      1) 尽可能地缓存任何内容。注意缓存过期等。 2) 确保数据库设置了适当的索引(基本上,您应该在搜索的任何字段上都有索引) 3) 仔细观察日志,以确定潜在的长查询、N+1查询、长视图渲染等。 4) 做一些像Shopify在这篇文章中概述的事情: 5) 为堆栈的每一层设置一个好的监控系统(Monit、God等)——流量的突然激增会在意想不到的地方迅速使应用程序瓶颈,并导致更多问题。级联反应可以很快发生。 6) 设置cron以自动执行您当前手动执行的所有小任务…一旦遇到流量高峰,您可能会忘记执行这些任务。 7) 谷歌缩放rails,你会看到大量的好信息。 8) 等等,等等,等等

      你可以使用一些分析工具(rubyperf,或者像NewRelic之类的工具),不管你从他们那里得到什么样的响应,最好是把它们看作一个粗略的基线。原因很简单,您的评测依赖于您的硬件堆栈,而硬件堆栈肯定会根据实际的流量模式而变化。如果你有一个只有一页静态内容的网站,那么做起来非常容易。如果你有一个数据库不断增长、流量不断增长的CMS网站,那么做起来就非常困难

      祝你好运

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

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

      如果你在AWS上运行,你是安全的一半,你可以很容易地放大和缩小

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

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

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

      AWS提供自动缩放api和命令行工具,非常简单

      你不必担心带宽等问题,但我也承认安吉洛的答案

      您可以使用elastic mem cache来缓存应用程序。如果需要加速应用程序,请使用CDN。RDS可以管理高达30000 IOPS,这是一个怪物,它将为您做很多工作

      如果你需要帮助,尽管问我


      (免责声明:我是一家电子商务公司的高级devOps工程师,使用ruby on rails)

      能否将需要的信息缓存到静态页面中?S3将为那些没有问题的人服务。您是否希望在数据库中执行大量操作?阅读?写?查询是否特定于单个实体/用户(不是复杂查询或大规模连接)?有很多负载测试应用程序,谷歌应该帮助你找到。你看过EC2的自动缩放功能吗?我相信,它们有一些可以在CPU/内存上触发的功能。另外,静态资源也可以通过Cloudfront完成。谢谢,这很有帮助,并且在很大程度上证实了我们的方向。我们正计划转向RDS——我们有一些特定于Postgresql的查询需要整理,没有什么大问题,大部分情况下我们只是使用ActiveRecord的方法,所以我预计不会有大问题。我还将研究弹性内存缓存。