响应时间与吞吐量检查是否需要升级Heroku?

时间:2018-02-15 13:41:02

标签: heroku

Heroku显示响应时间(毫秒),吞吐量(请求/分钟,确定,失败)。怎么知道我需要升级他们的服务?如果有更多用户来,失败请求的数量会增加吗?

enter image description here

1 个答案:

答案 0 :(得分:5)

(免责声明:我在为仪表板中的该页面提供数据的团队工作。)

容量规划不是一个简单的问题,如果没有更多细节,它会特别难。考虑到响应时间和每个时间间隔的请求数量是部分,但通常不是整个故事。

首先,请问:你的目标是什么?您是否考虑了目标延迟?您是否希望将因发布或某些新闻而收到的请求数量翻倍?您的应用程序依赖于哪些其他系统(例如PostgresQL,另一个基于HTTP的API,其他数据库等)?您正在使用的编程语言和软件的特征是什么?除了仪表板显示的内容之外,您还有其他任何测量方法可以让您更深入地了解时间花费的时间以及资源的饱和程度吗?您是否进行过任何基准测试或负载测试,为您提供应用程序可以管理的理论基础?

其次,让我们创建一个简单的场景来演示为什么其中一些问题是必要的。

我有一个部署到1台服务器的小型Web应用程序,该应用程序不支持并发,这意味着我一次只能处理1个请求。如果响应请求需要500毫秒,那么应用程序曾经做的最好的是每秒提供2个请求。如果500毫秒不稳定,比如说它在400毫秒到600毫秒之间变化,那么应用程序甚至总是每秒执行2次请求,但它可能会平均掉到2r / s。

如果我们可以减少提供请求所需的时间,那么,我们每秒可以执行超过 2个请求。或者,如果没有办法减少提供请求所需的时间,那么我们唯一能做的就是增加我们可以同时处理的请求数量。如果我们一次只能处理1个请求(让这些网络工作者调用),一次只能处理4个请求,那么我突然可以处理 8个请求第二,假设每个请求的延迟保持不变。

在Heroku上,有两种方法可以增加"网络工作者"。首先是运行更多的dynos。第二种是适当地配置应用程序的Web服务器并发设置。对于Heroku上的一些设置,buildpack将提供适用于大多数情况的默认设置。

所以,既然我们在能力背后的基本理论的同一页上,让我们谈谈如何更好地弄清楚你的是什么

您的中位回应时间在您显示的时间段内以3秒的速度偷看。这是一个异常现象(至少在这段时间内),虽然我很想知道发生了什么,但我认为我们应该专注于找出为什么 P95(即95)您的请求的百分比更快比该值更高),以及这些错误是什么。

在仪表板上,有一个名为&#34; Events。&#34;图表是否显示H* errors?如果他们这样做,那将为您提供更多洞察力。如果,您将需要依赖application logs。如果您在终端上使用heroku logs -t -a <your application>(或者您的日志记录插件)观察日志一段时间,您将看到路由器生成的请求日志。如果你看到一个带有status=5XX的日志(其中XX是00或其他),希望,你的应用程序也会在同一时间吐出错误,让你深入了解错误原因正在发生。也许它只是某种类型的数据库错误(可能是超时错误?不确定)。

这引出了我的下一个建议。我们经常看到数据库查询需要很长时间,这会导致响应时间变慢。在某些情况下,可以使用索引加快这些查询,或者重写这些查询以减少查询/减少工作量。但是,为了获得对该问题的任何洞察,我们必须衡量一些事情,并查看一些数据库指标。如果您正在使用Heroku Postgres,那么dashboard已经可以提供一些信息。还有pg:diagnose命令和Postgres Devcenter page上的其他建议,可以让您更深入地了解您的数据库是否可能导致您的速度变慢。

我还建议,如果您的应用程序尚未发布自己的数据库相关时序数据,那么您就这样做了。您可以轻松地添加到每个数据库调用中,并找到花费最多时间的数据,然后您可以将注意力集中在这些调用上。 (将以下内容翻译成您的语言)

startTime = time.now() results = someDD.Query() print "someDB query took: ", time.now() - startTime, "seconds to complete"

这非常简单,而且非常提供信息。使用&#34; logs -t&#34;查看日志命令(或者如果你正在使用日志插件,那么)。

最后,我还要提出另一个建议。并不总是可以加速数据库调用,或者“减少工作量”#34;在请求处理程序中,如果您发现是这种情况,则有其他想法需要对应用程序的工作方式进行一些重组。 Worker Dynos, Background Jobs and Queueing上的Devcenter文章解释了我们在这些情况下推荐的架构,并提供了一些方向。

希望这对您有用,并为您提供了有关后续步骤的一些指导。我们有一个Autoscaling产品用于更高级别的dynos,但它最适合更大,更可预测的工作负载。我猜你现在正在做的请求数量,你最好的选择就是了解更多有关正在进行的事情并采取措施解决问题。

祝你好运!