【问题标题】:Guidelines for Scaling on Heroku PlatformHeroku 平台上的扩展指南
【发布时间】:2015-12-10 13:19:38
【问题描述】:

我在 free Dyno 上运行一个基于 NodeJS 的应用程序,连接到 mongohq-MongoDB。我想将它迁移到使用爱好 Dyno,这样做的动机不仅是避免睡眠时间,而且是为了实现更高的 HTTP 流量吞吐量。

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

Procfile 文章中,据说web 进程类型是唯一将从Heroku routing-mesh 接收HTTP 流量的进程。

所以我的问题是:

  1. 当已经有一个 hobby Dyno 运行时,执行“heroku ps:scale web+2”将导致在同一个 Dyno 上拥有 +2 Web 进程或添加两个 hobby em> Dynos(总共三个爱好 Dynos)?
    • 总共三个爱好 Dynos 意味着 3 个 Web 进程和 27 个非 Web 进程可用?
  2. this 的回答中,建议使用cluster 模块来fork 线程来处理HTTP 请求,如何确定应该创建的worker 数量(在// fork worker processes循环)?
  3. 我应该如何决定何时水平扩展我的应用程序(添加更多相同类型的 Dynos)或垂直扩展(更强大的 Dynos,如标准 1X/2X)
    • 应触发水平缩放以处理更高数量的请求?
    • 应触发垂直刻度以处理较重的处理(需要更多的计算资源来响应相应的请求?)

注意,

this 答案的Scaling 部分中,关于上述问题#1,Dynos 的结果仍然不清楚。


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

【问题讨论】:

    标签: heroku deployment architecture scalability


    【解决方案1】:

    我会按顺序处理这些...

    1. 不,您在爱好层中有 10 种流程类型,这意味着如果您 有 1 个网络测功机,您可以再运行 9 个测功机 同一个应用程序,这另外 9 个可以是您的 Procfile 中的任何条目。

      您只能有一个网络测功机,其余的是您的 Procfile 中的其他(最多 9 个)条目。

    2. 这主要是由记忆决定的,这取决于你在做什么 你的应用程序,如果它相当小,那么你可以运行更多, Node.js 集群工作者是独立的 Node.js 进程,发生这种情况 共享同一个套接字,操作系统将请求分发到 进程。

    3. 您需要在此处考虑请求的响应时间,如果您是 看到 "slow" 请求,你要么优化,要么当你确定 您已优化,您需要扩大规模,这可能涉及也可能不涉及 增加运行测功机的数量,这可能是你的事情 与正在减慢请求的应用程序对话(例如数据库或外部 服务)。

    什么定义了“慢”请求?

    嗯...您可能会考虑将“budget”作为响应时间,但您需要测量请求/响应时间,通常是相当高的粒度,这样您就可以隔离导致响应缓慢的原因,并确保您扩展正确的部分,如果它是一个优化不佳的数据库查询导致您悲伤,如果它可能使事情变得更糟,那么将您的测功机计数加倍将不会取得任何成果,因此您需要测量整体响应时间和魔术请求.

    水平缩放和垂直缩放是完全不同的,这个问题的答案取决于你的应用程序,更大的测功机有更多的内存,这意味着它们也许可以在内存中缓存数据,或者处理来自外部服务的更大的有效负载,还有性能- M 和 Performance-I 测功机“专用”于客户,因此,您将受益于更可预测的负载曲线。

    如果您有多个网络测功机,那么 Heroku 路由器将在它们之间随机分配传入的请求,这意味着它们将在一段时间内收到大致相同数量的请求,并且“小定律”适用于此处,有一个很好的解释如何将其应用于 Web 请求here,如果您想要的并发请求,在当前平均响应时间不起作用,您有两个选择,减少平均响应时间,或增加您的容量。

    此外,爱好层不会让您的测功机更快,它允许您拥有更多进程(测功机)并且它们可以每天 24 小时运行,但您需要使用较大的测功机类型之一才能获得性能提升。

    【讨论】:

    • 关于#1,在Default Scaling Limits 部分中指定“免费和爱好测功机类型仅支持每个进程类型最多运行一个测功机。”这意味着如果我想添加 web dynos,我需要添加更多 Hobby 实例,对吗?
    • 您不能在爱好层的单个应用中添加多个 web-dyno。
    • 感谢您澄清这一点。感谢您的详细回答,我相信 Heroku 甚至其他社区都会从上面的有用信息和想法中受益:)
    猜你喜欢
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多