00:00
大家好,欢迎大家继续收看上硅谷的云计算课程,我是沈超老师,我是王阳老师,嗯,这节课呢,我们来看看负载均衡集群的这个原理啊。那我们来看一张比较复杂的拓扑图啊,好,那负载均衡器的原理呢,其实我们从刚才的刚才的课程中我们也已经看出来了,那我们主要是分为三个部分,三个大分类去讲,第一个分类就是二层,第二是我们的四层,第三个是我们的七层,那当然二层它是一个硬件,我们没什么好说的,那个东西太贵了,咱们还是直接从四层开始,对所以说呢,我们主要的是从分析四层和七层的一个区别,嗯,那我们先在四层的这么一张工击逻辑啊,工作逻辑图,那这里会有个用户存在,这是我们的iOS iOS典型的四层软件,对吧,我们之前已经说过了,那后面呢,是我们的真实服务器,还十对,这里采用的是阿帕奇士啊对,当然都可以RN,随便,对对对,失败服务器就行,好,那当然我们会不会每台机器都加上一个PD,这样好好认不用?
01:11
就不容易乱,好那也是他的网络的一个相当的定位,用户他的IP是10.10.10.2,我们假设他现在是一个公有地址,假设假设其实是私有IP,对对,我们是一个假设,Is呢,它也有个地址叫10.10.10.1版,我们假设它也是一个公有地址,也就意味着这两个地址当前是能够互相寻找到的,好,那后面这些阿帕奇设备呢,会有一堆的私有地址,哎,那192.168.1.1到幺四,嗯,好,那当用户想发起数据报文的请求的时候,也就访问他的后端阿帕奇的时候,啊,我要先经过DNS解析,对吧?这个在我们之前的网络课程中都已经学习过了,我们就不讲那么复杂了,假设我已经获取到它了IP地址了,对,那我就应该对发包了,对吧,我们对外暴露的就是这个幺零点一百对吧。
02:11
对,那个内网呢,没有对外暴露,外网无法直接访问,嗯,好,那我们今天发起第一个数据报文,我们原因地址可以看到源地址是10.2目标地址。幺零点幺零点幺零点一百I就是这两个人对吧?那当到达is的时候,我们之前是不是说过一个叫算法,嗯,根据不同的负载算法到不同的哎正式服务器上对吧?还给谁对,那当然这个算法我们现在先不考虑,因为还要跟其他的组合起来,比如你的访问的目标端口啊,目标地址啊,对吧?我们先把它说成规则库,好经过规则库判断以后,它会把里面的数据报文进行一个更改,有细心的同学已经发现了吧,那这里的目标地址是不是已经变变成了这个后台服制,变成了一个叫做幺幺的地址,并且这是一个私有地址啊对,它是经过我们los这台服务器转换过去的,好,那当这个数据报文到达阿帕奇的时候,阿帕奇服务器一瞅,诶找我访问的对吧,维利的端口八零,所以呢,我就会响应他的请求,直接返回就行了,对直接返回数据。
03:23
豹文,那返回的格式体应该是言和目标利进行对调,对吧?所以语言变成了192.168.1.1,就是阿西,目标呢变成了10.10.10.2,嗯,我们现在假设这个数据豹纹啪被增到用户了。那问大家同学一个问题,就是这次连接能成功吗?嗯,应该是不可以的,对吧?我们可以看到啊,你看啊,它出来的数据原是自己没问题,目标是这个负载均衡没问题,但是回来了这个家伙,你们可能漏掉了一个东西,你看啊这个圆,一般来说我访问你源是不是就应该是我?当然我们可以仔细看这里NLVS转发之后,源依然是这个客户,而没有变成他自己,而目标变成了这台阿帕奇,对吧?阿帕奇才不知道呢,阿帕奇是谁访问我,我就给谁返回,对吧?既然你是10.2返回了我,我就把数据返回给10.2,但是现在的问题在于,我起发起请求的时候,原是10.2,目标是幺零点一百,而返回的数据是目标是10.2,而原是1.11这两个不匹配,我们可以看到这个地址不匹配吧,对,那这个在网络协议认为这。
04:43
的事儿,绝不可能对,哪怕拿我们的生活举例,这也比较容易理解,对,就是说你跟我说句话是吧,或者说我必须得回应的是,你不能说你跟我说了一句话,我去找这个王二麻子,我说我跟你们老师说,我说你刚刚骂我,我抽你个嘴巴子,李们老师肯定不干,对对对对,这个原分不非常的人,对不对,对,那还有可能就是说,比如说这个就两点,这个就是LVS的特征啊,这个家伙极其的这个狡猾,你就可以理解为,你可以这么理解为,客户来找我买东西,比如说他要买点芒果,外面黄里边也黄,对吧,然后呢,我没有啊,我没有芒果啊,那怎么办?我去找有芒果的家伙去买,我说哥们儿,我要找你买芒果,然后呢,我告诉他,我说不是我要芒果,是汪洋要芒果,然后这哥们说,行啊,我要给你发芒果,你把地址告诉我,我才能给你发回去了。我这时候就要多了心眼了,我靠,我要把地址告诉你,直接给他了。
05:43
啊,他妈中间是不是就没我什么事了,你也不用给我付钱了,你们两个是不是就绕开我了,不行,所以呢,就说我不告诉你地址,我就告诉你是汪洋要了,不是我的,然后呢,然后你呢,发给我,然后我转发给他,中间你不要把我想绕开,所以啊各位这个时候LS可能还要再做一次这个转换,对,可以大家记住一个小口号嘛,对吧,中间商赚差价,哎,对,所以呢,你会发现等他回去的时候,他依然把他原地址更改,更改成了自己主要做了一个伪装,当然我们讲是伪装不太合理,因为他只是进行了数据报文档SN直接更改头部,对吧,这是非常重要的一个特点,你这样做呢,有好处啊,有啊,好处是啥?你按理说你看啊,反问我,我返回发给他,他返回给我,然后我直接给他,按理说如果我的地址直接就是我返问你,你给我把所有的数据都给我再转他,那相当。
06:43
穿越你所有的反馈数据都必须要经过我,对吧,那这样的话我的压力就会非常去非常大,有可能别人还没死,我先死了对吧?那而且LS可还不是像N那样的轻量级的这种外部服务器LS可能压力消耗,如果真是直接反馈给我自我再反馈给别人,我压力就会极大,那有可能就会把我自己的马弄死,那这个时候诶啊多按了一下。
07:10
那这个时候呢,LS做了一个这叫什么偷钱耍滑的东西对吧,地址转换,诶我只是什么,你给我发货对吧,我不收货,我的我的货也不进仓库,我只是干嘛,你把它寄来之后,我把那个标签撕掉,好吧,本来你发的就是原发件人是你,收件人是我,对吧?到了我之后呢,标签一撕,把发件人写成我。然后呢,收件人改成你直接发给你就行了,诶这样的话我的压力就会小得多得多,我只是做了一个定制伪装,并没有把数据实际接收。好,那这样的话,整个流程下来以后呢,就可以看到他已经进行了对应的负载,当来了另一个请求以后,那我是不是可以根据咱们刚才的流程重新做这次请求,给第二胎,第三胎以及第四胎等等,好,那就像超过刚才说了一句话,就是is压力所在,甚至可以理解为整个负载均衡器群里。
08:11
负载调录器都是我们的瓶颈所在,它的压力是最大,对,哪怕阿帕奇假设现在它的CPU到90%了,内存也不够了,那我们该加机器了,那再加一台机器,那他们是不是就会平均分得下来,当然我说的平均是理论上的,对理论上的平均好,那如果再不够了,我再加一台呗,对,那有没有想过一个问题啊,LS怎么办?对吧,如果他们压力又不够了,我再加,那可能是不是他也到平颈,我可没办法再来一个iOS,对呀,那有有同学说,诶为什么不能加,那那只能就是第一个大了,第二个再来,对对对,那第二个新能也差不多呀,那我再来一个新的,他俩是不是又需要一个负载均衡器,那他是不是又会出现新的分没了,那对吧,子子孙孙无穷无尽对吧,对对好,那所以还是那句话,再强调一次,负载斗器在整个负载均衡集群里至关重要的,压力是最大的,对,是最容易出问题的,所。
09:11
要给它配高可用啊,对,所以呢,这个就是我们的四层的工作逻辑,大家一定要把它给熟练的吸收掉啊,也就是说你始终记得这哥们只是什么。只是把地址改了一下而已,对吧,数据回来之后,他没有实际接收到这儿,然后呢,只是把目标地址改成了谁就是真正发了这把原地址改了一下,原地址从他的这个内网的这个东西出来之后,改成他自己的了,然后由他转发出来,他只负责变成一个中转商,他根本就没有入库,你就可以理解为商品就没有接收,直接扭头就发走了。嗯,最重要的一句话就是大家记住,我只做了一些简单的数据的更改,或叫地址信息的更改,我们并没有涉及到真实的流量转发以及流量生产,嗯嗯,对,这也是它负载能力非常之高的一个非常重要的特性,LS的性能其实是非常好的,其实我们学员一直担心啊,其实之前看了这个图都担心说LS是会不会挂掉,其实我们说呃,LS做了高可能之后,它的稳定性还是非常非常好的,当然啊,如果真的他负担不了,那就没啥说的了,你就买F5吧,啊对吧,当然现在已经经过了。
10:23
很多大公程司的生态环境的测验了,比如举个例子,像我们的阿里云啊,百龙云啊,那很多一些大型的供应商是不是都在上面去购买对应的云服务,他们的负载联动器依然使用的是iOS,对它底层依然是iOS,还是没问题的,对性能看还是确实,而且因为它突显爽滑的这个小技巧就是没有实际的数据转发,只是改了原地址标这个地址就相当于我不入库,我就不需要准备一个非常性能强劲的库房,对不对对,所以这样的话,它的性能反而还是比较可靠,哎。好,那这是我们的四层的工作逻辑,那接下来呢,我们去看另一个七层工作逻辑,那首先呢,这里的iOS我们已经替换,替换成了那其他当然我们也会分配一个地址信息,那有些同学说了,诶刚才我们为什么会有一个公网地址,看到了吗?这里是公网地址对吧?那为什么我在这里采用的都是私有地址呢?
11:19
原因是我刚才那里在需要去做所谓的数据报文的转换,那在这里呢,我们可以先不添加,嗯,它是完全不会受到任何影响的,那这样的话更简单,更便于大家的理解以及吸收,嗯,好,那首先用户192.168.1.2,嗯,同里会发送一个数据报完是我们的N,也就是负载调度器正准的负载,你主要还是定那个原地址和目标地址,对吧。那个原地址依然是这个用户对吧,目标是这个啊N服务器,对,然后呢,就付宝访问的目标端口是八零,当然这个源端口应该是随机的啊,原这个我在这里随便写了,随便写了一个笔误啊,可以不理他啊,原端口发起者的原端口是在1万以内的一个随机端口,而目标端口应该是八零,没问题啊。
12:14
好,那数据包文过来以后呢,他要经过N的规则库,那N规则库呢,这里会怎么去说呢?你可以不用理他,我还是说你就理解为先轮学,就是真正复杂复杂的这些东西,这个算法我们后面再说,你就可以理解为第一个先给第一个,第二个第二个第三个给他,第四个给他,别再给他,就相群好吧啊,那也就意味着在这里用户向我的N去要数据,嗯,说诶给我来一个什么1.gbg文件啊对,然后我NG说我没有啊对啊,我不是真正的外部服务器,所以NG会根据刚才所说的对应的算法选择一个后端主机奔他去要数据,说阿帕奇1.1,给我来一个1.gg文件,好,那这样的话,阿帕奇就会接受到NG10用户发起的请求,返回给N几,那这里需要注意一下一个特点啊,这里看这里原是1.2,嗯,目标是1.1版这。
13:14
K的言是1.1版,目标是1.1,也就意味着这是两个不同的TCP连接,需要注意你可以仔细看,我们可以对一下,你可以看先看上面这个,你看上面这张图,你看啊这张图他找他的时候,原是一,这个10.2,这是这是LVS啊,我们往前翻了,目标是幺零点一百,然后呢,当他访问后台的真正的阿帕奇的时候,原依然是这个用户看到了吗?然后呢,只是把目标地址变成了1.11,这是LS的作用,看到吧,因为我们说LS实际上就没有真正的商品入库,对吧?但是你看看N这,我们看看N这,那我们可以看到它是什么,原在这里,用户访问它的时候,原是用户目这个目标是我的负载均衡服务器,但是当我的负载均衡器访问后台服务器的时候,原已经变成了我的负载均衡服务器。刚刚的LS原。
14:14
还是它对吧,而这里呢,源已经变成了谁,就是我的规则库,相当于什么?刚刚LS去调用的时候,我告诉了后台,我告诉厂商我的负载,用户去调的时候,我告诉厂商,这不是我要的,这是汪幺要,而如果是NX来调的话,我们就可以干嘛,我就直接告诉不告诉厂商了,我就说是我要你的商品,要芒果,我要100箱,你把100箱发给我,我入库,然后再把它发回给他,所以源和目标变个切换,大家看啊,在这会有区别,看见了吧,对,好,那接着呢,当我的ix收到数据以后,那我会把这个数据重新封装,封装给我们的用户,诶,也就意味着相当于我跟之间做了一个完整的T连接,跟后端真实服务器又做了一次对接,也就意味着在这里做了两。
15:14
是第一次,第二次,两次不同的完整的TCB连接以及访问,就相当于N掉的时候,你的这个芒果需要先进入到我的库房,然后由我再去找物流给这个客户来发货,这个东西其实对NNN这次压力是比较大的,相当于所有的数据都要经过N这个词进行转发,对,好,那像我们刚才的is呢,它只是简简单单的进行了一次完整的我们的TCP连接,对,其实一次一次,这个东西就是啥,你可以看,区别就在这,在这里访问的时候,圆始终都是他这个家伙中间偷奸爽滑,他只是在中间把这个必要的这个目标和圆改了一次,改了一下。
16:05
其实实际上来说,它只是把这个包头包里面的这个源地址和目标地址做了一次必要更改数据,它其实并没有动它,这就是LS的基本特征。而恩呢,所以他的压力很小啊各位,而恩呢,这个家伙就讨厌了,他就是什么,相当于你先发给我,我去找他,你再把货发给我,我再把货进了上,进了我的库房,再我发给你,这对我有要求,对我的库房的性能都是有要求的,那转换到服务器上就是我们的压力啊,我们的X就相当于来说,虽然N是轻量级的,但是在负载分发或者带这个这个负载均衡的上面,它的性能其实是比LS要低多的,对,那所以呢,我们也能看到这一张图,还是我们的访问量的对比图啊,对,其实这是个示意图啊,并不是说这个LS就是N,这这几倍二斯就是这意思,不是这意思啊,N倍啊,对,不是,我们只是简单的了一下他们之间的悬殊以及差距,那L呢,可能是nu负载代理的上百倍都有可能。当然优化优化得当的。
17:16
对吧,好,那is跟那你就会忘了说他们两个访问量差别这么大,嗯,那为什么我们还要有不完全用iOS呢?嗯,那这就涉及到了我们另一个点,也就是他们的使用场景。那对于los来说呢,你可以理解为它能代理任何比如TCP的,Udp的,嗯,对吧?那TCP里面是不是也有HTP协议呢?嗯,那这是不是就是我们所谓的BSBS结构,那除了BS结构,比如我们的买Q机群,它能载均衡吗?也是可以,那这是不是又是CS呢?所以LSBS和CS结构都能去负带均衡,使用面非常之广,那N呢,它只能用BS,因为它只能识别到我们的P协议,我说的是标准版,还不是plug版,对吧?啊,只能识别到我们的协议,那所以它只能进行BS结构的负载均衡,那需要注意一下,那又会有疑问吗?对吧?刚才我们说iOS各种好,说它的负载能力高,说is的应用场景广,而且都能识别,对,那还要干嘛?对啊,那干嘛?那还要干嘛?那我们举个例子好吧。那现在我。
18:35
我们有一个学校,嗯学校呢有三层结构,第一层第二层楼,第三层楼,嗯,假设超哥在第三层楼,嗯,然后呢,假设我在二层楼,嗯,那一层楼呢,有一个保安,嗯,现在有一个客户呢,有一个咱们的学生过来咨询说诶你好大爷啊,请问一下超哥在哪?那这个大爷会说,诶三层去吧,好,那你一个人去啪啪啪爬到山城,那一个一个问说超哥在哪,超哥在哪?超哥在哪?可能问到最后一次找到超哥了,那访问我是不是也一样,也是类似,那这个呢,典型的就是我们的iOS只告诉你后边去吧,跟我没关系啊,不涉及到正式的转发,对吧?那如果是N的话,我们再把这张图重新画一下,同理,三层楼123超哥。
19:33
我那大爷在这对吧,然后呢,拥户过来以后,他会找大爷说诶大爷超哥在哪呀?那大爷会上楼把超哥喊下来带到你面前,说诶,给你超哥,嗯,那从这里我们也可以看出来,在有些环境中,我们是需要这种NG设位代表的附带均衡的,哎,直接用主名或者用域名,它的这个命中率更高,我直接能找到这哥们,对,我想直接把数据拿给你,哎,我就要这台服务器对吧?那那当然这也有缺点对吧,那大也会类似,对那大家会类似,转化到我们的实际场景的话,可能就是服务器受不了了,对啊,那所以啊,就是说还是看我们,就说我们讲的东西都有,你到底怎么用,还是看你的工作需求,对,那如果是把它换成iOS的呢,可能不太人性化一点,识别上精度不是那么高,但是肯定能找得到。
20:34
但是大爷的压力小对吧,压大爷的压力小,这是重点必考了,对吧,那也是,那也是我们的LS和N最重要的一个区别,好iOS能够识别的只是TCP可以识别到我们主机名等等,对吧,包括端口,包括IP都是可以的,向下全部能够看得到,嗯,没错。好,那我们这节课呢,就主要讲了,我们了解了一下LS的工作原理,其实这个还是比较复杂的东西,这两张图啊,大家可能下来还是要再仔细看看LS的工作原理,包括N这个的原理,包括我们说他们之间的这个层级负载,我们上节课讲的这些内容都是还是很重要的,好了,可能还是要联合看一下,行,那我们这节课呢,这个原理的内容就到这里,我们下节课再见,再见。
我来说两句