负载均衡(Load Balancing)学习笔记三——负载均衡算法

2023-11-02 06:58

本文主要是介绍负载均衡(Load Balancing)学习笔记三——负载均衡算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文讲述实现负载均衡的常用算法。

轮询法(Round Robin)
轮询法是负载均衡中最常用的算法,它容易理解也容易实现。 
轮询法是指负载均衡服务器(load balancer)将客户端请求按顺序轮流分配到后端服务器上,以达到负载均衡的目的。 
假设现在有6个客户端请求,2台后端服务器。当第一个请求到达负载均衡服务器时,负载均衡服务器会将这个请求分派到后端服务器1;当第二个请求到害时,负载均衡服务器会将这个请求分派到后端服务器2。然后第三个请求到达,由于只有两台后端服务器,故请求3会被分派到后端服务器1。依次类推,其示意图如图1所示。

 
图1:轮询法负载均衡

加权轮询法(Weighted Round Robin)
简单的轮询法并不考虑后端机器的性能和负载差异。给性能高、负载低的机器配置较高的权重,让其处理较多的请求;而性能低、负载高的机器,配置较低的权重,让其处理较少的请求。加权轮询法可以很好地处理这一问题,它将请求顺序且按照权重分派到后端服务器。 
假设有6个客户端请求,2台后端服务器。后端服务器1被赋予权值5,后端服务器2被赋予赋予权值1。这样一来,客户端请求1,2,3,4,5都被分派到服务器1处理;客户端请求6被分派到服务器2处理。接下来,请求7,8,9,10,11被分派到服务器1,请求12被分派到服务器2,依次类推。这个请求分派的过程可以用图2来表示。

 
图2:加权轮询法负载均衡

最小连接数法(Least Connections)
即使后端机器的性能和负载一样,不同客户端请求复杂度不一样导致处理时间也不一样。最小连接数法根据后端服务器当前的连接数情况,动态地选取其中积压连接数最小的一台服务器来处理当前的请求,尽可能提高后端服务器的利用效率,合理地将请求分流到每一台服务器。 
为什么根据连接数可以合理地利用服务器处理请求呢? 
考虑一个客户端请求的处理逻辑较复杂,需要服务器的处理时间较长,由于客户端需要等待服务器的响应,故需要保持与服务器的连接,这样一来,客户端就需要与服务器保持较长时间的连接。 
假设客户端请求1,2,3,4,5已被分派给服务器1和服务器2,其分派的情况如图3所示:

 
图3:最小连接法示意图(1)

此时,服务器上的请求1,请求3已处理完毕,与客户端的连接已断开。而请求2,4,5还在服务器上处理,即服务器还保持与这些请求的客户端的连接。 
如果再把请求分派到服务器2,则会导致服务器的请求更多,服务器2的负载更高。如果考虑服务器的连接数,当前服务器1的连接数为1,服务器2的连接数为2,将请求分派到服务器1,则负载相对均衡。采用最小连接数法的分派方法如图4所示:

 
图4:最小连接法示意图(2)

随机法(Random)
随机法也很简单,就是随机选择一台后端服务器进行请求的处理。由于每次服务器被挑中的概率都一样,客户端的请求可以被均匀地分派到所有的后端服务器上。

源地址哈希法(Source Hashing)
源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。 
如果后端服务器是一缓存系统,当后端服务器增加或者减少时,采用简单的哈希取模的方法,会使得命中率大大降低,这个问题可以采用一致性哈希的方法来解决。 
关于一致性哈希的介绍,可以参考文件 一致性Hash(Consistent Hashing)原理剖析。

参考资料
http://www.jscape.com/blog/load-balancing-algorithms
大型网站技术架构——核心原理与安全分析,李智慧著,电子工业出版社
http://www.cnblogs.com/SmartLee/p/5161415.html
一致性Hash(Consistent Hashing)原理剖析,http://blog.csdn.net/lihao21/article/details/54193868
--------------------- 
作者:haozlee 
来源:CSDN 
原文:https://blog.csdn.net/lihao21/article/details/54695471 
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于负载均衡(Load Balancing)学习笔记三——负载均衡算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328899

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

nginx负载均衡及详细配置方法

《nginx负载均衡及详细配置方法》Nginx作为一种高效的Web服务器和反向代理服务器,广泛应用于网站的负载均衡中,:本文主要介绍nginx负载均衡及详细配置,需要的朋友可以参考下... 目录一、 nginx负载均衡策略1.1 基本负载均衡策略1.2 第三方策略1.3 策略对比二、 nginx配置2.1

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S