首页 > 编程语言 >负载均衡算法

负载均衡算法

时间:2024-07-18 13:27:22浏览次数:15  
标签:负载 均衡 轮询 算法 哈希 服务器 节点

一、算法扩展----哈希算法

1.基本概念

哈希算法也叫摘要算法,是一种用于加密的算法,其工作原理是对任意一组输入总能得到一个长度固定的计算结果,即将任意数据映射到具体数值。

2.特点

对于相同输入,hash后结果一定相同 ;对于不同输入,hash后结果大概率不同。

3、哈希碰撞(冲突)

即两个不同的输入,经过计算后得到了相同的结果。产生hash碰撞的原因:由于hash算法输出的字节长度是固定的,而输入的长度确实无限的,用无限的输入映射有限的输出,就会产生碰撞。

二、负载均衡算法

1、轮询法

将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。

优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡;

缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。

2.随机法

将请求随机分配到各个节点。由概率统计理论得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配,也就是轮询的结果。

优缺点和轮询相似。

3.加权轮询法

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

加权轮询算法要生成一个服务器序列,该序列中包含n个服务器。n是所有服务器的权重之和。在该序列中,每个服务器的出现的次数,等于其权重值。并且,生成的序列中,服务器的分布应该尽可能的均匀。比如序列{a, a, a, a, a, b, c}中,前五个请求都会分配给服务器a,这就是一种不均匀的分配方法,更好的序列应该是:{a, a, b, a, c, a, a}。

优点:可以将不同机器的性能问题纳入到考量范围,集群性能最优最大化;

缺点:生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。

4.加权随机法

与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。

5.源地址哈希法(取模算法)

源地址哈希的思想是根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会落到到同一台服务器进行访问。

优点:相同的IP每次落在同一个节点,可以人为干预客户端请求方向,例如灰度发布;

缺点:如果某个节点出现故障,会导致这个节点上的客户端无法使用,无法保证高可用。当某一用户成为热点用户,那么会有巨大的流量涌向这个节点,导致冷热分布不均衡,无法有效利用起集群的性能。所以当热点事件出现时,一般会将源地址哈希法切换成轮询法。

 6.一致性哈希算法

一致性哈希算法主要应用在分布式缓存系统中,在增加或者删除服务器节点时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系,也就是系统中的大多数历史缓存的存储服务器节点可以不变,解决了普通 hash 算法带来的动态伸缩性问题。

 

虚拟节点:
一致性哈希通过引入虚拟节点解决了这个问题,每个实际节点映射多个虚拟节点,数据按照规则找到虚拟节点后,再储存到映射的实际节点上;因为虚拟节点可以在 hash 环上均匀分布,这意味着当一个真实节点失效退出后,它原来所承载的压力将会均匀地分散到其他节点上去,解决缓存雪崩问题。

哈希偏斜

标签:负载,均衡,轮询,算法,哈希,服务器,节点
From: https://blog.csdn.net/weixin_63867965/article/details/140520152

相关文章

  • 算法力扣刷题记录 五十一【654.最大二叉树】
    前言二叉树篇,继续。记录五十一【654.最大二叉树】一、题目阅读给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的......
  • 算法力扣刷题记录 五十【106.从中序与后序遍历序列构造二叉树】和【105.从前序与中序
    前言记录三十八的四、二叉树构建通过层序遍历的数组实现。层序遍历中,某个节点下标是i,那么左孩子的下标2i+1,右孩子的下标2i+2。这是统一的规律。那么通过中序序列和后序序列如何构造二叉树?通过中序序列和前序序列如何构造二叉树?通过前序序列和后序序列如何构造二叉树?一......
  • 无源晶振的负载电容Load Capacitance与频偏Frequency Deviation
    在无源晶振(石英晶体谐振器)电路应用中,我们期望获得稳定且精准的时钟信号,这取决于晶振的实际输出频率需要靠近中心频率。一般情况下,时钟信号的精准度及稳定度则主要由无源晶振本身精度及合适的外接电容所决定。在做电路设计的时候,很多工程师不知道无源晶振的负载电容如何计算。......
  • 大模型算法方向实习会经常提问哪些问题? ?
    现互联网研发一枚,曾拿过多个算法/研发岗SPoffer,简要介绍一下大模型算法岗面试内容和如何准备面试。大模型算法岗的面试内容,实际上可以拆解成两部分,一是算法岗通用的面试内容,二是大模型专有相关部分。算法岗通用面试内容这部分内容很重要,因为通用的面试内容可以适用于不同......
  • 提升PHP并行处理效率:深入解析数组排序算法及优化策略
    本文由ChatMoney团队出品在PHP开发中,数组排序是一个常见的操作。随着互联网技术的不断发展,对数据处理速度和效率的要求越来越高,如何在保证排序质量的同时提高处理速度成为了一个值得探讨的问题。本文将分析PHP数组排序算法对并行处理的影响,并提供一些优化建议。一、PHP......
  • PHP 数组排序算法对并行处理的影响
    本文由ChatMoney团队出品在PHP开发中,数组排序是一个常见的操作。随着互联网技术的不断发展,对数据处理速度和效率的要求越来越高,如何在保证排序质量的同时提高处理速度成为了一个值得探讨的问题。本文将分析PHP数组排序算法对并行处理的影响,并提供一些优化建议。一、PHP......
  • 电瓶车检测AI算法:视频智能分析技术助力电瓶车规范与安全管理
    随着电瓶车(电动自行车)的普及,其在城市交通中扮演着越来越重要的角色。然而,电瓶车的管理、安全监控以及维护等方面也面临着诸多挑战。近年来,人工智能(AI)技术的发展为解决这些问题提供了新的途径。电瓶车检测AI算法能够通过深度学习等技术对电瓶车及其相关行为进行智能识别和分析,为电......
  • 扩展欧几里得算法(exGcd)
    扩展欧几里得算法(ExtendedEuclideanalgorithm,EXGCD),常用于求\(ax+by=c\)的一组可行解。过程设\(ax_1+by_1=\gcd(a,b)\)\(bx_2+(a\modb)y_2=gcd(b,a\modb)\)由欧几里得算法:\(\gcd(a,b)=gcd(b,a\modb)\)所以:\(ax_1+by_1=bx_2+(a\modb)y_2\)又因为:\(a\mod......
  • 排序算法(4)之快速排序(1)
     个人主页:C++忠实粉丝欢迎点赞......
  • 从零手写实现 nginx-31-load balance 负载均衡介绍
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......