打赏

轻松学习分布式|系列2|负载均衡算法。

上篇文章,我们用客服公司的例子来简单介绍什么是分布式系统。

今天,我们继续我们的创业游戏。(本系列,打算类似于打怪升级的游戏模式来讲解一些深奥的内容,喜欢严肃古板的同学,可以选择离开 )。

由于我们的业务越来越好,有些客户也越来越喜欢我们的客户小姐姐,哦,不对,越来喜欢我们的服务。有些客户就问了,你们除了订机票,还能不能订酒店啊?

做老板的你,第一时间,眼睛冒出两个¥¥。有钱赚,傻子才拒绝。

两话不说,开干,招人!

再招一组小姐姐,专门从事订酒店。你指示下属,加紧联系相关酒店,经过一段时间,你们的酒店业务也跑起来了。

这个时候,我们就有了两个不同的业务,这就是:垂直拆分。

所谓,垂直拆分,就是不同的业务或服务,拆分开来,独立也一组,为外面提供服务。

当然随着业务规模发展越来越大,一个客服小姐姐做为转接员,也忙不过来,我们就设立了一个小姐,统一做电话转接的工作。

因为转接业务,是同时为后面两个业务服务的,这种独立设立或拆分的方式,就是水平拆分。

所谓,水平拆分,就是把公共的服务,拆分出来,独立成组,为外界提供服务。

现在我们的公司业务大概是这样的,如下图:

 

 我们来说说转接业务组,这个业务组因为直接面向客户,当然工作量最大,责任最大。

她们每天接到酒店的电话,就把电话转接到酒店 业务组。

如果接到机票的电话,就转接到机票业务组。

有一天,一位转接业务组的小姐姐突然跑到你的办公室。

小姐姐:老板,我有一个提议。可以帮你省很多钱。

你:请说。

小姐姐:转接组只是接了电话,就把酒店的业务电话转给酒店组,机票电话就转给机票组。那我们能否直接在我们的热线电话上设置:订机票请按1,订酒店讲按2,就直接转给相关组了,不需要我们业务组再转接了。

你:对啊!好意见!这个月开始,你的工资涨一倍。任命你为业务经理。你去重新规划分配转接组的工作安排。

现在转接组的业务,就自动让电话软件代替了,这就叫自动化。当然,自动化,也不属于分布式系统中一个关键的概念,但是在软件开发或架构设计中,它是极其重要的思维方式或工作原则。

这个原则就是:能自动化的尽量自动化。

我们再跳回到游戏中。

自动化处理后,业务越来越好,客户的电话越来越多。现在问题来了。

比如,10个酒店的订单电话,分配给10个小姐姐去处理。我们应该怎么处理呢?

有同学说,谁有空谁接,随机处理好了。这就是负载均衡的随机法:

随机法

     通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,

其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。

那如果,有的小姐姐能力强一点,有的能力弱一点,又怎么处理呢?

有同学说,那就让能力强的多干点活,工资提成也多给点就行。对的,这就是负载均衡的加权随机法

加权随机法

    加权随机法也根据后端机器的配置,系统的负载分配不同的权重。它是按照权重随机请求后端服务器。

那能否做到公平一点呢?每人接尽量分配一些工作。

有同学说,这好办,第1个给编号1,第2个给编号2,等等,如此类推。

那,20个电话呢?

同学说,也好办,1,3给编号1;2,4给编号2,等等,如此类推。

那,30个,40个呢?

同学:这.......

怎么办?

很简单,学过数学 的你,很自然想到用整除求余函数mod。

比较,有10个小姐姐,30个电话,就是:21mod10=1,  22mod10=2,等等,如此类推。

那每个电话都可以平均分配到每个小姐姐。这个就是:负载均衡的轮询法

轮询法

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

当然轮询法中,也同样可以让能力强的干多点活,多拿点钱。这个就是,负载均衡的加权轮询法

加权轮询法

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

 

这时,有个VIP客户,每次电话都特别喜欢找2号的小姐姐。不是2号的小姐姐,他就不订票,客户就是上帝,当然要满足客户需求,怎么办呢?

简单,把这个客户的电话记下来,编号为2,软件设置一下,下次编号2的客户就直接转接到编号2的小姐姐。

这个就是负载均衡中的源地址哈希法

源地址哈希法

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

 

现在,又有一个情景,每个小姐姐都有很多电话等待处理,但有点小姐处理快,等待电话就少了。如果现在又有新电话进来,如何处理?

简单,把电话转给等待电话少的小姐姐。

这就是:负载均衡的最小连接数法

最小连接数法

     最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前

积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

 

以上就是我们今天要讲得负载均衡算法 。

 

posted @ 2019-06-20 11:06  gyc567  阅读(174)  评论(0编辑  收藏  举报