NodeJS 集群模块: 为App创建集群实例

NodeJS 集群模块: 为App创建集群实例

目录

  • NodeJS 集群模块: 为App创建集群实例
      • Node.js 集群介绍:终极扩展策略
      • 使用集群模块开始扩展 Node.js
      • 扩展 Node.js 的两种集群策略
      • 使用集群受益的 Node.js 应用程序示例
      • 没有集群的 Node.js:不可伸缩的原则
      • 集群操作:一个扩展的 Node.js 应用程序
      • 对两个示例进行负载测试:哪个扩展效果更好?
      • 集群化限制:何时不应使用集群扩展Node.js
      • 结论

推荐超级课程:

  • Docker快速入门到精通
  • Kubernetes入门到大师通关课
  • AWS云服务快速入门实战

本文介绍了在 Node.js 中进行集群处理以及如何使您的应用程序受益于扩展。您将使用集群模块 以创建集群实例。您将学到:

  • 为什么需要集群作为扩展 Node.js 应用程序的策略。
  • 如何使用原生和 PM2 模块使用 express 创建和扩展 Node.js 集群。
  • 集群和非集群 Node.js 应用程序之间的扩展比较。
  • 对 Node.js 集群进行负载测试作为性能监控方法。
  • 如果 Node.js 集群不符合您的应用设计,需要了解的事项。

在这里插入图片描述

Node.js 集群介绍:终极扩展策略

Node.js 默认情况下是单线程的运行时。这意味着运行中的 Node.js 仅利用计算机的一个核心(CPU 单元),即使任何一台计算机都有多个处理器。例如,如果您在一台有 4 个处理器的计算机上运行 Node.js 应用程序,则只使用其中一个。然而,Node.js 允许您使用集群,充分利用多核处理器,并将您的 Node.js 应用程序扩展到新的水平。

使用集群模块开始扩展 Node.js

以拥有四个处理器的计算机为例。Node.js 只会利用其处理能力的 25%。Node.js 运行一个 worker Node 来执行所有你的 Node.js 函数。这种策略在您的应用程序中运行了密集任务时会受到影响。worker Node 将在重任务进行中被阻塞。

Node.js 集群的概念是创建多个您的 Node.js 应用程序实例(worker)。这将为同一应用程序创建一个跨可用 CPU 核心分布负载的集群。在这种情况下,当您的重任务正在处理时,您的集群模块将将任何连续的任务生成到剩余的处理器中。简而言之,集群将增强应用程序的性能和可扩展性。

让我们深入学习如何添加 Node.js worker 集群并利用计算机的全部处理能力。

扩展 Node.js 的两种集群策略

如果您希望在 Node.js 中使用集群,有两种方式可以实现这一点:

  • 使用原生 Cluster模块。
  • 使用进程管理器,例如PM2。
  1. 原生 Cluster

Node.js 自带一个内置的集群模块。它允许您手动将 worker 分叉到可用处理器上。这样,Node.js 将跨多个子进程分配传入请求以增强可伸缩性。

  1. 使用 PM2 进行集群处理

PM2 是一个生产级流程管理器。像原生集群模块一样,PM2 具有内置的集群支持。但是,它固有地还伴随其他与生产相关的元素,例如:

  • 零停机部署。
  • 应用程序监控。
  • 日志和指标管理。
  • 自动应用程序重启。

使用集群受益的 Node.js 应用程序示例

现在您了解了 Node.js 集群以及您可以使用的方法,让我们演示如何集群对于可伸缩性是如何有利的。您将创建两个简单示例,一个不使用集群,另一个使用集群,并使用想象的用户来模拟和扩展测试以比较性能。

没有集群的 Node.js:不可伸缩的原则

由于 Node.js 是单线程的,它必须在处理应用程序内的其他任务之前完成一个任务的执行。这个概念关乎 Node.js 单线程方面,它只使用一台计算机处理器。

要演示这个工作原理,您可以使用Express创建一个简单的 Node.js 应用程序,如下所示:

const express = require("express");
const PORT = 3000;
const app = express();// 模拟一个耗时任务
app.get("/compute", (req, res) => {const startTime = Date.now();// 模拟一个 10 秒的计算const duration = 10000;while (Date.now() - startTime < duration) {}res.send("计算完成!");
});// 提供一个简单的 HTTP 请求
app.get("/hello", (req, res) => {res.send("来自 worker 进程的问候!");
});app.listen(PORT, () => {console.log(`应用程序正在端口 ${PORT} 上监听`);
});

