常用负载均衡详解

一、介绍

在互联网场景下,负载均衡(Load Balance)是分布式系统架构设计中必须考虑的一个环节,它通常是指将负载流量(工作任务、访问请求)平衡、分摊到多个操作单元(服务器、组件)上去执行的过程。
目的在于提供负载配比,解决性能、单点故障(高可用)和扩展性(水平伸缩)等问题。

在这里插入图片描述

以上图为例,随着互联网的兴盛,类似淘宝、京东等网站的访问量逐年提升。原先的单台服务或者单集群模式已经远不能满足需求了,这时候就需要横向扩展多台服务或者多个集群来分摊压力,达到提升系统吞吐的能力,这就是著名的分治理论。

但服务器增加了,他们之间的流量负载也必须有一个组件来管控,这就是负载均衡的作用。负载均衡提供了多种算法策略来满足不同的业务负载需求,下面我们详细来讲解下。

二、几种常见的负载均衡策略

2.1 轮询(Round Robin)

RR轮询,即Round Robin。按照请求的顺序轮流分配到不同的服务器,循环往复。这种策略适用于服务器性能相近的情况,可以平均分配负载。但如果某个服务器性能较差或者偶发故障,会影响整个系统的性能和稳定性。
如下图所示:

在这里插入图片描述

  • 分别有5条请求过来

  • 按照顺序轮流分配,web-server1 分配到 1、4,web-server2 分配到 2、5,web-server3 分配到 3。

2.2 按照权重轮询(Weighted Round Robin)

即加权轮询,给不同的服务器分配不同的权重,根据权重比例来决定分配请求的数量。这种策略适用于后端服务器性能不均的情况,可以根据实际情况灵活调整。使得性能更好的服务器能够处理更多的请求,从而提高整个系统的处理效率。
如下图所示
在这里插入图片描述

  • 分别有5条请求过来

  • web-server1 因为权重为60%,分配到 1、2、3

  • web-server2 权重为20%,分配到 4

  • web-server3 权重为20%,分配到 5

2.3 IP 哈希(IP Hash)

根据客户端的IP地址计算哈希值,将请求分配给特定的服务器,保证相同IP的客户端请求始终发送到同一台服务器。这种策略适用于需要保持客户端会话一致性的场景,例如需要维护用户session的Web应用。
如下图所示:
在这里插入图片描述

  • IP为192.168.0.99的流量hash计算对应web-service1,所以将1、4流量分配到第1台服务器

  • IP为192.168.0.96、192.168.0.98的流量hash计算对应web-service3,所以将2、3流量分配到第1台服务器

需要注意的是,虽然IP哈希算法可以确保来自同一IP地址的请求被发送到同一台服务器,这在一些需要保持会话一致性的场景中很有用,但它也可能导致负载不均衡。例如,如果某个IP地址发送了大量的请求,那么处理这些请求的服务器可能会过载,而其他服务器可能处于空闲状态。因此,在使用IP哈希算法时,需要仔细考虑其适用性和潜在的风险。需要对极端情况进行评估,笔者就曾经踩过坑。

2.4 最少连接(Least Connections)

将请求分配给当前连接数最少的服务器,以实现负载均衡。这种策略适用于处理长连接请求的场景,如WebSocket、FTP服务。通过记录每台服务器当前正在处理的连接数,将新请求分配给连接数最少的服务器,可以有效避免某些服务器过载导致性能下降的情况。
如下图所示:
在这里插入图片描述

  • web-service1、web-service2、web-service3的连接数分别是11、15、2,所以 web-service3 相对空闲

  • 1、2、3请求到来的时候,web-service3持续空闲,而web-service1、web-service2持续hold住连接,所以请求分配给web-service3

  • 该算法对服务器性能差异较大的情况有较好的适应性,请求优先发送到连接数较少的服务器,有助于避免某些服务器过载,提升性能。

  • 缺少点就是需要实时监测连接数,并且每个流量来的时候都要判断下再分发,在流量繁忙时增加了服务器开销,影响性能。

2.5 最短响应时间(Least Response Time)

短响应时间(Least Response Time)算法在负载均衡领域中被广泛应用。这种策略适用于对响应时间有严格要求的应用场景。通过实时监测每台服务器的响应时间,将请求分配给响应时间最短的服务器,可以确保用户获得最快的响应,提升用户体验。
如下图所示
在这里插入图片描述

