【问题标题】:Load balancing since Node v0.12.2 - cluster, pm2 or nginx从 Node v0.12.2 开始的负载平衡 - 集群、pm2 或 nginx
【发布时间】:2015-06-15 03:40:34
【问题描述】:

在 Node v0.12.2 中,集群模块supports Round-Robin (RR) load balancing,确保负载比之前的操作系统级负载平衡更均匀。

所以现在我们被宠坏了:

  1. 使用cluster 模块
  2. 使用pm2,它在后台使用集群模块
  3. 使用nginx
  4. 使用HAProxy

我知道这个出色的 post 以及 other answers 在 SO 上,但没有一个解决了具有 RR 模式的较新集群模块。所以问题归结为:

仅从它们的负载均衡能力判断,我应该使用pm2还是nginx

【问题讨论】:

  • 即使每个请求的资源需求相等,也只会更多。
  • @KevinB “它”是指节点集群?但是nginx 不会遇到同样的问题吗?它具有三种不同的负载平衡模式,其中没有一种考虑到每个连接的“资源需求”。
  • 你可以同时使用。您还可以通过使用fork_mode 而不是cluster 在pm2 前面使用HAProxy。 pm2 集群只不过是引擎盖下的 node cluster
  • @soyuka 如何同时使用nginx 和集群来实现负载平衡?据我所知,使用nginx,您必须为同一应用程序的不同实例指定不同的端口,而使用集群,您可以让所有实例监听同一个套接字但产生不同的线程。
  • 我是说在 fork mode 中使用 nginxpm2

标签: node.js nginx load-balancing haproxy pm2


【解决方案1】:

TL;DR

如果只是 pm2nginx 相比,请选择 nginx。 更好:两者兼而有之。 最佳:更广泛的设置。

如果您想要最成熟的负载平衡功能,请使用HAProxy。这是做好一件事。您将获得 SSL 终止、ACL 并且它非常轻量级。我无法用数字来证明,但我觉得它对 http 请求的影响最低。一个很好的阅读是this

如果您还需要提供(至少一些)静态内容,您的 goto 选项是 nginx,因为它在该领域具有卓越的功能。在您的列表中,它也是唯一提供此类功能的。除了node 本身,但做得很差。

pm2 感觉 IMO 很重,而且往往更容易崩溃。它的进程负载平衡功能非常好,可以确保节点进程的正常运行时间。它抽象了cluster

cluster 感觉只是“被修复”到最低限度。在过去,也许仍然是 os-level 支持导致不同平台上的不同行为。例如,偏向单一进程。

我目前的设置是:

  • HAProxy 用于集群范围的负载平衡,包括平衡每台机器的多个进程实例
  • 静态内容的 CDN(例如Cloudinary
  • pm2 用于进程负载平衡

【讨论】:

  • 我们可以在 haproxy 中使用 pm2 集群模式吗?
猜你喜欢
  • 1970-01-01
  • 2018-06-02
  • 2014-12-18
  • 2017-06-19
  • 2015-03-20
  • 2012-04-16
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
相关资源
最近更新 更多