在短时间内交通量大

时间:2013-02-04 19:55:51

标签: ruby-on-rails ruby-on-rails-3 performance heroku

我在这里寻找一些建议。我学校的学生部分注册流程在线,涉及约6,000名学生

他们以先到先得为基础。每年他们都会在中午开放这个网站,洪水的人们会尽快注册,以获得良好的座位。每年都没有失败,服务器崩溃,每个人都疯了。

经过几年的挫折,我已经提出重做他们的注册系统。

我的计划是在rails上用ruby重写它,并使用heroku进行托管。

  • heroku dyno一次只能处理一个请求吗?
  • Heroku可以扩展到50个dynos。这足以处理大约6,000名用户,在短时间内每次交易可获得约5次综合浏览量,比如半小时?
  • 在深入研究这个项目之前,您可以给我任何有用的策略或提示吗?

2 个答案:

答案 0 :(得分:2)

  

heroku dyno一次只能处理一个请求吗?

是。 Heroku dynos是单线程的。

  

Heroku可以扩展到50个dynos。这足以解决问题   6,000个用户,每笔交易的浏览量约为5次   时间,说半个小时?

这取决于您的网页加载速度。为了论证,我们假设每页请求需要2次(根据Google Analytics推荐),您需要加载6,000 users x 5 page views / 30 minutes - 每分钟1000次页面浏览量。

每页加载2秒,一个dyno每分钟加载30页浏览量。在50 dynos,这将是每分钟1500页面浏览量。这显然会让您超出整体目标,并为您留下一些错误空间,但如果所有6000位用户同时点击该页面,则单个Heroku应用可能无法跟上,具体取决于你的超时。您需要实现用户队列系统 - 如下所述。

  

在深入研究之前,您可以提供任何有用的策略或提示   项目

所有这一切,2s加载时间可能会有所不同,具体取决于您的页面需要加载的资产,与数据库交互所需的数量,查询,缓存等。您的页面也可能更快地提供服务。 / p>

您还需要担心所有用户的初次命中。这可以通过先来先服务队列系统来处理 - 类似于Ticketmaster使用过的队列系统。这可以通过AWS SQS或您对队列系统的偏好来完成。

使用用户队列和资产缓存以及常见的数据库查询,您应该可以使用50或更少的dynos完成此操作。

编辑:我正在接受Heroku将运行50个网络dynos的消息。他们在定价页面上显示最多24个,但我找不到任何信息。

答案 1 :(得分:1)

  

heroku dyno一次只能处理一个请求吗?

这取决于您使用的网络服务器(https://devcenter.heroku.com/articles/dynos#dynos-and-requests)。如果你想在dyno中更多并发,我建议你看一下像Puma这样的东西。

  

Heroku可以扩展到50个dynos。这足以处理大约6,000名用户,在短时间内每次交易可获得约5次综合浏览量,比如半小时?   在深入研究这个项目之前,您可以给我任何有用的策略或提示吗?

你可以拥有50多个dynos。对于你的应用程序的具体答案将比猜测或概括更好。针对您的网站运行负载测试(例如,使用Blitz)并找出实际数字。附加组件的成本按每秒按比例计算,因此您只需支付安装时间。因此,请确保在完成测试后卸载或降级Blitz。