同样,这种算法也有自己的优缺点:

优点

1、提高用户体验:通过选择响应时间最短的服务器来处理请求,可以显著减少用户的等待时间,提高整体的用户体验。
2、动态负载均衡:该算法能够实时地根据服务器的响应时间来调整负载分配,确保每台服务器都能根据其实际性能来处理相应数量的请求。
3、处理高峰期流量:在流量高峰期,最短响应时间算法可以确保请求被迅速处理,避免系统拥堵和延迟。

缺点:

1、计算开销:为了确定每台服务器的响应时间,系统需要不断地进行监测和计算,这可能会增加额外的系统开销。
2、瞬时波动:由于该算法主要依赖于实时的响应时间,因此可能会受到瞬时波动的影响。例如,如果某台服务器在某一时刻由于某种原因(如临时的高负载)响应时间变长,它可能会被暂时排除在负载均衡之外,即使其实际性能可能仍然优于其他服务器。
3、可能忽略其他性能指标:最短响应时间算法主要关注响应时间,可能忽略了其他重要的性能指标,如服务器的处理能力、内存占用等。在某些情况下,这可能导致负载分配不够均衡。

三、总结

本文介绍了常见的几种负载均衡策略,此外,还有一些其他策略,如:

  • DNS负载均衡,适用于全球范围内的负载均衡,可以根据用户的地理位置将请求分发到最近的服务器,提高访问速度。

  • 数据层负载均衡,需要考虑“数据与请求均衡的平衡”,最常见的方式就是按照分库分表进行分片hash负载

在选择负载均衡策略时,需要根据实际应用场景、服务器性能、网络状况等因素进行综合考虑,以达到最佳的负载均衡效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 计算属性和watch监听

1.1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 引入vue.js --><script src"node_modules/vue/dist/vue.js"></script> </h…

MySQL 快速学习路径

整理了下MySQL的快速学习路径 最近因为失业一直在家&#xff0c;闲来没事打算学习一下&#xff0c;打发时间。 大家可以订阅关注加转发 \(^o^)/~MySQL安装(Mac系统) MySQL的启停登陆与退出 MySQL的目录结构 MySQL语法分类 DDL&#xff08;1&#xff09; MySQL语法分类 DDL…

蚓链与数字化供应链的融合 带给新零售新福音

蚓链数字化生态与全境供应链的数字化融合&#xff0c;确实为新零售数字化营销带来了新的机遇。这种结合不仅提供了创新的思维和方法&#xff0c;更为新零售企业提供了强大的数字化承载和解决方案&#xff0c;使其能够更快捷地启动动销、实现倍速裂变、高福利宠粉&#xff0c;以…

如何在尽量不损害画质的前提下降低视频占内存大小?视频格式科普及无损压缩软件推荐

大家好呀&#xff0c;相比大家都有对视频画质和体积的追求和取舍&#xff0c;那么&#xff0c;如何才能在不牺牲画质的前提下&#xff0c;尽可能的将视频大小降低到极致呢&#xff1f; 首先我们要了解视频的构成&#xff0c;要想降低视频的体积大小&#xff0c;我们可以从以下几…

FITS:一个轻量级而又功能强大的时间序列分析模型

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

MySQL 多表查询强化练习

