负载均衡算法

简介: awfawgbagha

随机

WEB服务器1

1,2,3

服务接入

NGINX负载均

衡服务器

WEB服务器2


调用关系如上图(简化了公网->防火墙处理),适合场景:所有服务器性能基本一致,且无超阈值流量。
如果存在部分机器性能更优,此时可以在随机基础上增加权重,升级为:随机权重算法。
轮询

WEB服务器1

1,3

服务接入

NGINX负载均

衡服务器

2, 4

WEB服务器2


轮询不再是在多台服务器随机挑选,而是按照顺序一个个排队调用,调用完再插入队尾等待下一次调用
同加权随机,轮询也同样存在加权轮询的场景,此时流量调度将发生如下变化:

WEB服务器1

WEIGHT3

1,2,3

2

服务接入

NGINX负载均

衡服务器

4

WEB服务器2

WEIGHT-1


此处逻辑相对复杂,笔者在此说出主要思路,后续有时间补充伪代码,感兴趣的可以参照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上:

WEB服务器1

1, 2

服务接入

NGINX负载均

衡服务器

WEB服务器2


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

源地址哈希伪代码

Java

运行代码复制代码

1

2

3

4

5

private K doSelect(List<K> nodes, String ip) {

int length = nodes.size();

int index = hash(ip) % length;

return nodes.get(index);

}

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

若有收获,就点个赞吧


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
2月前
|
运维 Ubuntu 应用服务中间件
Nginx日志文件归档(手把手教你自动压缩和轮转日志)
本文介绍如何使用Linux自带的logrotate工具实现Nginx访问日志与错误日志的自动轮转、压缩与归档。通过简单配置,可避免日志文件过大占用磁盘空间,提升系统稳定性。涵盖配置步骤、参数详解、测试方法及常见问题解决方案,适合运维新手快速上手,保障服务器长期稳定运行。
|
4月前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
422 116
|
域名解析 .NET 开发框架
万网云解析设置二级域名解析到同IP不同端口
首先,进入云解析(注意,以下图片均做修改,仅做参考) 步骤阅读 2 先来使用端口的方式访问访问asp,ASP SUCCESS 正常。 3 继续,打开解析,进入如下页面,应该看到了一个叫做隐性URL,就是看这个。
10334 10
|
3月前
|
监控 小程序 Java
2025最新商业版代练护航工作室平台搭建/电竞代练护航小程序快速搭建部署解析
本项目为游戏陪练平台全栈开发方案,涵盖基础架构规划、多端功能开发及定制化流程。支持用户、打手、工作室、管理与管事五端,实现订单追踪、佣金结算、人员调度等功能。采用UniApp跨端开发,后端基于Spring Boot或ThinkPHP,部署使用Docker或宝塔面板,兼容高并发场景,具备完善的安全与监控机制。
367 0
|
Java 数据库连接 数据库
Hibernate 中出现表名(XXX) is not mapped 问题
Hibernate 中出现表名(XXX) is not mapped 问题,检查以下3个原因
1173 0
Hibernate 中出现表名(XXX) is not mapped 问题
|
2月前
|
运维 安全 算法
RAG 不是万能解,这些场景你一开始就不该用
RAG并非万能,默认滥用反致系统复杂、效果难测。它仅解决“信息获取”,不提升模型能力。最适合四类场景:动态知识更新、需答案溯源、长尾问题密集、需求尚不明确。慎用于强推理、隐性经验、高实时性及高确定性要求场景。核心判断:问题是“找不到信息”,还是“不会处理信息”?
|
2月前
|
负载均衡 容灾 JavaScript
Nginx反向代理容灾备份(手把手教你搭建高可用Web服务)
本文介绍如何通过Nginx反向代理实现容灾备份与高可用架构。利用upstream模块配置主备服务器,结合健康检查与自动故障转移,确保主服务宕机时无缝切换至备用服务器。图文详解参数设置、配置步骤及测试方法,并提供Keepalived、HTTPS等进阶优化建议,助小白快速搭建稳定可靠的Web系统。
|
10月前
|
程序员 定位技术 开发者
试了试阿里云的通义灵码 2.5 版
通义灵码 2.5 版是个特别实用的工具,无论是个人开发者还是企业团队,都能从中受益。如果你也在找能提升开发效率的工具,通义灵码绝对值得一试!
439 33
试了试阿里云的通义灵码 2.5 版
|
3月前
|
安全 Java 应用服务中间件
|
3月前
|
SQL 监控 安全
常见网络攻击类型详解:从原理到防御
本文系统介绍8种常见网络攻击类型,包括恶意软件、网络钓鱼、中间人攻击、DDoS、SQL注入等,剖析其原理与防御策略,助力提升个人与企业网络安全防护能力。

热门文章

最新文章