负载均衡算法

简介: 随机调用适用于性能均衡的服务器集群,无超阈值流量时效果佳;若机器性能不一,可采用加权随机或加权轮询,提升调度效率。加权轮询按权重分配请求,如权重[3,1]对应调用序列AAABA。最小活跃数算法将请求发往负载最低的节点,实现动态负载均衡。源地址哈希与一致性哈希则确保相同IP或Key的请求落在同一服务器,增强会话一致性,适用于缓存等场景。

随机调用关系如上图(简化了公网->防火墙处理),适合场景:所有服务器性能基本一致,且无超阈值流量。如果存在部分机器性能更优,此时可以在随机基础上增加权重,升级为:随机权重算法。轮询轮询不再是在多台服务器随机挑选,而是按照顺序一个个排队调用,调用完再插入队尾等待下一次调用同加权随机,轮询也同样存在加权轮询的场景,此时流量调度将发生如下变化:此处逻辑相对复杂,笔者在此说出主要思路,后续有时间补充伪代码,感兴趣的可以参照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的请求总是到某一台服务器上,伪代码如下:
源地址哈希伪代码
Java运行代码复制代码
private K doSelect(List 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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7天前
|
消息中间件 人工智能 决策智能
AgentScope x RocketMQ:构建多智能体应用组合
AgentScope是阿里巴巴推出的开发者友好型多智能体框架,支持模块化、可定制的智能体应用开发。通过集成RocketMQ,实现高效、可靠的A2A通信,助力构建如“智能旅行助手”等复杂协作场景,提升开发效率与系统可扩展性。(238字)
|
7天前
|
SQL 运维 分布式计算
如何做好SQL质量监控
SLS推出用户级SQL质量监控功能,集成于CloudLens for SLS,提供健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,帮助用户全面掌握SQL使用情况,实现精细化管理与性能优化,提升日志分析效率与体验。
|
7天前
|
NoSQL Shell Redis
Redis集群伸缩,转移插槽失败
Redis集群出现节点配置不一致,提示slot 0处于importing状态。需登录对应实例,执行`cluster setslot 0 stable`命令,将异常slot状态恢复稳定,修复后方可进行 rebalance 操作。注意根据实际slot ID调整命令参数。
|
7天前
|
运维 Devops 开发工具
生产环境缺陷管理
git-poison基于go-git实现,通过“投毒-解毒”机制在多分支环境中精准追踪bug,自动化阻塞带未修复bug的发布,降低协同成本,避免漏修、漏发问题,提升发布安全性与效率。
|
7天前
|
存储 数据库
数据库设计三范式
数据库三范式简介:第一范式要求字段原子性,不可再分;第二范式在满足第一范式基础上,消除部分依赖,确保主键唯一确定非主键;第三范式消除传递依赖,避免非主键间相互决定。范式旨在减少数据冗余、提升一致性,但实际设计需结合业务需求灵活应用,不必生搬硬套。(238字)
|
7天前
|
Linux 数据安全/隐私保护 虚拟化
虚拟机安装(CentOS7)
准备CentOS7镜像及VMware Workstation(可从百度云下载),使用虚拟机创建工具新建虚拟机,参考知乎教程完成安装。默认登录用户为root,密码自设。详情见链接。
|
7天前
|
JSON 缓存 前端开发
什么是跨域
CORS(跨域资源共享)是W3C标准,允许浏览器向跨源服务器发送XMLHttpRequest请求,突破AJAX同源限制。需浏览器和服务器共同支持,现代浏览器均兼容,IE需≥10。通信由浏览器自动完成,开发者无需特殊处理。CORS分为简单请求与非简单请求,后者会先发起OPTIONS预检,验证通过后才执行实际请求。服务器通过设置Access-Control-开头的响应头实现控制。相比仅支持GET的JSONP,CORS支持所有HTTP方法,更为强大灵活。
|
7天前
|
Java 测试技术 Linux
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev/test/pre/prod)高效发布与运维,涵盖环境职责、CI/CD流程、分支管理、容器化部署及基于Skywalking的日志链路追踪,提升发布效率与系统稳定性。
|
7天前
|
存储 缓存 安全
Java基础篇
本文系统讲解Java核心知识,涵盖final关键字、重载与重写、==与equals区别、反射机制及其应用、String类对比、集合框架、线程安全、HashMap原理、ConcurrentHashMap实现、线程池使用与参数配置、JVM组成及运行时数据区、类加载机制、双亲委派模型、Stream流与JDK8新特性等内容,深入剖析底层原理与项目实战应用。
|
7天前
|
SQL 安全 网络协议
常见的网络攻击
恶意软件指具有险恶目的的程序,如病毒、勒索软件、间谍软件等,常通过钓鱼邮件或漏洞入侵系统,窃取数据、破坏功能。网络钓鱼伪装成可信来源骗取敏感信息。中间人攻击窃听通信,DDoS攻击以海量流量瘫痪服务,SQL注入操控数据库,零日漏洞利用未修复缺陷,DNS隧道则隐藏恶意流量,均为常见网络安全威胁。