MST

星途 面试题库

面试题:Node.js高并发场景下的负载均衡策略及实现

在Node.js搭建的高并发应用中,负载均衡是保证系统性能和稳定性的关键。请描述几种常见的负载均衡策略,如轮询、加权轮询、IP哈希等,并说明如何使用Node.js实现其中一种负载均衡策略,可结合相关模块或框架进行阐述。
26.3万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

常见负载均衡策略

  1. 轮询(Round Robin):依次将请求分配到每个服务器,不考虑服务器的性能差异。例如有服务器A、B、C,请求1分配到A,请求2分配到B,请求3分配到C,请求4又分配到A,以此类推。
  2. 加权轮询(Weighted Round Robin):为每个服务器分配一个权重,权重越高的服务器被分配到请求的概率越大。适用于服务器性能不同的场景。比如服务器A权重为2,服务器B权重为1,那么在分配请求时,A被分配到请求的概率是B的两倍。
  3. IP哈希(IP Hash):根据客户端的IP地址计算哈希值,然后将请求分配到固定的服务器。这样可以保证来自同一IP的请求始终被分配到同一台服务器,适合有状态的应用,比如需要保持用户会话的场景。

使用Node.js实现轮询负载均衡策略(结合http-proxy-middleware模块)

  1. 安装模块
    npm install http-proxy-middleware
    
  2. 代码实现
    const express = require('express');
    const { createProxyMiddleware } = require('http-proxy-middleware');
    
    const app = express();
    const servers = ['http://server1:3000', 'http://server2:3000', 'http://server3:3000'];
    let currentIndex = 0;
    
    function getNextServer() {
        const server = servers[currentIndex];
        currentIndex = (currentIndex + 1) % servers.length;
        return server;
    }
    
    app.use('*', function (req, res) {
        const target = getNextServer();
        const proxy = createProxyMiddleware({ target });
        proxy(req, res);
    });
    
    const port = 8080;
    app.listen(port, () => {
        console.log(`负载均衡服务器运行在端口 ${port}`);
    });
    

上述代码使用http-proxy-middleware模块创建代理,getNextServer函数实现轮询算法,每次请求到来时获取下一个服务器地址,通过代理将请求转发到相应服务器。