线程安全的动态加权平滑负载均衡算法
# 项目 clone 下来之后,先安装依赖
npm i
# 如没有翻墙环境,那就这样安装:
npm i --registry https://registry.npm.taobao.org
# 运行单元测试
npm run test
程序文件:
./main.coffee
单元测试文件:
./test.coffee
大概围绕这么几点:
-
弄清题意是啥意思。。 然后就在网上搜了一堆关于
线程安全
、负载均衡
、平滑负载均衡
、动态加权平滑负载均衡
之类的关键词的文章,前几个的概念差不多弄懂了,但最后这个关键词的没找到合适的讲解文章,所以代码基本上是猜着做的,然后测了一下,觉得好像没啥问题。。 -
模拟服务器处理请求
目的:
1. 模拟现实情况
2. 异步处理,这样才能做出服务器并发处理的现象
源码:sleep 函数
相关逻辑
- 抽象
服务器类
目的:方便记录和操作服务器相关信息和数据,比如 服务器名称
、服务器权重
、服务器当前并发量
,以及模拟 服务器处理请求
的操作
源码:Server 类
- 选择处理请求的服务器函数(负载均衡控制器)
源码:chooseServer 函数
- 动态追加服务器函数
源码:addServer 函数
6. 动态移除服务器函数(功能未实现,请忽略)
源码:removeServer 函数
关于
线程安全
: 正常来说,应该要在接收请求
,以及追加服务器
或移除服务器
时,要做线程安全
的处理,比如加锁之类的, 但因JavaScript
语言特性,本身就是单线程的,任何情况下都是线程安全
的,所以源码中并没有相关代码。
注:时间主要花在弄清题意上。。代码也是猜着做的,不知道是否符合题意。有些名词也是自己杜撰的。。如有问题还望指出。。