环境准备 create table dept(id int PRIMARY KEY,dname VARCHAR(50),loc VARCHAR(50) ); insert into dept values (10,研发部,北京), (20,学工部, 上海), (30,销售部,广州 ), (40,财务部,深圳);create table job(id int PRIMARY KEY,jname VARCHAR(20),descripition VARCHAR(…

【web世界探险家】HTML5 探索与实践

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &…

129740-002 是ABB生产的模块吗?

ABB 129740-002是一款智能模拟量输入输出IO模块。 这款模块的主要功能是进行模拟信号与数字信号之间的转换。具体来说&#xff0c;它可以将模拟信号转换为数字信号&#xff0c;也可以将数字信号转换回模拟信号。这一特性使其在工业应用中具有重要作用&#xff0c;尤其是在过程…

Cesium新版修改源码后,编译不生效问题

最新版本的cesium源码在编译时默认使用node_models下的cesium/engine&#xff0c;从而导致咱们修改项目中的源码并不会生效 解决方式 &#xff1a; 进入到实际的源码位置&#xff0c;执行npm link 在返回到源码的根目录下执行 npm link ./packages/engine

vue3 几种实现点击复制链接的方法

vue3 几种实现点击复制链接的方法 环境&#xff1a;vue3tselment plus 目的&#xff1a;常用到的地方就是点击复制分享链接功能 1.复制当前页面链接&#xff0c; <template><div class"news" style"margin-top: 30px"><el-button type&q…

C++ 函数模板

C 函数模板 函数模板 在C中&#xff0c;函数模板是一种允许函数以一种类型无关的方式来操作的工具。它们使得函数能够处理不同类型的数据而不需要为每种类型编写重复的代码。函数模板的核心思想是“参数化类型”&#xff0c;这意味着在定义函数时&#xff0c;可以使用一个或多…

Java动态SQL知识点(含面试大厂题和源码)

排序算法是数据结构与算法中的基本问题之一&#xff0c;它们的目的是将一组数据按照一定的顺序排列。不同的排序算法有着不同的时间复杂度、空间复杂度、稳定性等特性。在Java开发中&#xff0c;了解和掌握这些排序算法对于处理数据排序问题非常重要。下面是一些常用排序算法的…

游戏 AI 反作弊|内附解决方案详情!

我们提出使用在游戏中广泛存在的回放日志数据&#xff0c;重构出玩家当局的表现。在回放 日志数据中&#xff0c;我们构建了玩家的时序行为数据&#xff0c;并基于该时序行为数据&#xff0c;分别搭建 了透视和自瞄外挂检测系统&#xff0c;该方法和系统可广泛应用于各种在线…

SAP STMS请求重复传输

STMS 在接请求的导入的时候&#xff0c;第一次发生了错误&#xff0c;在修复了错误之后&#xff0c; 该请求二次导入显示已经该请求已全部导入 可以按如下操作进行再次导入 附加--》其他请求--》添加 输入请求号并勾选再次导入 然后点选需要重复导入的请求号即可再次导入

【移动端】AMap Flutter与Android AMap SDK交互

背景 本文的背景&#xff0c;是因为我在开发高德地图时&#xff0c;需要自定义高德比例尺位置和样式&#xff1b;但结果查看了AMap Flutter插件和AMap SDK源码后&#xff0c;发现AMap无法添加自定义MyMethodCallHandler的实现类&#xff01; why&#xff1f; 源码 在Flutte…

AI算力池化赋能企业大模型价值探索

1. 大语言模型企业落地中的算力痛点 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门的研究领域之一。在这一领域中&#xff0c;大语言模型&#xff08;Large Language Models&#xff09;凭借其强大的语言理解和生成能力&#xff…

学习笔记-华为IPD转型2020:3,IPD的实施

3. IPD的实施 1999 年开始的 IPD 转型是计划中的多个转型项目中的第一个&#xff08;Liu&#xff0c;2015&#xff09;。华为为此次转型成立了一个专门的团队&#xff0c;从大约20人开始&#xff0c;他们是华为第一产业的高层领导。董事会主席孙雅芳是这个团队的负责人。该团…

【Maven】使用maven-jar、maven-assembly、maven-shade优雅的实现第三方依赖一同打Jar包

文章目录 一.前言二.常规Jar 打包&#xff1a;maven-jar-plugin三.Shade 打包&#xff1a;maven-shade-plugin1.如何使用2.将部分jar包添加或排除3.将依赖jar包内部资源添加或排除4.自动将所有不使用的类排除5.将依赖的类重命名并打包进来 &#xff08;隔离方案&#xff09;6.修…

软件测试面试接口测试常见问题

接口测试中,依赖登录状态的接口如何测试? 答:依赖登录状态的接口的本质上是在每次发送请求时需要带上 session或者 cookie才能发送成功,在构建POST请求时添加必要的 session或者cookie 按你的理解,软件接口是什么? 就是指程序中具体负责在不同模块之间传输或接受数据的并做…

【笔记】本地笔记本ubuntu 远程传输服务器(ubuntu系统) 文件

命令格式&#xff1a; &#xff08;1&#xff09;将本地文件拷贝到远程&#xff1a;scp 文件名 用户名计算机IP或者计算机名称:远程路径 &#xff08;2&#xff09;从远程将文件拷回本地&#xff1a;scp 用户名计算机IP或者计算机名称:文件名本地路径 &#xff08;3&#xff0…