本项目为基于Node.js的负载均衡器,你可以选择
- 通过README.md学习并实现这个负载均衡器
- 直接跳转至快速开始模块使用 / standard文件夹查看源码
-
base 基础目录
- src 源代码
- constant 常量
- util 工具
- config 配置
- request 请求脚本
- src 源代码
-
FE 前端(观看效果)
-
standard 参考实现
-
user 需要实现的代吗
-
algorithm 算法
- ConsistentHash 一致性哈希
- Fair 最小响应时间
- index 导出
- ipHash IP哈希
- LeastConnections 最小连接数
- Random 随机数
- UrlHash 原地址哈希
- WeightRoundRobin 权重轮询
-
balancer 均衡器
-
main 主流程
-
worker 后端服务
-
workerThread 多线程执行文件
-
- 安装依赖
# 根目录下安装均衡器依赖
npm install
# FE目录下安装前端依赖
npm install
-
config.js
-
urlDesc:后端服务节点配置对象数组,有url属性和weight属性,weight仅在WeightRoundRobin算法时起作用
-
port:均衡器监听端口
-
algorithm:算法名称
-
workerNum:后端服务端口开启进程数,提供并发能力。
-
balancerNum:均衡器端口开启进程数,提供并发能力。
-
workerFilePath:后端服务节点执行文件,推荐使用绝对路径。
-
支持的算法名称:
-
const ALGORITHM = { WEIGHT_ROUND_ROBIN: "weightRoundRobin", IP_HASH: "ipHash", URL_HASH: "urlHash", CONSISTENT_HASH: "consistentHash", FAIR: "fair", RANDOM: "random", LEAST_CONNECTIONS: "leastConnections", };
-
注:user和standard选择一个启动
查看均衡器参考实现效果启动standard
验证自行实现效果启动user,如需更换算法,修改base/config文件。
- 启动参考实现
# 根目录
npm run standard
- 启动User实现
# 根目录
npm run user
- 启动前端
# FE目录
npm run start
- 多进程并发请求脚本(如有需要)
# standard or base目录
node request
- 多进程启动均衡器,使其具有并发能力
- 多线程启动workerThread,启动多个端口服务
- workerThread多进程启动后端服务,使单个端口有并发能力。
多个handler表示有并发处理能力
TODO1:算法实现
- algorithm文件夹下除了index以外的算法实现
- 详情见文件注释和高亮TODO
TODO2:main.js 主流程
- 实现多进程运行均衡器,通过进程间通信做好事件代理
- 实现多线程运行执行文件,通过线程间通信做好事件代理
- 详情见文件注释和高亮TODO
TODO3:balancer.js 均衡器
- 实现从主进程获取url统计对象
- 实现更新主进程中的响应时间数据
- 处理好事件代理(父进程(main) <-> 子进程(balancer))
- 详情见文件注释和高亮TODO
TODO4:workerThread.js 多线程执行文件
- 实现多进程启动后端服务,使其具有并发能力
- 处理好事件代理(父线程(main) <-> 子线程(workerThread) <-> 子线程的子进程(worker))
- 详情见注释和高亮TODO
以下为Random算法效果
上图为连接分布统计
下图为响应时间统计