上面的示例创建了两个 GET 请求:

  • 一个简单的 GET 请求,发送一个基本请求
  • 一个模拟的 GET 请求,执行 10 秒来返回用户请求

假设的模拟 10 秒任务现在代表任何您可以执行的耗时任务。根据 Node.js 的工作方式,如果发送一个请求来执行 localhost:3000/compute,Node.js 将锁定到单个处理器上,并且无法执行其他任务。

NodeJS 集群指南-手头上的 NodeJS 解决方案

这个任务需要 10 秒,并锁定您的计算资源,直到其计算完成:

NodeJS 集群指南-手头上的 NodeJS 解决方案

这意味着如果您在 localhost:3000/compute 正在运行时执行 localhost:3000/hellolocalhost:3000/hello 将无法返回其响应,即使它只是一个简单的 GET 请求ÿ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 配置与优化

目录 一、Redis 介绍 1.1、关系数据库与非关系型数据库 1&#xff09;关系型数据库 2&#xff09;非关系型数据库 3&#xff09;非关系型数据库产生背景 1.2、Redis 基础 1&#xff09;Redis 简介 2&#xff09;Redis 安装部署 3&#xff09;配置参数 1.3、Redi…

【聊一聊】三种工厂模式的创建

三种工厂模式的创建 今天终于星期五了,最近由于碰上一个需求,中间涉及Oracle改国产数据库的改造,好家伙,差点没把我忙坏了 不过今天终于有空啦!~哈哈哈 这篇本应该是上周就结束的,但是拖到今天,我们就今天进行结束 (还有一件快乐的事情,就是我遇见自己喜欢的人啦!嘻嘻) 好啦!~话…

【AI】发现一款运行成本较低的SelfHosting语言模型

【背景】 作为一个想构建局域网AI服务的屌丝,一直苦恼的自然是有限的资源下有没有对Spec要求低一点的SelfHosting的AI服务框架了。今天给大家介绍这款听起来有点希望,但是我也还没试验过,感兴趣的可以去尝试看看。 【介绍】 大模型生成式AI与别的技术不同,由于资源要求高…

Linux第83步_采用“Linux内核定时器”点灯以及相关API函数

“Linux内核定时器”是采用“系统时钟”来实现的。它不是周期性运行的&#xff0c;一旦发生超时就会自动关闭。如果想要实现周期性定时&#xff0c;那么就需要在定时处理函数中重新开启定时器。 Limux内核使用全局变量jiffies来记录“系统从启动以来的系统节拍数”&#xff0c…

路由器的端口映射能实现什么?

路由器的端口映射是一项重要的网络配置功能&#xff0c;它可以帮助实现局域网内外的设备之间的通信。通过端口映射&#xff0c;我们可以在公网上访问局域网内的设备&#xff0c;方便的进行远程访问、共享文件和资源等操作。 什么是端口映射&#xff1f; 在介绍端口映射之前&am…

【springcloud开发教程】spring cloud config——分布式配置

什么是SpringCloud config分布式配置中心&#xff1f; spring cloud config 为微服务架构中的微服务提供集中化的外部支持&#xff0c;配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置。 spring cloud config 分为服务端和客户端两部分。 服务端也称为 …

MySQL 查询性能优化

优质博文&#xff1a;IT-BLOG-CN​ 如果把查询看作是一个任务&#xff0c;那么它由一些列子任务组成&#xff0c;每个子任务都会消耗一定的时间。如果要优化查询&#xff0c;实际上要优化其子任务&#xff0c;要么消除其中一些子任务&#xff0c;要么减少子任务的执行次数。通常…

【prometheus-operator】k8s监控redis

1、准备exporter https://github.com/oliver006/redis_exporter oliver006-redis_exporter-amd64.tar # 安装镜像 docker load -i oliver006-redis_exporter-amd64.tar # 上传镜像 docker tag oliver006/redis_exporter ip/monitor/redis_exporter:latest docker push ip/mo…

DevEco Profiler性能调优工具简介

一、概述 应用或服务运行期间可能出现响应速度慢、动画播放不流畅、列表拖动卡顿、应用崩溃或耗电量过高、发烫、交互延迟等现象,这些现象表明应用或服务可能存在性能问题。造成性能问题的原因可能是业务逻辑、应用代码对系统API的误用、对ArkTS对象的不合理持有导致内存泄露…

