常见的负载均衡算法有哪些问答

常见的负载均衡算法有:1、轮询法RoundRobin,将请求按顺序轮流分配到后台服务器上,从而均衡的对待每一台服务器;2、随机法,通过系统随机函数,根据后台服务器列表的大小值来随机选取其中一台进行访问;3、源地址哈希法,主要是根据服务消费者请求客户端的IP地址实现;4、加权轮询法,将请求按照顺序且根据权重分配给后端;5、加权随机法,根据后台服务器不同的配置和负载情况,配置不同的权重;6、最小连接法,根据最小连接数的服务器来实现负载均衡。

负载均衡算法

在分布式系统中,多台服务器同时提供一个服务,并统一到服务配置中心进行管理,如下图所示。

消费者通过查询服务配置中心,获取到服务到地址列表,需要选取其中一台来发起RPC远程调用。如何选择,则取决于具体的负载均衡算法,对应于不同的场景,选择的负载均衡算法也不尽相同。负载均衡算法的种类有很多种,常见的负载均衡算法包括轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法等,应根据具体的使用场景选取对应的算法。

1、轮询(RoundRobin)法

轮询很容易实现,将请求按顺序轮流分配到后台服务器上,均衡的对待每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

这里通过实例化一个serviceWeightMap的Map变量来服务器地址和权重的映射,以此来模拟轮询算法的实现,其中设置的权重值在以后的加权算法中会使用到,这里先不做过多介绍,该变量初始化如下:

privatestaticMapserviceWeightMap=newHashMap();

static{

serviceWeightMap.put("192.168.1.100",1);

serviceWeightMap.put("192.168.1.101",1);
//权重为4

serviceWeightMap.put("192.168.1.102",4);

serviceWeightMap.put("192.168.1.103",1);

serviceWeightMap.put("192.168.1.104",1);
//权重为3

serviceWeightMap.put("192.168.1.105",3);

serviceWeightMap.put("192.168.1.106",1);
//权重为2

serviceWeightMap.put("192.168.1.107",2);

serviceWeightMap.put("192.168.1.108",1);

serviceWeightMap.put("192.168.1.109",1);

serviceWeightMap.put("192.168.1.110",1);

}通过该地址列表,实现的轮询算法的部分关键代码如下

privatestaticIntegerpos=0;

