Heroku平台缩放指南

我在一个免费的Dyno上运行一个基于NodeJS的应用程序,连接到mongohq-MongoDB。 我想迁移它以使用业余爱好Dyno,并且这样做的动机不仅可以避免睡眠时间,还可以启用更高的HTTP通信量吞吐量。

阅读Scaling文档和Procfile文章让我很困惑如何在Heroku上进行缩放。

在Procfile文章中,据说web进程类型是唯一一个将从Heroku路由网格接收HTTP流量的进程。

所以我的问题是:

  • 当已经有一个业余爱好Dyno运行时,执行'heroku ps:scale web + 2'会导致在同一个Dyno上有+2个Web进程或添加两个业余爱好Dynos(总共有三个业余爱好者Dynos)?
  • 三种业余爱好Dynos的总和意味着3个Web进程和27个非Web进程可用?
  • 在这个答案中,建议使用集群模块来分叉线程来处理HTTP请求,如何确定应该创建的工作数量(在// fork worker processes循环中)?
  • 我应该如何决定何时水平调整我的应用程序(添加更多相同类型的Dynos)垂直(更强大的Dynos,比如standard-1X / 2X)
  • 应该触发水平刻度来处理更高的请求数?
  • 应该触发垂直标度来处理较重的处理(需要更多的计算资源来响应相应的请求?)
  • NB,

    在这个答案的缩放部分中,结果Dynos对于上面的问题#1仍然不清楚。


    请考虑应用程序优化(例如查找/移除瓶颈等)超出了这个问题的范围,因为它的目标是更好地理解Heroku平台上的资源利用率。


    我会按顺序把这些...

  • 不,您在Hobby层中有10种流程类型,这意味着如果您有1个网络动态管理器,则可以为同一个应用程序运行另外9个动态管理器,这9个进程可以是您的Procfile中的任何条目。

    您只能有一个网页动态文件,其余的是您的Procfile中的其他(最多9个)条目。

  • 这主要取决于内存,它取决于你在应用中做什么,如果它相当小,那么你可以运行更多,Node.js集群工作者是单独的Node.js进程,恰好共享相同的套接字,并且操作系统跨进程分发请求。

  • 您需要考虑这里的请求响应时间,如果您看到“缓慢”的请求,您要么进行优化,要么确定优化之后,您需要扩大规模,这可能涉及或不涉及增加的运行dynos,它可能是你的应用程序谈到的东西是缓慢的请求(例如数据库或外部服务)。

  • 什么定义了“缓慢”的请求?

    那么......您可能会考虑响应时间的“预算”,但是您需要测量请求/响应时间,通常需要相当高的粒度级别,以便您可以确定导致响应缓慢的因素,并确保您进行缩放正确的部分,加倍你的动态计数不会实现任何事情,如果它是一个糟糕的优化数据库查询导致你的悲伤,如果有任何事情会让事情变得更糟,所以你需要测量整体响应时间和魔法请求。

    水平缩放和垂直缩放非常不同,对此的回答取决于您的应用程序,较大的dynos具有更多内存,这意味着它们可能会缓存内存中的数据,或者处理来自外部服务的更大的有效负载,即性能M和性能-I dynos对客户是“专用的”,所以,您将受益于更多可预测的负载配置文件。

    如果你有多个web dynos,那么Heroku路由器会随机分配传入的请求,这意味着他们在一段时间内会收到几乎相同数量的请求,这里适用“Little's Law”,这里有一个很好的解释如果您希望的并发请求在当前的平均响应时间内不起作用,那么您可以选择两种方法:缩短平均响应时间或增加容量。

    此外,Hobby层不会让你的dynos更快,它允许你有更多的进程(dynos),并且他们可以每天运行24个小时,但是你需要去一个更大的dyno类型来提高性能。

    链接地址: http://www.djcxy.com/p/52607.html

    上一篇: Guidelines for Scaling on Heroku Platform

    下一篇: progress app deployment