面试题答案
一键面试常见负载均衡策略
- 轮询(Round Robin):依次将请求分配到每个服务器,不考虑服务器的性能差异。例如有服务器A、B、C,请求1分配到A,请求2分配到B,请求3分配到C,请求4又分配到A,以此类推。
- 加权轮询(Weighted Round Robin):为每个服务器分配一个权重,权重越高的服务器被分配到请求的概率越大。适用于服务器性能不同的场景。比如服务器A权重为2,服务器B权重为1,那么在分配请求时,A被分配到请求的概率是B的两倍。
- IP哈希(IP Hash):根据客户端的IP地址计算哈希值,然后将请求分配到固定的服务器。这样可以保证来自同一IP的请求始终被分配到同一台服务器,适合有状态的应用,比如需要保持用户会话的场景。
使用Node.js实现轮询负载均衡策略(结合http-proxy-middleware模块)
- 安装模块:
npm install http-proxy-middleware
- 代码实现:
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
函数实现轮询算法,每次请求到来时获取下一个服务器地址,通过代理将请求转发到相应服务器。