负载均衡算法

简介: 负载均衡算法包括随机、轮询、最小活跃数、源地址哈希和一致性哈希等。随机适用于性能一致的服务器,可加权重升级为加权随机;轮询按顺序调用,支持加权分配;最小活跃数优先选择负载低的服务器;源地址哈希确保同一IP请求固定服务器;一致性哈希减少节点变动对整体影响,提升稳定性。

负载均衡算法
随机
调用关系如上图(简化了公网->防火墙处理),适合场景:所有服务器性能基本一致,且无超阈值流量。
如果存在部分机器性能更优,此时可以在随机基础上增加权重,升级为:随机权重算法。
轮询
轮询不再是在多台服务器随机挑选,而是按照顺序一个个排队调用,调用完再插入队尾等待下一次调用
同加权随机,轮询也同样存在加权轮询的场景,此时流量调度将发生如下变化:
此处逻辑相对复杂,笔者在此说出主要思路,后续有时间补充伪代码,感兴趣的可以参照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
运行代码
复制代码
1
2
3
4
5
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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
算法
最小生成树算法:Prim算法
在图论中,最小生成树(Minimum Spanning Tree,简称MST)是一种常用的算法问题。最小生成树是指在一个加权连通图中选取边的子集,使得所有顶点都被覆盖,并且边的总权值最小。
1377 0
|
3月前
|
JSON 安全 Java
SpringBoot.鉴权
本文介绍如何在Spring Boot项目中结合JWT与Spring Security实现安全鉴权。涵盖Token生成与验证、自定义认证流程、角色权限控制(RBAC),并通过过滤器实现登录拦截与请求认证,保障接口安全。
224 2
|
3月前
|
存储 缓存 Java
SpringBoot自动装配机制
SpringBoot通过@SpringBootApplication实现自动装配,其核心为@AutoConfigurationPackage与@AutoConfigurationImportSelector。前者注册主包路径,后者加载spring.factories中配置的自动配置类,结合@ComponentScan与过滤机制,实现Bean的自动扫描、去重与注入,简化开发配置。
229 1
|
3月前
|
SQL 容灾 数据库
分布式事务Seata
Seata是阿里开源的分布式事务解决方案,提供XA、AT、TCC、SAGA四种模式,解决微服务架构下的跨库跨服务事务一致性问题。通过TC(事务协调者)、TM、RM三大角色实现全局事务管理,支持高可用部署与无缝集成Spring Cloud,助力系统实现最终一致或强一致性事务。
402 0
|
3月前
|
存储 NoSQL Linux
Redis集群部署指南
本教程基于CentOS7详解Redis集群部署,涵盖单机安装、主从复制、哨兵高可用及分片集群搭建。通过多实例模拟真实环境,深入讲解配置、启动、主从切换与数据读写测试,助你掌握Redis分布式架构核心技能。
542 0
|
3月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务一站式解决方案,整合多种技术,实现服务注册发现、配置管理、负载均衡等功能。约定大于配置,开箱即用,支持云原生。Netflix组件停更后,Spring Cloud Alibaba成为主流,集成Nacos、Sentinel、Seata等阿里开源组件,提供完整微服务生态支持。
353 0
|
3月前
|
存储 Java API
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程的搭建与部署,涵盖项目导入、模块创建、数据库配置及服务启动。通过RestTemplate实现order-service与user-service间的远程调用,解决跨服务数据获取问题,帮助理解微服务拆分与通信机制。
119 0
|
3月前
|
自然语言处理 监控 搜索推荐
分布式搜索引擎ElasticSearch
ElasticSearch是基于Lucene的分布式开源搜索引擎,支持海量数据的快速检索、日志分析与实时监控。通过倒排索引实现高效模糊查询,结合Kibana、Logstash等组件构成ELK技术栈,广泛应用于搜索、日志统计与系统监控场景。
198 0
|
3月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心通过集中化管理微服务配置,实现动态热更新与环境隔离,避免频繁重启服务。借助bootstrap.yml优先加载配置,支持@RefreshScope热刷新、@ConfigurationProperties绑定,并实现多环境共享及优先级控制,结合Nginx搭建高可用集群,提升系统稳定性与可维护性。
214 0
|
3月前
|
消息中间件 缓存 Java
消息中间件RabbitMQ(基础)
RabbitMQ是基于AMQP协议的开源消息中间件,使用Erlang语言开发,实现应用解耦、异步通信与流量削峰。通过生产者、消费者、交换机、队列等组件,支持多种消息模型,如简单队列、发布订阅、路由匹配等,提升系统性能与可靠性。
115 0

热门文章

最新文章