常用负载均衡详解

一、介绍

在互联网场景下,负载均衡(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…

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

大家好呀&#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…

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

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

SAP STMS请求重复传输

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

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.修…

【Linux】项目部署CPU彪高如何定位

1.查看所有CPU占比 使用top指令获取彪高进程的PID 2.输出进程的信息 ps H -eo pid,tid,%cpu | grep 1313 3.查看线程的信息 jstack tid nid都是十六进制的 4.进制转换 将 tid的十进制转为十六进制 找到nid 可以定位到具体位置 5.关闭程序 ps -ef | grep java kill -9 jav…

机器人路径规划:基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(提供Python代码)

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的&#xff0c;因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始&#xff0c;采用贪心算法的策略&#…

通过更新路书当前坐标下marker的icon来展示沿途的风景

通过更新路书当前坐标下marker的icon来展示沿途的风景 1.效果图2.[工程链接](https://download.csdn.net/download/m0_61864577/88978866)3.需修改地方: 本文演示了如何通过百度地图的路书功能,展示途经的风景。定时缩放,既有全局路径,又有当前位置和运动轨迹;可以显示当前坐标…

万界星空科技铜拉丝行业生产管理MES系统

铜拉丝加工作为金属加工行业中的一个重要分支&#xff0c;在国内乃至全球工业领域都扮演着不可或缺的角色。特别是在高导材料领域&#xff0c;铜拉丝加工更是发挥着重要作用。 铜作为一种传统的金属材料&#xff0c;其拉丝加工技术早在古代就有应用。随着工业化进程的加快&…

综合练习(python)

前言 有了前面的知识积累&#xff0c;我们这里做两个小练习&#xff0c;都要灵活运用前面的知识。 First 需求 根据美国/英国各自YouTube的数据&#xff0c;绘制出各自的评论数量的直方图 第一版 import numpy as np from matplotlib import pyplot as plt import matplo…

Flutter Widget:State 状态管理

响应式的编程框架永恒的主题——“状态(State)管理” 无论是在 React/Vue/Flutter 中讨论的问题和解决的思想都是一致的。 StatefulWidget的状态应该被谁管理&#xff1f;Widget本身&#xff1f;父 Widget &#xff1f;都会&#xff1f;还是另一个对象&#xff1f; 下面是官…

webpack的热更新是如何做到的?

Webpack的热更新&#xff08;Hot Module Replacement&#xff0c;HMR&#xff09;技术是现代前端开发中极为重要的一部分&#xff0c;它极大地提高了开发效率&#xff0c;并让开发者能够实时地查看代码更改后的效果&#xff0c;而无需手动刷新页面。在本文中&#xff0c;我们将…