Nodejs 开启工作线程, 反向代理, 动态负载均衡, 请求均匀分发

本文介绍了如何利用Node.js开启工作线程以提高并发处理能力,从单个进程到多线程,每秒处理请求量显著提升。同时探讨了出错时如何动态开启新线程,并通过部分重启避免服务中断。进一步,文章讲解了nginx实现反向代理的功能,以及结合服务注册表和负载均衡器实现动态负载均衡,确保请求的均匀分发。
摘要由CSDN通过智能技术生成

10秒内, 200个并发连接的规模

npx autocannon -c 200 -d 10 http://localhost:8080

单个进程处理多个请求

import {
    createServer } from 'http'

const {
    pid } = process
const server = createServer((req, res) => {
   
  
  let i = 1e7; while (i > 0) {
    i-- }

  console.log(`Handling request from ${
     pid}`)
  res.end(`Hello from ${
     pid}\n`)
})

server.listen(8080, () => console.log(`Started at ${
     pid}`))

在这里插入图片描述

每秒 300 个请求

多个工作线程处理多个请求

cluster.isMaster 判断当前进程是否是主进程

下面这种写法, 为用一个应用程序开启多个实例

if (cluster.isMaster) {
   
 // fork()
} else {
   
 // do work
}

cluster.fork()创建的工作线程, 执行的也是同一个模块

主进程执行的是上面 if else 的代码, 而工作线程执行的也是上面 if else 代码, 只是他俩一个在 if 内执行, 另一个在 else 内执行

import {
    createServer } from 'http'
import {
    cpus } from 'os'
import cluster from 'cluster'

if (cluster.isMaster) {
   
  const availableCpus = cpus()
  console.log(`Clustering to ${
     availableCpus.length} processes`)
  availableCpus.forEach(() => cluster.fork())
} else {
   
  const {
    pid } = process
  const server = createServer((req, res) => {
   
    let i = 1e7; while (i > 0) {
    i-- }
    console.log(`Handling request from ${
     pid}`)
    res.end(`Hello from ${
     pid}\n`)
  })

  server.listen(8080, () => console.log(`Started at ${
     pid}`))
}

在这里插入图片描述

每秒 1400 个请求

出错开启新的工作线程

import {
    createServer } from 'http'
import {
    cpus } from 'os'
import cluster from 'cluster'

if (cluster.isMaster) {
   
  const availableCpus = cpus()
  console.log(`Clustering to ${
     availableCpus.length} processes`)
  availableCpus.forEach(() => cluster.fork())
  // 主进程收到 exit 事件
  cluster.on('exit', (worker, code) => {
   
    // 有错误码 && 不是主进程故意叫停
    if (code !== 0 && !worker.exitedAfterDisconnect) {
   
      console.log(`Worker ${
     worker.process.pid} crashed. Starting a new worker`)
      // 开启新的工作进程
      cluster.fork()
    }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值