Heroku平台的扩展指南

7 浏览
0 Comments

Heroku平台的扩展指南

我正在运行一个基于NodeJS的应用程序,连接到mongohq-MongoDB,在免费的Dyno上运行。我想把它迁移到使用hobby Dyno,这样做的动机不仅是避免睡眠时间,还包括支持更高的HTTP流量吞吐量。

阅读Scaling文档和Procfile文章让我对在Heroku上进行缩放的实现方式感到困惑。

Procfile文章中提到,web进程类型是唯一会从Heroku路由网格接收HTTP流量的进程。

因此我的问题是:

  1. 当已经有一个hobby Dyno在运行时,执行\'heroku ps:scale web+2\'会在同一个Dyno上添加+2个web进程还是添加两个hobby Dyno(共三个hobby Dyno)?

    • 三个hobby Dyno的总计意味着有3个web进程和27个非web进程可用吗?
  2. 这个答案中,建议使用集群模块来创建线程来处理HTTP请求。如何确定应该创建多少个workers (在// fork worker processes循环中)?
  3. 我应该如何决定何时水平扩展我的应用程序(添加相同类型的更多Dyno)或垂直扩展(更强的Dyno,如standard-1X/2X)

    • 水平缩放应该被触发以处理更高数量的请求?
    • 垂直缩放应该被触发以处理更重的处理(需要更多的计算资源来对应请求提供响应?)

N.B.,

这个答案的Scaling部分中,对于上面提出的问题#1,Dynos的结果仍然不够清晰。


请注意,应用程序优化(例如查找/删除瓶颈等)不在本问题的范围之内,因为它的目标是更好地理解Heroku平台上的资源利用率。

admin 更改状态以发布 2023年5月23日
0
0 Comments

我会按顺序解释...

  1. 不,Hobby层有10种过程类型,这意味着如果您有1个web动态进程,您可以运行另外9个运行相同应用的进程。这另外9个可以是Procfile中的任何条目。

    您只能有一个web动态进程,其余是Procfile中的其他(最多9个)条目。

  2. 这主要由内存决定,这取决于您的应用程序在做什么,如果它很小,那么您可以运行更多Node.js集群工作程序是单独的Node.js进程,它们共享同一个套接字,操作系统对进程进行请求分配。

  3. 您需要考虑这里请求的响应时间,如果您看到“慢”请求,您可以优化,或者当您确定您已进行了优化时,您需要进行扩展,这可能涉及增加运行动态的数量,也可能是您的应用程序所说的事情会减缓请求(例如,数据库或外部服务)。

什么定义为“慢”请求?

嗯...你可能会考虑为响应时间制定“预算”,但你需要测量请求/响应时间,通常需要较高的细粒度,以便您可以隔离导致缓慢响应的原因,并确保您扩展正确的部分。如果你的查询数据库很差,那么将dyno数量加倍将不会取得任何效果,如果有的话,它可能会使情况更糟糕,所以你需要测量总体响应时间和魔术请求。

水平扩展和竖直扩展有很大的不同,这取决于您的应用程序,更大的dynos有更多的内存,这意味着它们可以在内存中缓存数据,或处理来自外部服务的更大的负载,还有Performance-M和Performance-I dynos是“专用于”客户的,因此您将受益于更可预测的负载曲线。

如果您有多个web dynos,则Heroku路由器将随机分配传入的请求,这意味着它们将在一段时间内接收到大致相同数量的请求,并且“Little's Law”适用于Web请求这里有一个很好的解释如何将其应用于Web请求,如果您想在当前平均响应时间下获得所需的并发请求,则有两个选择,减少平均响应时间或增加容量。

此外,Hobby层不会使您的dynos更快,它允许您拥有更多的进程(dynos),它们可以全天候运行,但您需要选择更大的dyno类型才能获得性能提升。

0