heroku - Heroku 平台上的扩展指南

标签 heroku deployment architecture scalability

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

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

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

所以我的问题是:

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

  • 注意,

    this 的缩放部分中回答,关于上面的问题#1,Dynos 的结果仍然不清楚。

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

    最佳答案

    我会按顺序收拾这些...

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

    您只能拥有一个网络测功机,其余的是您的 Procfile 中的其他(最多 9 个)条目。
  • 这主要是由内存决定的,这取决于你在做什么
    你的应用程序,如果它相当小,那么你可以运行更多,
    Node.js 集群 worker 是独立的 Node.js 进程,发生这种情况
    共享同一个套接字,操作系统将请求分发到
    过程。
  • 您需要在此处考虑请求的响应时间,如果您是
    看到“缓慢”的请求,你要么优化,要么当你确定
    您已优化,您需要扩大规模,这可能涉及也可能不涉及
    增加运行测功机的数量,这可能是你的事情
    与正在减慢请求的应用程序对话(例如数据库或外部
    服务)。

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

    嗯...您可能会考虑使用“budget”来表示响应时间,但您需要测量请求/响应时间,通常是相当高的粒度,因此您可以隔离导致响应缓慢的原因,并确保你缩放正确的部分,如果它是一个糟糕的优化数据库查询导致你悲伤,如果它可能使事情变得更糟,那么将你的测功机计数加倍将无济于事,所以你需要测量整体响应时间和魔术请求。

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

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

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

    关于heroku - Heroku 平台上的扩展指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566504/

    相关文章:

    node.js - 简单的 NodeJS 部署到 Heroku

    node.js - Heroku 应用程序在几个请求后停止响应

    c# - 如何在 C# 控制台应用程序中播放背景音乐

    java - 开发应用程序监控仪表板的建议。类似于 Nagios 的东西

    python - Heroku 上的交互式 Ipython 笔记本

    javascript - moment.js isoWeek 不适用于 Heroku 实例

    javascript - 部署 Azure 应用服务时无法安装 Node 模块

    Java、JPA、Glassfish、无效资源 : jdbc/__default__pm

    .net - 使用经典 ASP 在 Web 场中共享 session

    php - PHP 和 MySQL 中的评级系统