总结各种常见的负载均衡算法

关于负载均衡算法一般是用在分布式系统中的服务协调时选择哪一台服务进行计算的算法。在dubbo,nginx,zookeeper,springcloud中的这些框架中都有用到。

下面就来总结一些常见的负载均衡算法,让大家对这些算法有一个详细的了解。最开始接触,就是nginx反向代理服务器,里面去设置负载均衡算法。如何选择哪一种负载均衡算法,这个要根据不同的应用场景去选择。没有最优的,只有最适合这种场景的。

以下总结排名不分先后:

1.轮询法

就是将请求按照顺序去重复的循环转发到对应的服务上,它均衡的对待每一台服务器,而不关心实际的连接数和当前的系统负载。

一般来说代码实现的话如下:

这里通过初始化一个serverWeightMap的Map变量来表示服务器地址和权重的映射,以此来模拟轮询算法的实现


image.png

由于serverWeightMap中的地址列表是动态的,随时可能有机器上线、下线或者宕机,因此为了避免可能出现的并发问题,如数组越界,通过新建方法内的局部变量serverMap,先将域变量复制到线程本地,以避免被多个线程修改。这样可能会引入新的问题,复制以后serverWeightMap的修改将无法反映给serverMap,也就是说,在这一轮选择服务器的过程中,新增服务器或者下线服务器,负载均衡算法中将无法获知。

新增比较好处理,而当服务器下线或者宕机时,服务消费者将有可能访问到不存在的地址。因此,在服务消费者的实现端需要考虑该问题,并且进行相应的容错处理,比如重新发起一次调用。

使用轮询的目的在于,能够均衡的把请求转移,但是付出的性能代价是非常大的。为了保证pos变量修改的互斥性,需要引入重量级悲观锁,synchronized会导致该轮询代码的并发吞吐量发生明显的下降。

2.随机法

通过系统产生的随机数,根据后端的服务器列表的大小随机选取一台。由于概率论可知,随着调用量的增大,实际效果会越来越趋于平衡。

3.源地址哈希(Hash)法

其思想就是获取客户端访问的IP地址值,通过Hash函数计算得到一个数值,用该数值对服务器列表大小进行取模运算,得到的结果就是要访问的服务器的序号。

采用Hash法进行访问,同一个IP地址的客户端,当后端服务器列表不变时,它每次都会被映射到同一台服务器上进行访问。这个特性可以在服务消费者和服务提供者之间建立有状态的session会话。

4.加权轮询法

这个算法主要是根据不同的后端服务器的配置,处理性能和当前系统的负载并不相同,抗压能力也不同。给配置高,负载低的服务器设置更高的权重,其实就是优先级只不过这里是优先级整数值越大,权重就越大。让其处理更多的请求,而低配置、高负载的话,就设置比较低的权重,降低负载(接收访问的数量,处理请求的数量)

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

举例:
服务器ip 权重
127.0.0.1 3

127.0.0.2 2

127.0.0.3 1

则经过加权轮询的负载均衡算法后,访问的顺序为
127.0.0.1
127.0.0.1
127.0.0.1
127.0.0.2
127.0.0.2
127.0.0.3
。。。。(再依照以上的顺序一直循环)

  1. 加权随机(Weight Random)法

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

跟上一种很相似,区别就是权重越大,会被请求的概率越大。

6.最小连接数法

最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它正是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一 台服务器来处理当前请求,尽可能地提高后端服务器的利用效率,将负载合理地分流到每一 台机器。

感谢您阅读我的文章,整理不易,帮我点个赞,谢谢哈。
如果对文章部分还有什么见解或者疑惑,可以私信评论我,欢迎技术讨论。可以加我微信z985085305,获取我整理的一些其他的笔记。

思想的碰撞最能促进技术的进步哦

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容