记录开发STM32遇到的卡死问题-串口

背景&#xff1a;以STM32作为主控&#xff0c;广州大彩显示屏显示&#xff0c;主控实时采集数据&#xff0c;串口波特率115200.设置收发频率为50Hz&#xff0c;即单片机每秒发送50帧数据&#xff0c;每秒接收50帧数据&#xff0c;每帧数据大概14字节。 问题&#xff1a;系统长…

部署prometheus 监控k8s集群

目录 1、主机清单 2、拉取镜像 3、服务安装 4、安装prometheus-operator 5、查看custom metrics api 6、获取prometheus端口 7、将 alertmanager-main 、grafana、prometheus-k8s的端口暴露出来 8、再次查看prometheus端口 9、浏览器访问IP&#xff1a;31940 部署k8集群…

隐私计算实训营学习三:隐私计算框架的架构和技术要点

文章目录 一、隐语架构二、产品层三、算法层3.1 PSI与PIR3.2 Data Analysis-SCQL3.3 Federated Learning 四、计算层4.1 混合调度编译-RayFed4.2 密态引擎4.3 密码原语YACL 五、资源管理层六、互联互通七、跨域管控 一、隐语架构 1、完备性&#xff1a;支持多种技术&#xff0…

基于Springboot的牙科就诊管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的牙科就诊管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍: 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c…

RocketMq 顺序消费、分区消息、延迟发送消息、Topic、tag分类 实战 (消费者) (三)

消费端配置 如下所示&#xff1a;是消费者的配置类&#xff0c;有以下几点需要注意的地方 1、是TargetMessageListener这个监听类&#xff08;下文会把这个监听类的具体代码贴出来&#xff09;&#xff0c;需要把这个监听类订阅。 2、rocketMqDcProperties.getTargetProperties…

【机器学习】k近邻(k-nearest neighbor )算法

文章目录 0. 前言1. 算法原理1.1 距离度量1.2 参数k的选择 2. 优缺点及适用场景3. 改进和扩展4. 案例5. 总结 0. 前言 k近邻&#xff08;k-nearest neighbors&#xff0c;KNN&#xff09;算法是一种基本的监督学习算法&#xff0c;用于分类和回归问题。k值的选择、距离度量及分…

Linux中Oracle数据库启动顺序

首先使用oracle用户登录Linux&#xff0c;用lsnrctl status查看监听状态 1、&#xff1a;进入sqlplus $ sqlplus /nolog SQL> 2&#xff1a;使用sysdab角色登录sqlplus SQL> conn /as sysdba 3&#xff1a;启动数据库 SQL> startup 4&#xff1a;打开Oracle监听 …

微信小程序 - picker-viewer实现省市选择器

简介 本文会基于微信小程序picker viewer组件实现省市选择器的功能。 实现效果 实现代码 布局 <picker-view value"{{value}}" bindchange"bindChange" indicator-style"height: 50px;" style"width: 100%; height: 300px;" &…

OCR研究背景及相关论文分享

光学字符识别&#xff08;Optical Character Recognition&#xff0c;OCR&#xff09;是指使用光学方法将图像中的文字转换为机器可编辑的文本的技术。OCR技术的研究和应用已有数十年的历史&#xff0c;其背景和发展受到多方面因素的影响。 技术需求背景 1.自动化文档处理&am…

【数据分享】2012-2023年全球范围逐年NPP/VIIRS夜间灯光数据

夜间灯光数据是我们在各项研究中经常使用的数据&#xff01;本次我们给大家分享的是2012-2023年全球范围的逐年的NPP/VIIRS夜间灯光数据&#xff0c;数据格式为栅格格式(.tif)。该数据来自于NCEI国家环境信息中心&#xff0c;近期该网站更新了2023年的夜间灯光数据&#xff0c;…

电脑如何关闭自启动应用?cmd一招解决问题

很多小伙伴说电脑刚开机就卡的和定格动画似的&#xff0c;cmd一招解决问题&#xff1a; CtrlR打开cmd,输入&#xff1a;msconfig 进入到这个界面&#xff1a; 点击启动&#xff1a; 打开任务管理器&#xff0c;禁用不要的自启动应用就ok了