nodejs的express负载均衡(续)

2024-06-17 11:20
文章标签 负载 nodejs 均衡 express

本文主要是介绍nodejs的express负载均衡(续),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前写过一篇《nodejs的express负载均衡》,给出了两种方式实现express web服务的nlb。一种是利用nodejs自带的cluster,创建多个worker进程,绑定同一个服务端口,由主进程负责监听和调度;另一种启动多个nodejs实例,每个实例绑定一个不同的端口,在nginx上配置成一个upstream pool由nginx来负责反向代理转发。对用户端来说实现的效果是一样的。不过有一些坑要提醒大家注意下。
如果是在windows环境下,那么nodejs的cluster的调度策略,不像linux环境中默认是轮询,而是啥也没有配置,所以你会发现,总是同一个worker进程在处理请求,代码里加入下面一条语句,可以将调度策略设为轮询:

cluster.schedulingPolicy = cluster.SCHED_RR;

这样就万事大吉了么?还有坑!
nodejs.org官方说,虽然理论上,分发请求策略可以给出最佳性能,但是一个有8个worker的场景中,观察到80%的请求落在2个worker上,并没有实现负载均衡。
究其原因,可能是创建进程时,操作系统并没有将这CPU核数的worker运行在不同的CPU核上。
linux下,有条命令taskset可以将指定pid的进程设置在指定的CPU核上,但是windows下,情况有些复杂,虽然图形界面可以对任务管理器中看到的指定进程设置CPU Affinity,可以使它跑在指定的一个或几个CPU核上,没有好用的系统命令来设置的话,得靠人肉手点。。。
好吧,完成了上述工作的话,是不是就好用了么?这也只是完成了轮询,并可以公平地将任务分配到每个CPU核上。
不用nodejs的cluster,用nginx的upstream怎样呢?客观的说,效果会好一些,upstream里有丰富的参数可配置,比如权重,最大失败次数,负载均衡算法等。
另外在程序代码更新发布时,nginx的upstream方式对业务连接会更友好,怎么说呢?你每停掉一个老程序的进程后,启动一个新进程监听刚停掉的那个老进程的端口,依次完成旧程序的下线和新程序的上线,那么几乎不会有业务连接的处理会受到影响。

这篇关于nodejs的express负载均衡(续)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069299

相关文章

LoadBalance 负载均衡

什么是负载均衡         负载均衡(Load Balance,简称 LB),是⾼并发,⾼可⽤系统必不可少的关键组件.         当服务流量增⼤时,通常会采⽤增加机器的⽅式进⾏扩容,负载均衡就是⽤来在多个机器或者其他资源中,按照⼀定的规则合理分配负载. 负载均衡的⼀些实现         服务多机部署时,开发⼈员都需要考虑负载均衡的实现,所以也出现了⼀些负载均衡器,来帮助我们实现

使用 devtool 本地调试 nodejs

安装 # 全局安装$ npm install devtool -g# 或临时安装$ npx devtool [file] [opts] 用法 Usage:devtool [入口文件] [opts]Options:--watch, -w enable file watching (for development) # 动态检测文件变更,不用每次手动重启--qui

nodejs基础教程-简单blog(9)--分页

效果图: 分析一下这个效果图,结合以前的教程我们知道。导航栏是继承“layout.html” table表格是“user_index.html”,而分页的按钮就是我们本节课的内容。将之封装在‘page.htnl’中; 首先 新建文件views/admin/page.html <nav aria-label="..."><ul class="pager"><li class="prev

nodejs基础教程-简单blog(8)--展示用户注册信息列表

本节课展示用户注册信息列表;当点击导航栏的“用户管理”浏览器跳转路由/admin/user 显示用户列表。 先上效果图; 开始 1,在layout.html模板中导航标签中设置路径; 2,新建文件 views/admin/user_index.html,在admin.js中设置user_index的路由为/admin/user;并查询数据库所有用户的信息 返回给前台users;

Node.js - Express 4.x框架实战(下)【讲师辅导】-曾亮-专题视频课程

Node.js - Express 4.x框架实战(下)【讲师辅导】—11497人已学习 课程介绍         【会员免费】链接 http://edu.csdn.net/lecturer/585 右侧办理会员卡。办会员卡可咨询 QQ 1405491181 。 会员可免费学习已发布的全部课程,和在会员有效期内讲师新发布的全部课程 ,承诺每个月至少增加价值500元+ 的新课程。本套

Nginx基础. 防止惊群与子进程之间的负载均衡

作为服务器子进程, 每个worker进程都需要处理大量网络事件. 而网络事件的处理来源于对监听端口新连接的建立. 当有多个worker进程同时监听同一个(或多个)端口时, 建立连接就没那么简单了. Nginx出于充分发挥多核CPU性能的考虑, 则使用了多个worker子进程的设计. 这样多个子进程在accept建立连接时候就会有争抢, 产生"惊群"问题. 有的系统可能在内核就解决了这个问题

软负载均衡和F5负载均衡(硬负载均衡)区别

1. 负载均衡 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备 和 服务器 的带宽、增加 吞吐量 、加强网络数据处理能力、提高网络的灵活性和可用性。        负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

NodeJS和Express框架

文章目录 1 引包1.1 小案例 2 express中的静态引用详解2.1 静态资源和动态资源2.1.1 app.use2.1.2 express.static2.1.3 express静态引用总结 3 NodeJS中的热部署4 模板引擎渲染4.1 先安装相关的包4.2 配置 art-template 模板引擎4.3 使用模板引擎 5 post提交5.1 安装post中间件5.2 使用po

NodeJS模块的导入导出,包文件

文章目录 1 导入模块1.1 加载模块作用1.2加载规则1.2.1 从缓存中加载1.2.2 判断模块标识1.2.3 加载文件和目录1.2.3.1 加载文件1.2.3.2 加载目录 2 导出模块2.1 导出多个成员(必须在对象中)2.2 导出单个成员(函数,字符串)2.3 exports 和 module.exports 的区别2.3.1 相同点2.3.2 不同点2.3.3 总结 3 包

NodeJS中模板引擎,处理静态资源,服务端渲染

1 模板引擎的使用 1.1 下载模板 首先安装art-template模板,art-template不仅可以在浏览器使用,也可以在node中使用 安装,在哪个目录执行以下命令就会下载到那里去,默认下载到node_modules目录中,注意node_modules尽量不要更改,不支持更改 npm install art-templatenpm install=npm i。在git clone