publicstaticStringtestRoundRobin(){

//重新创建一个map,避免出现由于服务器上线和下线导致的并发问题

MapserverMap=newHashMap();

serverMap.putAll(serviceWeightMap);

//取得IP地址list

SetkeySet=serverMap.keySet();

ArrayListkeyList=newArrayList();

keyList.addAll(keySet);

Stringserver=null;

synchronized(pos){

if(pos>keySet.size()){

pos=0;

}

server=keyList.get(pos);

pos++;

returnserver;

}由于serviceWeightMap中的地址列表是动态的,随时可能由机器上线、下线或者宕机,因此,为了避免可能出现的并发问题,比如数组越界,通过在方法内新建局部变量serverMap,先将域变量拷贝到线程本地,避免被其他线程修改。这样可能会引入新的问题,当被拷贝之后,serviceWeightMap的修改将无法被serverMap感知,也就是说,在这一轮的选择服务器中,新增服务器或者下线服务器,负载均衡算法中将无法获知。新增比较好处理,而当服务器下线或者宕机时,服务消费者将有可能访问不到不存在的地址。因此,在服务消费者服务端需要考虑该问题,并且进行相应的容错处理,比如重新发起一次调用。

对于当前轮询的位置变量pos,为了保证服务器选择的顺序性,需要对其在操作时加上synchronized锁,使得同一时刻只有一个线程能够修改pos的值,否则当pos变量被并发修改,将无法保证服务器选择的顺序性,甚至有可能导致keyList数组越界。

使用轮询策略的目的是,希望做到请求转移的绝对均衡,但付出的代价性能也是相当大的。为了保证pos变量的并发互斥,引入了重量级悲观锁synchronized,将会导致该轮询代码的并发吞吐量明显下降。

2、随机法

通过系统随机函数,根据后台服务器列表的大小值来随机选取其中一台进行访问。由概率概率统计理论可以得知,随着调用量的增大,其实际效果越来越接近于平均分配流量到后台的每一台服务器,也就是轮询法的效果。

随机算法的部分关键代码如下:

publicstaticStringtestRandom(){

Randomrandom=newRandom();

intrandomPos=random.nextInt(keyList.size());

Stringserver=keyList.get(randomPos);

}跟前面类似,为了避免并发的问题,需要将serviceWeightMap拷贝到serverMap中。通过Random的nextInt函数,取到0~keyList.size之间的随机值,从而从服务器列表中随机取到一台服务器的地址,进行返回。根据概率统计理论,吞吐量越大,随机算法的效果越接近于轮询算法的效果。

3、源地址哈希法

源地址哈希法的思想是根据服务消费者请求客户端的IP地址,通过哈希函数计算得到一个哈希值,将此哈希值和服务器列表的大小进行取模运算,得到的结果便是要访问的服务器地址的序号。采用源地址哈希法进行负载均衡,相同的IP客户端,如果服务器列表不变,将映射到同一个后台服务器进行访问。

源地址哈希法部分关键代码如下:

publicstaticStringtestConsumerHash(StringremoteIp){

inthashCode=remoteIp.hashCode();

intpos=hashCode%keyList.size();

returnkeyList.get(pos);

}4、加权轮询(WeightRoundRobin)法

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

加权轮询法部分关键代码如下:

publicstaticStringtestWeightRoundRobin(){

Iteratorit=keySet.iterator();

ListserverList=newArrayList();

while(it.hasNext()){

Stringserver=it.next();

Integerweight=serverMap.get(server);

for(inti=0;i

serverList.add(server);

if(pos>serverList.size()){

server=serverList.get(pos);

}与轮询算法类似,只是在获取服务器地址之前增加了一段权重计算代码,根据权重的大小,将地址重复增加到服务器地址列表中,权重越大,该服务器每轮所获得的请求数量越多。

5、加权随机(WeightRandom)法

加权随机法跟加权轮询法类似,根据后台服务器不同的配置和负载情况,配置不同的权重。不同的是,它是按照权重来随机选取服务器的,而非顺序。

部分关键代码如下:

publicstaticStringtestWeightRandom(){

intrandomPos=random.nextInt(serverList.size());

Stringserver=serverList.get(randomPos);

}6、最小连接数法

前面我们费尽心思来实现服务消费者请求次数分配的均衡,我们知道这样做是没错的,可以为后端的多台服务器平均分配工作量,最大程度地提高服务器的利用率,但是,实际上,请求次数的均衡并不代表负载的均衡。因此我们需要介绍最小连接数法,最小连接数法比较灵活和智能,由于后台服务器的配置不尽相同,对请求的处理有快有慢,它正是根据后端服务器当前的连接情况,动态的选取其中当前积压连接数最少的一台服务器来处理当前请求,尽可能的提高后台服务器利用率,将负载合理的分流到每一台服务器。

THE END
1.大数据的算法有哪些2.聚类算法:聚类算法用于将数据集划分为不同的群组,常见的聚类算法有K均值算法、层次聚类算法和DBSCAN算法等。 3. 关联规则挖掘:关联规则挖掘算法用于发现数据集中的关联关系,常见的关联规则挖掘算法有Apriori算法和FP-growth算法等。 4.推荐系统算法:推荐系统算法用于根据用户的历史行为和偏好,向用户推荐个性化的信息,https://wenku.baidu.com/view/ccc4ae9ff9d6195f312b3169a45177232f60e4e7.html
2.算法工程师必知必会10大基础算法!快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。 事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被https://mp.weixin.qq.com/s?__biz=MzAxMzA2MDYxMw==&mid=2651574486&idx=2&sn=147bf60dcce6aea92a70778ed6f90dea&chksm=80572fbcb720a6aadabcdb78d6fd1b608228d05d33a8e75c419b3ce128111c545992b7eed228&scene=27
3.数据挖掘的常见算法有哪些?数据挖掘的常见算法有哪些? 数据挖掘是一种通过从大量数据中提取知识和信息的方法,以支持业务决策、市场分析和科学研究等领域。在数据挖掘过程中,算法是最重要的组成部分之一。以下是常见的数据挖掘算法。 1.分类算法 分类算法是一类用于将数据样本分为不同类别的算法。这些算法通常使用监督学习方法,其中模型基于已标记https://www.cda.cn/bigdata/202782.html
4.常见的经典算法有哪些Python常见的经典算法有哪些 在计算机科学领域,有一些经典算法被广泛应用于各种问题的解决。这些算法经过长期的研究和实践,被证明是高效且有效的。本文将介绍几个常见的经典算法,并提供相应的Python源代码。 一、冒泡排序算法(Bubble Sort) 冒泡排序是一种简单但效率较低的排序算法。它的基本思想是通过相邻元素之间的比较和交https://download.csdn.net/blog/column/12405713/133216600
5.什么是哈希算法?常见的哈希算法有哪些?区块链技术区块链这篇文章主要介绍了什么是哈希算法?常见的哈希算法有哪些?的相关资料,需要的朋友可以参考下本文详细内容介绍 哈希算法是一种数学函数或者算法,它可以将任意长度的数据(称为“消息”)转换为固定长度的字符串(称为“哈希值”或者简称“哈希”)。哈希算法的作用是将数据进行一次性的加密,从而生成一个唯一且不可逆的标识https://www.jb51.net/blockchain/891421.html
6.什么是哈希算法?常见的哈希算法有哪些?常见的哈希算法有哪些? 币界网报道: 哈希算法,也被称为散列算法,是一种将输入数据转换为固定长度的输出值的算法。它通过对输入数据进行一系列复杂的计算和操作,生成一个唯一的哈希值。哈希算法的最大特点是快速和高效,能够快速地确定数据是否被篡改或者检索数据。https://www.528btc.com/college/1695140495130670.html
7.机器学习常见算法类型都有哪些算法是程序员在学习软件编程开发技术的时候需要重点掌握的一个编程开发技术知识,而今天我们就通过案例分析来了解一下,机器学习常见算法类型都有哪些。 1.分类算法 这是一种监督学习方法。有很多算法帮助我们解决分类问题,比如K近邻、决策树、朴素贝叶斯、贝叶斯网络、逻辑回归、SVM等算法。人工神经网络和深度学习也往往用https://www.douban.com/note/782408490/
8.常见的排序算法有哪些?如何实现这些算法?常见的排序算法有哪些?如何实现这些算法? 1.背景介绍 在计算机科学与数学中,排序算法(Sorting algorithm)是一种能将一串资料依照特定排序方式进行排列的一种算法。 最常用到的排序方式是数值顺序以及字典顺序。 有效的排序算法在一些算法(例如搜寻算法与合并算法)中是重要的, 如此这些算法才能得到正确解答。 排序算法也https://www.pianshen.com/article/7707638722/
9.加密算法可以归结为哪几类常见的加密算法有哪些对称加密是指加密和解密使用同一个密钥的加密方式,其中最常见的算法包括DES、3DES、AES等。 2.非对称加密 非对称加密是指加密和解密使用不同密钥的加密方式,常规算法包括RSA、DSA、ECC等。 3.哈希函数 哈希函数是指将任意长度的消息压缩成固定长度摘要的函数,常见算法有MD5、SHA-1、SHA-256等。 https://www.eefocus.com/e/528368.html
10.互联网公司最常见的面试算法题有哪些?? 目录 收起 算法考察趋势 高频题 对于数组,可能会重点考察以下题目:对于链表,可能会重点考察以下https://www.zhihu.com/question/24964987/answer/1848770106
11.互联网公司最常见的面试算法题有哪些?来自爱可可《互联网公司最常见的面试算法题有哪些? - 知乎》 O互联网公司最常见的面试算法题有哪些? - 知乎 ?收藏 127 30 ?41 评论 o p 同时转发到我的微博 按热度 按时间 正在加载,请稍候互联网科技博主 3 公司 北京邮电大学 ü 简介: 北邮PRIS模式识别实验室陈老师 商务合作https://weibo.com/1402400261/EAC0M6nE1
12.常用的加密方式有哪些?采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。 对称加密的优缺点:优点是算法公开、计算量小、加密速度快、加密效率高,安全、可认证;缺点是BS网络传输关系,密钥过多难维护https://nic.hnuu.edu.cn/10043/2023/0029457.html
13.常见的推荐算法有哪些及它们的优缺点。腾讯云开发者社区常见的推荐算法有哪些及它们的优缺点。 大家好,我是贤弟! 常见的推荐算法包括以下几种: 一、基于内容的推荐算法 基于内容的推荐算法是将用户的历史偏好和物品的属性进行比较,从而为用户推荐相似的物品。算法主要思想是在物品的内容描述中提取特征向量,并计算不同物品之间的相似度,然后推荐与用户过去喜欢的物品相似的https://cloud.tencent.com/developer/news/1278222
14.关于查找有哪些常见的算法?查找算法有两种:一种只作查找操作,我们称之为静态查找。一种在查找过程种同时插入或删除数据元素,我们称之为动态查找。 静态查找 它的功能如下: 查询某个“特定的”数据元素是否在查找表中; 检索某个“特定的”数据元素和各种属性。 常见的查找方法有:顺序查找、折半查找、插值查找、斐波那契查找等,容我细细讲来https://www.jianshu.com/p/6c1afbeb9b96