Heroku平台扩展指南

4
我正在运行一个基于NodeJS的应用程序,连接到mongohq-MongoDB,在一个免费的Dyno上。我想将其迁移到使用Hobby Dyno,并且这样做的动机不仅是避免睡眠时间,而且还可以实现更高的HTTP流量吞吐量。
阅读Scaling文档和Procfile文章使我对在Heroku上如何进行扩展感到困惑。
Procfile文章中,它说web进程类型是唯一会从Heroku路由网格接收HTTP流量的进程类型。
所以我的问题是:
当已经有一个hobby Dyno正在运行时,执行'heroku ps:scale web+2'会导致在同一Dyno上添加两个web进程或添加两个hobby Dynos(总共三个hobby Dynos)?
  • 总共三个hobby Dynos意味着有3个Web进程和27个非Web进程可用吗?
this的答案中,建议使用cluster模块派生线程来处理HTTP请求,如何确定应创建多少工作器(在// fork worker processes循环中)?
我应该如何决定何时水平扩展应用程序(添加相同类型的Dyno)或垂直扩展(更强大的Dyno,如标准-1X/2X)
  • 应该触发水平缩放以处理更高数量的请求吗?
  • 应该触发垂直缩放以处理更重的处理(需要更多计算资源以响应相应请求?)

N.B,

this答案的Scaling部分,对于上面的问题#1,结果Dynos仍不清楚。
请注意,本问题的目的是更好地了解Heroku平台上的资源利用情况,因此应用程序优化(例如查找/删除瓶颈等)超出了本问题的范围。
1个回答

5
我会按顺序解释以下内容:
  1. 不,Hobby 层有 10 种进程类型,这意味着如果您有 1 个 Web dyno,则可以再运行另外 9 个 dyno,这些 dyno 可以是 Procfile 中的任何条目。

    您只能有一个 Web dyno,其余是 Procfile 中的其他(最多 9 个)条目。

  2. 这主要取决于内存,这取决于您在应用程序中所做的工作,如果它相当小,则可以运行更多,Node.js 集群工作进程是单独的 Node.js 进程,它们共享同一套接字,操作系统分配请求跨进程。

  3. 您需要考虑此处请求的响应时间,如果您看到“慢”请求,则需要进行优化,或者当您确定已经进行了优化时,您需要扩展,这可能涉及增加运行 dynos 的数量,也可能是您的应用程序正在与之交谈的东西导致请求变慢(例如数据库或外部服务)。

什么定义了“慢”请求?

嗯...你可能需要考虑 "预算" 来响应时间,但你需要测量请求/响应时间,通常要相当高的粒度,这样你才能确定是什么导致了缓慢的响应,并确保你扩展正确的部分。如果一个未经优化的数据库查询导致问题,那么增加 dyno 数量将毫无作用,甚至可能会使情况变得更糟,因此你需要测量总体响应时间和魔术请求数。

水平扩展和垂直扩展是非常不同的,答案取决于你的应用程序。更大的 dynos 有更多的内存,这意味着它们可以在内存中缓存数据或处理来自外部服务的更大负载。此外,性能-M 和性能-I dynos 是专门为客户提供的,因此你将受益于更可预测的负载配置文件。

如果您有多个Web Dynos,则Heroku路由器将随机分配传入的请求,这意味着它们在一段时间内将接收到大约相同数量的请求,并且“Little's Law”在这里适用,如何将其应用于Web请求的解释可以在此处找到。如果您当前所需的并发请求与平均响应时间不匹配,则有两个选择:减少平均响应时间或增加容量。
此外,Hobby层不会使您的dynos更快,它允许您拥有更多进程(dynos),并且它们可以全天候运行,但是您需要使用更大的dyno类型才能获得性能提升。

关于#1,默认缩放限制部分指定“免费和爱好者”动力类型仅支持每个进程类型运行一个最大动力。这意味着如果我想添加Web动力,我需要添加更多的Hobby实例,对吗? - Yarden Bar
在 Hobby 层中,您无法向单个应用程序添加多个 Web Dyno。 - bigkevmcd
谢谢您澄清这一点。感谢您提供详细的答案,我相信Heroku甚至其他社区都将从上述有用的信息和想法中受益 :) - Yarden Bar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接