00:00
好,那刚才课下呢,有同学呢有点懵逼哈,那么老师呢,再快快的讲一遍,首先啊,我们说了一下这个原理,就是你第几次访问数要求这个余数跟我们的服务器总数量,那么现在啊,同学们。我们的这个名字啊,你告诉我现在是不是在这个名字下面只有两台机器,我们总数是不是就是二,那现在我们这个服务的实例列表里面就是有两个801802,他们组合就是集群,两台机器集群总数为几?相当于说这是这个是不是就是这个是二。第一次过来100分号,二取余数,那么它是一,对应下标就是一,List里面是一键返回的就是8001,那么再来这个是。取余数是零,例里面零就是我们的8002,因为你不管第几次访问都是跟集群里面的总数为二的话,求余数余速只可能是1010101010,那么这个时候在我们这个list里面list.get101010,那么是不是返回我们的121212801802801802,这样轮询过去的话,一次一次的给弟兄们呢来进行访问呢?
01:20
OK吧,那么不难哈,那么同学们可能第一次学,有一部分同学哈,有基础好的,一听就懂了,那么另外一部分同学呢,可能理解起来稍微慢一点,别着急。好吧,你要是觉得。哎呀,行,那位同学说,那你看这样啊,兄弟们,我这啊回到我们的order,那按照你说的,你要是怕真的,那我把这个改成false这么说。可以了吧,我不往这个有瑞卡里面去注册我们我等他重启一下,这个没问题吧,因为他说为什么这是不是三台吗?我我我这啊,你那个聊天上打的这个,我这说了是这个集权,听懂了吗?支付服务啊,现在是不是80018002,那么这个时候兄弟们我一刷现在你看着明白了吧,那你告诉我现在这个有水卡里面是不是只有两台。
02:13
好不啊,那么现在我你看吧,八零访问我们的微服务叫payment,这个时候是一跟二,那什么时候是一,什么时候是二,怎么算法算出来的,那么就是我们这个懂不懂,那么。这个时候第一次,第二次,第三次,第四次,第五次,第六次,第七次,第八次,那么每一次,比方说八。跟224得八,余数为零,如果是list,这个list里面的。第零号记录就是我们8002,那么这次是不是轮到8002给我们提供服务,每点一次啊,那么是不是下一次啊,是谁就给你们算计好啊好了,那么这个时候的话呢,那么同学们哈,没关系啊,那么这个呢,呃,学的慢一点,让杨哥给你讲清楚,那么下面我们判一下科技树理解这个原理以后,我们来看看我们的ribon,它的这个规则是怎么写的,首先再来看一下我们的这个架构图。
03:08
一切规则是不是I这个接口,这个接口有一个abstract balance的规则的抽象类,那么这个就说明负载均衡的规则有下面这些具体的一个个实现,我们现在是不是来研究一下我们的默认出厂的轮询,它按照这个结构是怎么写的?好读读它的源码,然后我们。参照着手写一个。首先。IU这个接口,那么它呢,有一个choice方法,那么这个时候是不是选择在这个集群里面,你也懂吧,现在呢,有几个是不是这个名字,下面有两台服务器,801802,那么两个都健康的活着,那么选哪一个给你提供服务好,那么这个是这个,那么凡接口必然要有实现类,我们打打源码走走,默认的是不是我们的这个东东,那么大家请看这个东东是不是继承了抽象的。
04:01
Load balance这个弱,那么结合我们的笔记,是不是这个是我的?默认轮询类。跟这个有关系,这个抽象呢,又实现了这个接口,这条线连起来了吧?好,那接下来请看,那么凡是这样的一个类,我们spring容器加了一个load balance就能使用,那么这个时候是不是要把它容器注入进来,那么看看它的构造方法,那么构造方法这有这么一个变量,这个变量是一个原子整形赖凹凸。因甲默认值是多少?零这一波OK吧,那接下来同学们,我们呢,就来看看这个是不是要实现,我们的choice选择哪一个。负载均衡的算法来给人家对吧,那下面有这么多,你总得选一个吧,那么这时候大家请看,如果说你这个LB等于,那那么没有负债均行,那么直接报错,这是个异常情况,否则它的算法同学们就是从第59行到我们的第91行,那么也就那么40多行不多啊,选出来一个是哪一个服务器对外提供服务,来吧,我们先来看看。
05:11
第一个,那么这个server现在是,那那么集群里面到底是8001还是8002,不知道,我们慢慢选,根据我们的算法看是等于零,好,如果服务器等于零,并且符合这个条件,给我进来,那么这个进来LB。Balance,那么get service,那么这是什么意思啊,来。Only the server that are up and rich,就是活着的,健康的,它的状态是up的,这一波兄弟们走一小波没问题吧,这是也是另外一个接口,ILO balance啊,这么一个接口,好吧,那么选出来,说白了就是可以到达的活着的机器,这一波没问题吧,那么往前走,这个就是可答的,然后这LB素材上面要做集群了,Get wall service啊,大家看这是不是wall service啊,那么按照这个算法走起来,那么兄弟们,我们这儿reach啊,这个。
06:07
可达的健康的,这个size是一个计数F的什么概念,如果F等于零直接报异常,那么现在杨哥的这两个,你看这个F是等,是不是等于二都健康吧,那么所以说不会走到这,那么这个过么?现在重量是第63行,那么所有的服务器,那么现在我们这7001上面有瑞看上面几台80018002是不是这儿就是SR count是二啊,二不等于零八,所以说也不会走这,那么下面关键的问题来了,也就是说这个哦,server.size是不是就是杨哥现在理论上所讲的这个服务器集群的有根据某一个微服务名称的有效的集群总数量,也就是我们这的8012加8002好。那么过来这个就是个server counter,现在就是R,那么这个R又掉了个increase and get增加并获得当前的一个什么出行的一个mode机器,然后得到下一个,那么请看哦,Service这什么鬼啊,这个是不是一个list?那么说穿了就说这个list天塌下来,Get wall,我们这这个list是不是只是有几个801802是不是只能有两台,那么list.get那说穿了这个next服务的角标是不是就是我们这前面所理论讲的当前对应的下标位置啊,那么点一下下一次是哪一个服务要提高,那么这100%就应该得到的是01010101,这么说能跟上,那么下面我们来看看这个方法,那么这个方法干嘛呢?首先。
07:44
这个主要是得到福list里面的下标听懂,那么这个方法传了个参数叫server count server,这个时候所有服务器的size兄弟们集是不是就是二,说穿了相当于说传了个二进去,那么这个方法在哪呢?来这个方法在这,那么这传了个二,那么跑过来,请看这个方法里面for什么鬼啊,是不是死循环?不是啊,如果你这样说是个死循环,那就错了,把这几项看过来,说穿了,这个是不是就是杨哥给大家介绍过的非常重要的guc里面的知识啊?
08:19
Compare and set CAS,比较并交换,比较并设置啊,以及我们这儿它用的一个东西是不是就是我们的自选锁呀,这一波能跟上,好,那么我先讲完,然后咱们再聊啊,那么这个我们前面讲过了,是不是就是我们的原子类现在初始值是几,是不是零,那么诶。跑过来这零了以后,现在先得到零,那么当前的那么回答我零干嘛?加一是几是不是一,一跟二取余数,那么这留着呢,一跟二取数对应下边是几是不是就是一,那么这个是next,那么这个。
09:01
凹凸原子整形类,这个没问题吧,兄弟们再次强调,它就是这一货,听懂了吧,这个货现在用CAS啊,当前值传进去,下次的值传进去,那么返回来,那么这个CS又是什么?我们来是不是就是我们的比较并交换compare and Swift。In差,那么就是当前对象里面这个值,它的内存里面的地址跟我们的期望值相不相同,如果说成功了怎么着,不成功又怎么着,这个时候兄弟们,我们是不是彻彻底底讲过,如果期望值真式值跟我们期望值是一致的,说明没有人动过,那么更新,否则我们是不是要在这儿反复的去自学呢?好,那么这块知识,那么我们是详细讲过,在GOUC高级里面实在忘记的同学,B站。试过吧。这儿那么随便,我的大场面试题都被一些活雷锋放在网上了,那么这儿请你呢?如果对cns和自选所不清楚的同学,请你看完12~15,一定是12看到15,整体看完以后你再说话,你别一集看不懂你就说啊,讲什么啊,听不懂给我整体看完,这是CS的知识啊,第二个这就是29题。
10:17
及自选锁的代码验证,那么它这块的底层原理用的就是我们的与求余来决定下标,然后用了我们的CAS和自选锁,得到了我们的当前下标值是多少。那么比方说刚才一切顺练,那么零加上一除取余数了以后跟二一百分一跟二取余数,那么这个时候弟兄们算过下边是不是一,那么这个next假设没人动过的话,就有只有它,那么这个next返回的就是一。这么说清楚了吗?大家请看,人家写的很优雅,尽量不加锁,听懂。那么回到这儿。弟兄们走着走着来了以后这波相当于说假设现在我们就是余数就是个一,那么这就是一哦,List这个里面弟兄们我们get。
11:13
回答,我现在只有8001和8002,假设现在下标是零的是8001,下标是一的是8002,那么根据刚才我们的计算,这是一,那么是不是8002就返回出出去,那么就从这个里面选得到了一台机器对外提供服务,如果是零,那就如果是钠,就这样,否则的话,正常情况下兄弟们是不是return so吧,它的集群的落地的机器是这样选出来的,这么说能跟上,这一定要看明白了,说穿了就是得下标,然后用了一个cns加自选锁,你看这是不是也是取,那杨哥这些知识哪来的,不也就是什么通读源码,以后一点点带着大家过呗。
12:00
再加上前面的,当然你要有一定的基础啊,GOUC的这个再次强调,自选锁和CS很重要,你用不到,那是你平时做项目就是登山改查,听懂了吗?碰到正儿八经的到大厂这些去写的话,这些东西是用得到的。那么请同学们从。我们这儿开始原理到原码都带着大家先从理论知识过了一遍,那么下面第三步咱们是不是要尝试着手写听懂?毕竟嘛,纸上得来终觉浅,觉知此事要恭喜,OK,咱们还是要多动手好。那么原理和源码就给大家介绍到这儿。
我来说两句