00:00
来,那么各位同学那么呢,根据上级的讲解,我们已经知道我们这个myself是不是OK呀,因为大家都明白,如果不OK,它会用它的默认,默认是轮询算法,刚才我们已经测过了,现在是不是随机啊,你哪定义的随机是不是就我这。人工自定义显示的定义了随机啊好,那么接下来请看,那么呢,这些干嘛呢,就不多说了,跟刚才的一样,没问题吧。Car。自定义规则深度解析什么意思呢?老板现在多了。不好意思啊亲。我呢,让你呢?依旧。轮询策略,但是要加上新事情。轮询以前是不是每个服务器被调用一次啊?但现在我要求你每个人被调用五次。
01:01
也记以前是每台机器一次,现在是每台机器五。那么你懂的,这干嘛呢?我是不是现在默认是轮询,现在我是自定义随机吧?那么大家请看我假设我又把它改回成轮巡,那么你懂的。如果我改回成轮询,是不是就是默认就是一人?一次啊,那么这个时候干什么呢,我们的。嗯。有点类似于假设。我们现在安排,如果按照当前这种算法。12345,每人一天。这两个要求每个同学只一张。张三这个同学。周一是你,周二是你,周三是你,周四是你,周五是你,OK,你吃完这周以后轮到李四啊,那么这个时候是不是一人五次啊,那么这个时候大家请看我们换了以后,我现在是不是从刚才的随机换成现在的轮询了,那么来吧,我们呢,搂一眼,312312312没错吧,但是同学们就会说,这不,你扯了这么半天,这两种算法不还是他默认的吗?
02:19
那杨哥你自定义的所谓的算法在哪呢?那这个时候跟着我来。找到。我们对应的算法大家看。跑到我们的。GIHUB上面。来。啊,是不是有一个做法是get up上面写的,大家看这个是不是叫random ruler啊?好的,那么呢,杨哥,你要玩什么呢?来啦。我自己炸。Get ho上random ruler,那么假设哈,我自己定义的一个名字啊。
03:06
干什么呢?T_ZY。你懂的,这是不是他是我第一个呢?哎,高,那么你要干什么呢?我们为了好看兄弟们,我们先解读一下刚才我们。是不是掩饰了随机和轮询啊?那我们来看看。原始的github上面rib本随机算法,它写的是什么?那么呢,干脆为了好看,我一不做二不休,大家告我。建在我这个上面,是不是getup上面的源代码。路过来。干什么呢?我呢?开关。
04:01
好,我知道,那么大家看我一单是这边就会跳动啊,那么呢,我这为了讲课方便,那么呢先彻底先给它全部关闭。待会儿我们讲完了以后,写好我们这个算法,这个算法倒是不难写,但是要把它想通还是花费点逻辑,那么也请同学们呢。跟着我来这一分钟困的同学请站起来听,为什么不要学了六个月了,只会做增删改查,真真正正的是这些算法,这些逻辑,这个程序员太值钱,因为为什么?你别干了,三年工作经验以后,五年工作经验以后,还是只会对数据库的登山改查,那恭喜你,你不是有五年工作经验,那你是一个经验用了五年。那么下面请同学们看。来吧,我们来研究一下,首先这个类见过了吧?
05:02
好,那么怕同学们整不懂。我故意。哎,抱歉。在这儿。刚才浅浅的带着大家看了一下。来。这个熟悉吧。它的全部架构图。来抽象的load balance rule了,是不是加载规则大家看,抽象的是不是这个意思啊,大家看。学。见过了。随机见过了,串见过了,知道刚才我为什么拿这三个演示啊,是不是全部是按照官方的架构图来的呀。那么其他那么是客户端的配置,那么又是我们的另外的算法,那么好,重要的是不是上四个第一梯队,第二梯队,第三梯队啊,这就是为什么我先讲的右边这三个。
06:02
好,接下来看什么呢?我们就明白其中有一个是不是叫random ruler,这个是不是叫随机算法呀?那么来看看我没改之前,人家随机算法它怎么写的,由于我们已经从get up上拷贝过来了,那么呢,看eclips里面也一样,首先注意现在我们是随机算法,我们干嘛看看它怎么随的?首先我们呢,先把这些关闭。先读懂人家的源码来改,按照人参考get up上原作者的源码改成我们所需要的,那么这种什么改源码的能力比什么debug?碳源码的能力更重要。大家请看第一个。初始这个,那么言下之意,现在这个类是不是就四个方法呀,我们构造这个这个这个,那么先看这个,大家看哟,爽死了。空有其名吧。内容是不是什么都没有哦了?
07:01
看这个choose用原来choose底层是不是掉这个,说难听点,那么底层掉这个是不是就这个,那么也就是说扯一堆。Rib的随机算法,真真正正起作用的就是它,那么这个server的意思就是返回给你具体服务的哪一个服务器,是8001还是8002,是8003,这么说你懂,那么接下来请看这部分有点烧脑,那么想做优秀的程序,那么请跟着我读,切记练武不练功,到脑一场空,这款有点烧脑,但是确实是增加大家的内功,跟着我来首先上面大家看你这一轮既然是随机,那么RANDOM6RANDOM。那么干嘛呢,导入。大家都懂这个random是啥?是不是就是我们的第y u to random类啊,好,大家请看,那么这一些你甭管我们用不到,请看它的意思,No balance LB,哪一种负载均衡算法,如果等于钠的话,就返回钠,那么自然而然它一定是会加载一种啊,所以说它不会return纳,那么这个server现在还不知道到底是哪个人来响应你什么意思呢?就是说我们这。
08:21
是不是有?1233台机器SERVER801802803到底是一号二号三号谁来响应不知道,那么所以说现在这个serve吧,是不是暂时是烂啊,然后呢,往下翻,哎哟,只要你看这是不是用的啊。那么呢,我们在讲过线程的虚假唤醒的,说过多线程的环境下,用Y判断是不是等它这个线程苏醒以后,还会被拉回来重新判断一次,那么这个时候大家请看哇,最终是不是返回哪一个server那么关键。叉。来。
09:00
如果说这个等于那进来再看实验程是否真中断了,被中断的话返回那否则的话请大家看。这个方法刚才我们reach ableable是上一讲,貌似带着大家看了一眼,大家请看这个负载均衡算法get reachable server,看after list,请注意这个参数在哪,L be get all service all list。再来all list.size那么想想也明白,我现在有几个是不是三,有点像是不是我们的一个are list.size这样的方法呀,那么这块说明什么?Server t有三台,那么有三台这块不是不等于零啊,三等于零吗?不等于这个整体是不是false啊,False咱们是不是不进了,那么所以说往下看。什么叫re,是不是就是这个new random啊?那么言下之意,这哥们写这个东西是不是就是我们的,相当于说是java.YouTube点什么random这个类,点next in这个方法呀,啊S看刚才我们已经说过了,加是不是就是萨。
10:15
那么这个时候他的意思就是说index。以机,那么这是三,为什么数组的下边,历史的下边是不是从零开始啊?我们说三台机器是我们人的话,机器是不是零下二啊下边那么大家请看,这是三的话,random.next int3得到的这个角标是不是012,我们再来看。Up list是不是这个up list的意思就是说什么现在活着的可以对外提供服务的机器点get,那么通过第五三十六行,你随到几,我是不是就给你返回几啊。同学们看一眼,整个过程能跟上。
11:00
没问题吧,所以说到最后,如果这个sva等于,那不好意思,线程中断一会,下一轮继续,否则的话,看看活的好好的return serve,最终我们是不是返回对应该响应服务的是80012或三,那么呢,言下之意。是不是随到谁就是谁?好,我们呢,读了一下ribbon的什么动作。随机算法,那么可是现在杨哥你不是要改成你自己的吗?那么怎么改呢?首先请再来看一下我们的数学,依旧是使用这种轮询策略。但是要加上新需求,每个机器被要求调用几次啊,五次,那么言下之意,我这儿的算法是不是要做一定的修改了,那么呢,就这的算法就不再是next in了,那么言下之意,起码我这儿干嘛第一个。
12:00
这些用不到的。杀。第二个那么呢,我们呢,导入我们对应的这个包u list,好,那么呢O了,那么呢,起码你懂的。我这干嘛,第一个是不是要定义一个叫total。干嘛?等于零代表什么?我每调用是哪个二?不手术。等于五了以后。我们指针。Final。往下走平方,所以说这个时候起码我们又知道,那是不是也应该有一个指针,应该的表示是不是当前对外提供服务的服务器地址啊。
13:05
那么言下之意,就比方说现在第一次来total是零,Index是不是应该是零啊?第二次来total是一了,没满足我,那么这个index是不是还是零?第三次没满足我还是零,第四次没满足我还是零,直到第五次,恭喜你,我们马上干嘛。这个需要。红星日换日为一。没问题吧,但是已经达到过。一个五次,那我们的in将会变为一,说明是下一台机器提高能跟上,但是还有一个问题,那么所以说这我们一步步拆解哈,那么一会呢,我们挑了看。
14:04
因为这就是两个定义,重要的不是代码,重要的是思想,那定义两个定程,我是不是给这两个进程谁都会定义吧,但是我是不是得给同学们说清楚为什么这么定义啊,那么所以说呢,这块请大家看涛涛。根据我们上面的分析,偷塔总共被调用的次数,目前要求每台是不是被调用五次?第二个current index是不是当前提供服务的机器号,就说难听点是801还是802还是803?但是注意我们这有个冲突的小细节,再来分析。啥意思呢?我们五个,但是一期或者叫五只有800180028003什么意思啊,三台。
15:03
OK,那么照你这么加的话,那涛涛如果加到。五类这个index如果加到三还好说,是不是有三号极显液,但是如果这个index加成四了呢?那就麻烦了,为什么?因为我们是不是根本就没有丝毫机啊,所以说需要把我们的程序拉回来重新给它,让我们的index不能超过三。只要他抄到三了,我们下一次就要把它拉回来重新清空,从一开始这么说能理解,所以说把我们的算法分析清楚以后,这两个定义倒是简单,那么这干嘛呢?留着,但是这部分算法就不要了,为什么这是GIHUB都是原码,那么要加上我们自己的算法,都给同学们弄好了,因为这条代码很简单,但是分析出逻辑很难,那么这个时候请大家看,我们看。
16:08
请各位同学按照我刚才的分析搂一眼看看能不能看讨对吧,超简单吧,是不是就一个一分L啊,那么这个时候我呢,把上面这两个定义的也拿下来,作为一种提示给同学们一分钟,看看我写的源码,改造的源码,同学们能不能自行看懂,之后我们再细拦截好。就用讲内容,好,大家看一眼。来,兄弟们说过了,刚刚开始被调用的次数是零,当前服务的机器也是零,因为Java程序里面下边都从零开始,请看这个算法和逻辑,Total小于五的时候大家看。上面它提供机器是不是要up源码,是不是要up list get,那我这是不是也用up list get,只不过我这是零,那么说明我这up list.get的话就是零,这个SERVER3000数不是就是零号机,好,零号机被调用了一次,那么总的计数次数是不是要加个一啊,那么说明现在total时间,下次来一小不小于五,小于为错进来,所以说当前提供服务的是不是还是零号机的,那么再来total被加一次,下次再来变成什么二了,二小于五进了,你看还是它服五啊,那么一直加加加,那不能最终四小于五吗?小于OK,是不是还是零号机提供服务啊,那么这个时候已经五次了。
17:34
那么再来五。小于虎妈不想学。If服不走,If服不走的话,我们是不是要走else啊,因为当你的套套已经五了,我们说了每个人是不是值啊,就值一周就五天吧套套。是不是要变为零,但这个时候是不是CX要加个一啊,那么这个时候干嘛呢?C该X从零加上一,一大于等于阿点size,我们现在是不是总共有三个机器嘛,一肯定不大于,所以说这不进来说明现在是不是从零号机过渡给一号机让它服务了,这一步又置换为零了,那么下一轮OK,零小于五吗?小于啊,所以说进来那么up list.get源码的这个方法,那么当前这个current ind de是不是一那么好变成一号机给你服务,刚才是零号机服务了五次,那么这一次是不是一号机也要给你服务五次,如法炮制啊,那么再来,直到它又。
18:34
到五,它又到五了,是高变成零,那么这加一个一加一是不是又变成二了,那么O了二不大于我们的三,那么这个时候再来零小于五进来,那么当然现在给你提供服务的是不是二号机啊,那么以此类推,又到五次了,那么注意我刚才分析。我们只有五,我们是要求每个人值次,但微服务是不是只有123,超过三了怎么办呢?这块就关键了,也是一个小逻辑算法。
19:09
直到我们又加了。现在是三,我们没有三号支线,下边是从零开始啊。三大于等于三了吧,所以说index重新值为零,那么OK,再过来,那么这个时候小于零进来,我们干嘛重新去个零,那是不是又是零号奇呢?以此类推,那么这就是我们的算法,那么欧拉。完活以后,杨哥的这个算法定义好了以后,那么是不是回到我们的my ruler什么呢?现在是不是要定义成我们周阳自定义的?嘿,哥。自定义的不是随机啊,现在是不是每台机器五字啊。
20:01
那么言下之意可以看一下我们的加载情况,这个是不是我们的主启动类,主启动类用了ribon client ribon client要对部门微服务加负载均衡算法,我不用你默认的主人,那你就要给我,你自定义的,我给了吧,那么这个时候是不是我们这个那主任你的自定义咋写的,那么呢,我要符合I ruler这个规则,那么这个时候我是不是写了一个周扬版的,那杨哥你咋写的,那么我这是不是写成我这样的每人访问五次,是不是来完成我们的这个诉求啊?OK,接下来我们呢,来做一下调用,那么主启动类说过了myself就是这个,这个里面是不是用了杨哥写的这个自定义的呀。好了,那接下来我们呢,就得来测试一下,看看我们写的对不对,那么注意,由于现在微服微服呢越来越多,刚才看到不是报错,它注册的时候是不是会有个缓冲啊,我们会等一会哈,我们来。
21:07
我们呢,一步一步来。那么这个时候起到。启动。启动。启动。启动。再来,那么这个时候。8003,那么我们80080是不是也要给它启动啊好,那么这个呢,需要一点点时间,我呢暂停一下录屏。OK,那么呢,经过了漫长的等待,终于启动了,那么呢,我们呢,现在呢,是起了一堆堆为服务啊,我的机器呢也越来越负担重了,好,那么同学们,我们来看一下,现在我们呢,经过我自己的修改干嘛呢?我们是不是每个要被调用五次,来看这是不是第一次,第一次,这是一吧来。
22:04
一。一。一。一跳。没错吧,刚才是不是轮训是每人一次啊,现在是不是每个五次啊,所以说呢,这个我们再试试一三第一次,三第二次,三第三次。第四次第五次跳,OK,那么呢,终于完成了我们的自定义规则,那么这个时候这些能力请同学们务必掌握,那么大家可以看,我们是不是只牢牢的从getup上面抓下了源码,读懂了源码,改成了我们自己需要的算法呀?那么这些程序员才是真真正正公司里面最需要的,那么也希望各位同学们不要觉得就什么做增删改查就很厉害,那么呢大家呢持续努力,算法逻辑才是最重要的,那么呢这给大家呢打开一个。
23:05
相当于说是一个学习的视野,我们就已经知道什么debug源码,Debug源码没什么重要的,是不是你需要能够改源码,Create源码呀,OK,好,那么呢,希望这个技巧打开大家的思路和工作中呢,可以学到更多的知识。
我来说两句