00:00
好,接下来呢,来说一下在集群模式下我们double的负载均衡机制,Double呢,默认支持多种负载均衡策略,比如第一种叫random,我们随机的按照权重的负载均衡,还有我们这个叫road Robin,它是呢,按照权重的轮旋方式的负载均衡,还有latest active,我们最少活跃数以及constant ha一致性,哈希这四种负载均衡什么意思呢?哎,我们可以看一下这张图,比如第一种叫random,我们基于权重的随机的负载均衡机制,比如我们的order service,想要调用user service user service呢,我们分别在三台机器一、二、三里边都有,我们可以为每一台机器的这个服务设置权重,比如它的权重是100,那它的权重呢是200,它的权重是50,那么合起来呢,总权重就是350,那么对于一号机器来说。
01:01
它的这个概率就是三百五分之一百,那就是2/7,也就是说我们在负载均衡的情况下,我们大量请求过来呢,大约有2/7的请求会来到这个机器,大约呢,有4/7的请求会来到这儿,1/7的请求呢会来到这啊权重呢,相当于是它的一个概率分布,但是呢,我们说如果第一次我来调用一号机器。那么第二次就不一定了,不一定是调二调三还是调四,有可能还落在一号机器,但是呢,总体上按照大量请求概率分布来看,一号机器会占2/7的概率,这是随机方式的负载均衡,它的下一次调用我们也不知道在哪儿,但是呢,总概率呢大于这么多,然后呢,还有第二个叫基于权重的轮询方式的负载均衡比,就说呢,首先我们来说,如果没有权重的方式,人家呢也有一个轮询,就说我们如果忽略掉权重,只看轮询,那应该是怎么样呢?我们这个order service想调user service,轮胸情况下呢,那就是挨个来访问,比如第一个请求过来,先用一号机器的user service服务,哎,第二个人呢,又发了一个请求过来,那按照轮询机制,我们该轮到第二号了,那么第二号处理完了,如果下次还有user service的请求过来。
02:27
应该轮到第三号了,再下一次又轮到第一号,第二号,第三号,这是呢,按照轮询的方式,哎,每一个人呢,都轮了一次,但是呢,我们可以加上权重的轮旋,我们呢,还是给以前的方式来设置权重,相当有2/7的概率来这,4/7来这,七分之一来这,但是呢,如果是以前随机第一个服务器调完第二个服务器呢,我们不知道在哪,但是轮胸的情况下,我们知道第一个调完必须来到第二个,好,所以说呢,我们假设有七次请求,第一次请求过来调一号机器,第二次请求呢,按照轮询也得来到第二号,第三次请求呢,按照轮询来到第三个机器,那第四个请求呢,我们还是来到第一个机器啊,第五个请求呢,来到第二个机器,但是第六个请求大家注意,本应该我们是来到三号机器的,但是在我们七次请求中,哎,第一号机器呢,应该占两次。
03:27
第二号呢站四次,第三号呢应该只能站一次,那在第一遍轮胸的时候,三号已经用过了,所以呢,我们第六个请求来到几号呢?如果想来到一号,一号呢发现两个也已经用过了,所以呢他就来到二号,来到二号,然后呢,接下来第七次请求,他呢本该是第二轮先来到一号,但是一号已经用过了,哎,他也就来到二号,也就是说啊,他们首先访问呢,是有顺序的,而且这个顺序呢还是要考虑权重值的,这是我们这按照轮巡的负载均衡,还有呢么,有一个叫最少活跃数,我们呢还是order service,要调user service,我们可能会来到任意一个服务器,但是呢,这种情况下他要来到哪呢?他总会来找到哪一个服务器,它会统计上一次的调用时间,比如这个服务器上一次的请求呢,他花了100毫秒,这个呢,花了一。
04:27
千毫秒,这个呢,花了300毫秒,那说明这个就快,所以说呢,它就会来到这个服务器,那么下一次,下一次也一样,它会在调哪个服务器之前先来问一下我们这个服务器上一次它处理请求花了多长时间,总是挑一个最快的服务器,响应速度最快的,哎,这是我们叫最小活跃数,还有一个呢,叫一致性哈希,一致性哈希呢,就是说当我们这个order service想要调用user service服务,比如都调的是同一个方法来,比如get user ID都等于一的啊,按照我们一些哈希分布,它呢会来到一号机器,如果是get user ID等于二的会来到二号机器,Get user ID等于三的来到三号机器,哪怕说一直在发get user ID等于一,也只会来到一号机器,因为我们是按照一致性哈希,我们方法名,参数名只要都一样,那他们都落。
05:27
合在同一台机器,这是我们说的四种负载均衡算法的解释,好,那接下来呢,我们就来实际的测试一种负载均衡策略,那我们先来打开我们注册中心,上一节课我们关掉了它,我们把这个注册中心呢,So keepper来现在开启,然后呢,我们来注册上多个服务进来。好,我们现在来看这个注册中心一切正常,把这个user service服务提供者来注册上多个来,我们为了能看到哪一个调用,我们就在这儿,如果说这个user service被调用,我们输出一下。
06:06
来,我们就来一个user,这是一号被调用好,这个时候呢,我们来启动它,我们把这个user service我们先来从20080端口暴露啊,放在20080端口。我们来启动注册这个user。这是一个,接下来第二个呢,我们把它改为二,如果它被调用呢,来打印二,那在这呢啊。也改成20081,然后我们来启动。第二个user service的服务。好,接下来第三个也一样,我们20082好,如果呢,调用了就打印三第三个服务我们来启动,现在相当于我们user service服务提供者呢,我们有三个。哎,我们有三个,我们有三个呢,接下来我们来看一下控制台是不是有三个首页,好来刷新一下,现在呢,提供者数三,应用数一,这个应用呢,都是我们这个user service provide提供者啊,我们分别从808183个呢,我们有提供者,接下来呢,们就来启动消费者,好,我们这个order service我们来启动,但是这在这个启动之前呢,我们上节课应该配了这个double的直连,把这个一定要去掉,否则呢,我们这个消费者就是绕过注册中心,好我们来启动起来。
07:35
好,启动起来呢,我们来看一下我们这个注册中心首页,现在呢消费者也出来了,我们在这儿调用,我们来看它调的是哪台机器的,把控制台清空掉,现在呢SERVICE1233个控制台,我们可以先来看一下,来第一次调用刷新。好,我们来看哪个控制台打印了呢?一号没打印,二号我们来看三号好,Your service3打印了,然后呢,我再来刷新。
08:05
来看一下。哎,三号控制台没有,一号控制台答应了,然后呢,我再来刷新。哎,大家发现呢,一号还打印了,我再来刷新,哎,一号呢又打印了,我们发现这是一个随机的一个按照权重的这个分配,哎,也就是说他并没有在轮询啊,我们一号打了多次,所以说呢,我们得出的结论是我们。Double里边默认用的是这个随机啊的负载均衡机制,实际上呢,它也是这样的,因为我们来给大家看一个叫load balance接口,这接口然后呢,这有一个SP,我们来点进来,这个接口的name默认呢,就是是一个随机的多有多少种负载均衡机制呢?我们CTRLT打开继承数,哎,就是有这么多,就是我们说的那些包括负载均衡机制的算法,在这里边也有。
09:03
好,我来给大家记录在这。这是我们double的负载均衡机制。我们想要改变它怎么改呢?我们可以来参照官方文档,官方文档呢,这有负载均衡,想要改呢,其实是非常简单的,们可以在暴露服务的时候,说我们这个服务被人家调用的时候,负载均衡怎么办?或者呢,我们在引用的时候,我们要消费某一个服务,我们指定负载均衡机制,包括呢,我们也能指定在方法级别,那我呢就在消费者这一块,那reference我们现在是注解版,那它肯定也有这个叫漏的balance属性,那我们负载均衡句制取值有多少种呢?哎,我们刚才来看了一下random的name叫random,那其他的我们来都列举出来,我们呢,以这个啊轮询为例,我们叫road的Robin,好,所以说呢,我把这个负载均均衡机制改成它,然后呢,我们来重新来测试一下,我们这个order service呢,我来关掉,关掉以后呢,我们来重新测试。
10:09
好,我们来在order service来重新测试。好,来,启动起来。现在呢,我们相当于是用轮询的方式,那就是一个访问来接着下一个我们把其他的控制台先都清空掉,清空掉啊,三号的控制台我们也清空掉,然后呢,二号的我们也清空掉,好,那接下来呢,我再来访问,来看控制台刷新我们这个消费者,哎,他这怎么写了三个呢,来看一下消费者啊。来现在呢,一个是我们这个消费者没问题,然后呢,我们来调用第一次刷新来看来来到哪个控制台。哎,我们发现呢是一号,如果我们改成轮旋,那第二次我们来看一下。来我们发现是二号,那三号呢,我们来看,现在没打印,那第三次刷新,那又落到三号,那下一次呢,我们来刷新来看一下,下次呢,它就落到了一号,哎,我们来看一下我们这个一号的,哎,两个一号没问题,所以说呢,我们就改成了轮旋,当然我们还是回到这个random动,让它用默认的,这样呢,我们还能按照权重进行随机,这个权重呢,我们还可以调节,调节有两种方案,第一种呢,我们在user service里边,我们在暴露服务的时候,我们可以来说一下我们当前这个机器,我们如果要暴露服务权重是多少,当然这个就写固定了,哎,我们一般呢,都是需要动态来调整,动态调整呢,从不我们这个double可以在我们这个控制台,控制台呢这一块呢,我们来找到我们的所有服务提供者,这有快速的备权跟半权,备权呢就是给他提升一倍的权重和降一半的权重。那好,我。
11:56
呢,调回来以后,我们来到我这个控制台,把我们以前没调的这个order service给它停掉,停掉,然后呢,我们重新来启动order service。
12:08
重新启动service,现在呢,用random机制啊来重新启动。走重新启动order service呢,我们来给它调整一下权重,来看一下效果,那我把其他的先清空掉一清空掉。二清空掉。三清空调。好,那我呢就快速的在我们消费者这一块,哎,在提供者啊,我们提供着我们要调这三个服务,这三个服务呢,按照负载均衡,我呢给这个2080,我们来半权,给它降一下权重,好,这样呢,我们看它权重只有50了,我们给2081,我们来备权,给它加一下权重,好,发现呢它权重有200了,然后呢,我们再来给他加一下权重。好,他有400了,那他100了,好,那现在呢,我们权重调成这样,调成这样以后呢,那接下来我们来调用测试,我们来看多次请求以后都在哪个服务器上,那我就在这多次刷新1234啊,我们多刷新几遍啊,我们来看控制台,控制台呢我们来看user service,我们来到这一块user service1我们来看打印几次,哎,这一块呢,他说这个我们这个注册中心的这个缓存有问题,但是我们来看一下咱们这个user service1打印了两次,那么user service2我们发现啊,它打了很多次。
13:36
2US service3我们打印了两次,也就是说我们能看到呢,我们400权重的会被多次调用,而其他权重的呢,那基本上少概率调用,但是在我们大量请求过来以后,你就会发现他们的概率呢,基本上这个呢就是啊,五百分之五百五分之五十,这个呢就是五百五分之一百啊,会遵循我们这个概率分布,我们以后呢,就可以通过这个控制台,对于某些性能不佳的服务器,我们通过快速调节权重的方式,让它呢提供少量服务,当然我们也可以在这一块权重调节这一块来精确的指定某一个的权重。
我来说两句