当前位置: 首页 > news >正文

nodejs的express负载均衡

我们知道nodejs是单线程的,在特定场合是不能利用CPU多核的优势的。一般有两种方式来解决,一种是利用nodejs的cluster模块创建多个子进程来处理请求以充分利用cpu的多核,还有一种是nodejs运行多个服务分别监听在不同的port,利用nginx创建一个upstream池,来分发请求到nodejs的不同服务端口来处理。
由于我们是要负载均衡express,涉及到用户的会话保持就很重要,不然原先建立请求的是进程A,下次请求转到进程B处理,进程B没有之前用户在进程A的上下文信息,那么处理就会出现问题。
cluster方式下,推荐使用redis来存储会话

var jargs = require('./argsfile.json');
const { createClient } = require('redis');
const client = createClient({ url: jargs.redisurl });
client.on('error', err => { logger.error("Redis连接出错"); });
client.connect();
const { RedisStore } = require('connect-redis-session');
...
app.use(session({name: jargs.sessionname,secret: jargs.ssosecret,store: new RedisStore({ client }), saveUninitialized: true,resave: true,cookie: { httpOnly: true, maxAge: jargs.sessionage }}));

这样会话保存在redis中,不同进程可以共享session信息。
用户nginx upstream池怎么操作呢?其实也可以用redis来共享session的,还可以利用nginx自己的ip_hash策略来确保用户请求源IP固定的情况下,只会连接到upstream池中特定后端目标,这样也不会导致会话丢失。

	upstream svc_pool {ip_hash;server 172.17.36.50:8031;server 172.17.36.50:8032;server 172.17.36.50:8033;server 172.17.36.50:8034;server 172.17.36.50:8035;server 172.17.36.50:8036;server 172.17.36.50:8037;server 172.17.36.50:8038;}
http://www.lryc.cn/news/330666.html

相关文章:

  • 计算机网络-HTTP相关知识-RSA和ECDHE及优化
  • axios 封装 http 请求详解
  • 牛客2024年愚人节比赛(A-K)
  • loadbalancer 引入与使用
  • Yolov5封装detect.py面向对象
  • 入门级深度学习主机组装过程
  • python爬虫之selenium4使用(万字讲解)
  • 【ARM 嵌入式 C 头文件系列 22 -- 头文件 stdint.h 介绍】
  • LabVIEW专栏三、探针和断点
  • Transformer模型-softmax的简明介绍
  • 记录一下做工厂的打印pdf程序
  • Linux网络编程一(协议、TCP协议、UDP、socket编程、TCP服务器端及客户端)
  • Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证
  • http: server gave HTTP response to HTTPS client 分析一下这个问题如何解决中文告诉我详细的解决方案
  • Flume学习笔记
  • 数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)
  • 与谷歌“分家”两年后,SandboxAQ推出统一加密管理平台
  • 【卫星家族】 | 高分六号卫星影像及获取
  • XML与Xpath
  • 【c++20】CPP-20-STL-Cookbook 学习笔记
  • Python 之 Flask 框架学习
  • 精品丨PowerBI负载测试和容量规划
  • 【算法-PID】
  • ros rosbag使用记录
  • WebKit结构揭秘:探秘网页渲染的魔法之源
  • VSCode美化
  • Runes 生态一周要览 ▣ 2024.3.25-3.31|Runes 协议更新 BTC 减半在即
  • 瘦身Spring Boot应用(thinJar)
  • 备战蓝桥杯---贪心刷题1
  • 《数据结构学习笔记---第九篇》---循环队列的实现