基础篇:06-负载均衡算法
创始人
2025-05-30 17:57:14
0

随机

调用关系如上图(简化了公网->防火墙处理),适合场景:所有服务器性能基本一致,且无超阈值流量。

private K doSelect(List nodes, String ip) {// 在列表中随机选取一个节点int index = random.nextInt(nodes.size());return nodes.get(index);
}

如果存在部分机器性能更优,此时可以在随机基础上增加权重,升级为:随机权重算法。

private K doSelect(List nodes, String ip) {int length = nodes.size();AtomicInteger totalWeight = new AtomicInteger(0);for (K node : nodes) {Integer weight = node.getWeight();totalWeight.getAndAdd(weight);}if (totalWeight.get() > 0) {int offset = random.nextInt(totalWeight.get());for (N node : nodes) {// 让随机值 offset 减去当前node权重值offset -= node.getWeight();if (offset < 0) {// 当前node大于随机值offset,返回此Nodereturn node;}}}// 随机返回return nodes.get(random.nextInt(length));
}

轮询

轮询不再是在多台服务器随机挑选,而是按照顺序一个个排队调用,调用完再插入队尾等待下一次调用

protected K doSelect(List nodes, String ip) {int length = nodes.size();// 如果位置值已经等于长度重置为0(走一轮了)position.compareAndSet(length, 0);N node = nodes.get(position.get());// 数据原子增加,对应调用从1->2->3->4position.getAndIncrement();return node;
}

同加权随机,轮询也同样存在加权轮询的场景,此时流量调度将发生如下变化:

此处逻辑相对复杂,笔者在此说出主要思路,后续有时间补充伪代码,感兴趣的可以参照Dubbo的实现

如上有服务器servers=[A,B],对应权重weights=[3,1],总权重为4。我们可以理解为有4台服务器,3台A,1台B,一次调用过来的时候,需要按顺序访问。如有5次调用,调用顺序为AAABA。

选举思路如下:

次数

WeightedRoundRobin

选择结果

选择后的WeightedRoundRobin

1

3、1

A

2、1

2

2、1

A

1、1

3

1、1

A

0、1

4

0、1

B

0、0(等于0-0时复原成:3、1)

5

3、1

A

2、1

最小活跃数

指:将当前请求转发到连接数/请求数最少的机器上,其特点是根据服务器实时运行状态动态分配,保障服务负载不会过饱和。如下图当请求4过来时,Nginx判断目前服务器1连接数>服务器2,故4会请求到服务器2上:

源地址哈希

根据请求源IP哈希计算得到一个数值,用该数值在候选服务器列表的进行取模运算,得到的结果便是选中的服务器,此操作可以保证固定IP的请求总是到某一台服务器上,伪代码如下:

private K doSelect(List nodes, String ip) {int length = nodes.size();int index = hash(ip) % length;return nodes.get(index);
}

一致性哈希

相同的请求尽可能落到同一个服务器上。一致性哈希解决稳定性问题,可以将所有的存储节点排列在首尾相接的 Hash 环上,每个 key 在计算 Hash 后会 顺时针找到临接的存储节点存放。而当有节点加入或退出时,仅影响该节点在 Hash环上顺时针相邻的后续节点。

相关内容

热门资讯

大学艺术设计学院迎新晚会主持词...  脚踏着青春的节拍,我们向金秋走来,一路欢歌,一路笑语,万物在金秋的九月欣然等待。 激扬着青春的风采...
大学音乐学院迎新晚会主持词 大...  踏着秋风,沐着秋雨,我们相逢在收获的金秋九月,在这丹桂飘香的日子里,我们迎来了一届最新或2023(...
大学学院迎新晚会主持词 迎新晚...  激扬着青春的风采,我们向金秋走来,一路欢歌,一路笑语,万物在翘首期盼中安然舒怀。踏着秋风,沐着秋雨...
新学期一年级新生家长会主持词 ...   又是一个新学期了,家长会也是在所难免的,小编给大家精心准备了一年级新生家长会主持词,希望对你有所...
大学生迎新晚会主持词开场白和结...   如下内容是小编给大家整理的文学院迎新晚会主持词开场白和结束语,欢迎阅读!  (行者无疆酬壮志 知...
幼儿园新生家长会主持词 幼儿园...  一、开场白:  尊敬的各位家长:  大家上午好!首先非常感谢大家在百忙中抽出时间来参加我们的新生家...
小学新生家长会主持词 小学家长...   尊敬的各位家长:  非常感谢大家来参加这次家长会。今天,对于我们一年级的新同学来说,是个值得纪念...
大学新生典礼主持词范本 大学典...  如下为您提供参考的内容是大学新生典礼主持词范本,欢迎阅读。  学生入场(9:30会议开始)  大家...
最新或2023(历届)初一新生...   初一是一个新的开始,从此你的孩子不在只学语数外,还有着五花八门的东西要学,新生的家长会能让你对自...
新学期初中家长会学生主持稿 幼...   学校每个学期都会召开家长会,家长会上班主任和家长可以“亲密接触”。家长会是家长给老师各项能力直接...
最新或2023(历届)海南省企... 关于最新或2023(历届)海南省企业退休人员基本养老金调整通知  企业退休人员基本养老金月增75元 ...
幼儿园开学新生家长会主持词 班...   快乐的暑假已经过去,收获的秋天来到了,经过一个暑假的休息,相信小朋友们又长高长胖了,到幼儿园也更...
最新或2023(历届)十八届五...   7月20日的政治局会议,决定在10月份召开十八届五中全会。这次会议在经济、政治领域都将面临重要任...
新学期初二学生家长会主持稿 新...   开场白:  甲:尊敬的各位老师  乙:亲爱的叔叔阿姨们  合:大家下午好!  甲:首先,感谢大家...
新学期二年级家长会主持稿 二年...   小编给大家准备了二年级家长会主持稿,欢迎阅读。  女:尊敬的老师  男:亲爱的爸爸妈妈,爷爷奶奶...
最新或2023(历届)江西省企... 5月12日,江西省人社厅正式公布,从今年1月1日起,上调企业退休人员养老金。这是我省自2005年以来...
汉朝时期,太子用棋盘砸死另一个... 汉文帝时期,作为人质居住在帝都长安的吴王太子与汉文帝太子刘启下棋,不料发生争执,蛮横的当朝太子刘启毫...
铁木真难道只是一介&ldquo... 今天我们来说说成吉思汗的聪慧果敢,为什么这么说呢?众所周知,元太祖成吉思汗原名铁木真,也是大蒙古国的...
北宋有九位皇帝,为何出现了五次... 太后和后妃垂帘听政,是我国古代社会专制皇权与后宫制度相结合的产物。在两千余年的中国古代专制社会里,如...
皇帝请大臣吃饭,吃完后派人杀了... 有句老话,叫“伴君如伴虎”,此言非虚,历史上许多有名的将领,就是这样不明不白地丢掉性命的,比如岳飞、...