Node.js 中的 Clustering 是什么?

2025 年 2 月 27 日 | 阅读 3 分钟

在本文中,我们将讨论 Node.js 中的集群及其工作原理和实现。

什么是聚类?

集群是 Node.js 的一种方法,它利用多核处理器。它提高了 Node.js 应用程序的可伸缩性和速度。然而,Node.js 默认被限制只能使用一个 CPU 核心,并且在单线程上运行。这种限制可能导致性能瓶颈,高流量应用程序常常因此受到影响。一个线程不足以充分处理工作。

为了克服这一限制,Node.js 提供了一个内置的 cluster 模块,允许您创建工作进程。这些是子进程,它们并发执行并共享服务器端口。这样,应用程序就可以充分利用多核 CPU。每个工作进程都是一个独立的 Node.js 进程实例。这种技术确保了更好的性能和高效的资源利用。

集群如何工作?

Node.js 使用内置的 cluster 模块来实现 Node.js 集群。集群的工作原理在下面有详细说明。

  • 主进程: Node.js 应用程序启动主进程,该进程负责分发传入的连接并管理工作进程。
  • 派生工作进程: 主进程派生多个工作进程。每个工作进程在其自己的内存区域中运行,并且是 Node.js 程序的独立实例。
  • 所有工作进程共享一个服务器端口。因此,每个工作进程都可以处理传入的连接。
  • 当主进程使用负载均衡方法时,工作进程会将传入的连接在它们之间共享。最常用的方法是轮询法,即按顺序将连接分配给每个工作进程。
  • 进程间通信(IPC)通道允许工作进程和主进程之间进行信息交换。它们还便于主进程对工作进程进行有效监督和管理。

集群的优势

尤其是在生产环境中,集群为 Node.js 应用程序带来了许多好处。其中一些如下:

  • 提高性能: 通过创建多个工作进程,使用集群的 Node.js 应用程序可以同时处理更多请求。这可以提高性能,尤其是对于 CPU 密集型任务。
  • 可伸缩性: 由于集群,Node.js 应用程序可以水平扩展。随着需求的增加,可以创建更多的工作进程来处理额外的流量。
  • 容错性: 在工作进程崩溃或发生故障时,主进程有能力识别问题并替换新的工作进程。这确保了应用程序的健壮性和连续可用性。
  • 资源利用率: 集群能够更有效地利用多核系统。为了最大限度地提高系统资源利用率,程序可以运行多个工作进程,从而利用所有可用的 CPU 核心。

在 Node.js 中实现集群

通过使用 cluster 模块,可以轻松地在 Node.js 应用程序中构建集群。下面是一个简单的示例:

输出

What is Clustering in Node.js?

服务器输出

What is Clustering in Node.js?

说明

在此示例中

  • 主进程使用可用的 CPU 核心数(numCPUs)派生多个工作进程。
  • 每个工作进程运行一个监听端口 3000 的 HTTP 服务器。
  • 如果工作进程崩溃,主进程会派生一个新工作进程来接管并记录事件。

监控和管理

PM2 是一个用于 Node.js 应用程序的生产环境进程管理器,它可以使管理、监控和集群化 Node.js 应用程序更加容易。PM2 提供了诸如进程监控、自动重启和日志管理等功能。

结论

总而言之,在创建可伸缩且高性能的 Node.js 应用程序时,集群是必不可少的。集群利用多个工作进程的功能,使 Node.js 应用程序能够处理更多并发请求,高效地利用系统资源,并提供容错能力。通过理解和实现集群,Node.js 应用程序的功能可以得到极大的增强,使其适用于高流量和严格性能要求的生产场景。