00:00
同学们,我们接着来给大家来聊一聊这个动静分离啊,还有这个location kitchen的这个匹配规则,刚才我们看见了,我们这么批这么去写这个location kitchen的话,那可能目录会非常多,那我就要写好多个location,那这个不能像我们之前写这个,呃,虚拟主机里边啊,在这个serve name里边能写好多个啊,那这是匹配的规则,大家一定要注意,这个location后边呢,它能接的这种格式呢,呃,一就是我们这种以斜线呃开头,这是嗯,所有的这个。呃,这个请求都会被匹配到以这个一个一个斜线一个根号啊,这个location下,这个是默认的这个规则,它的优先级比较低,大家也能看出来,我们只要配置了这个斜杠JS,它就不会被pro pass掉了啊,而是去找它,所以我们先要理解第一点它的优先级,如果配置的这种匹配规则的话啊,匹配到斜杠JS,它就会去从这个JS的目录里边去找。
01:00
这是第一大家要记住的啊,这个呃,斜杠G的优先级要比直接location的location一个的这个优先级要高。那我们想要把这个三个合并成一个的话,我们应该怎么去配置呢?还有另外一种方式,就是我们去写正则表达式,正则表达式的匹配呢?呃,我们可以直接在这location后边跟正则就可以了。那么这里的正则呢,我们这么写啊,呃,前面这些呢,我们全都不要了。留下一个吧,这几个不要了。呃,这里边的正则呢,是以这个波浪线开头,然后呢,星号这个的意思是我们开始要正则了,那接下来这个正则里边呢,是不区分大小写的。那么在接下来呢,我们还是需要这个斜线,这斜线里边,呃,这就不能只是这个JS了啊,这只这种正则呢,写了其实也没有意义,跟你直接写了1JS没什么区别,那我们可以让它匹配多个,我们在这拿括号括起来啊,它可以是JS竖线啊或者是什么呢?Img。
02:07
再或者呢,是我CSS。这种正则啊,我们如果要写完之后呢,讲道理它就应该能够匹配到这三种了,这是正则的location匹配方法,我们试一下CTRLS保存,然后呢,这要。看看他能不能访问得到。来刷新。注意啊,现在d catch了啊,你在这疯狂的刷,他也是能够访问得到的,说明这几个地址都能匹配得到啊,这是以正则的方式去匹配我们的这个,呃,这个这个这个动静分离的这种方式,通常我们就是这么配的啊,这个动静分离呢,听起来好像比较复杂,其实呢也比较简单啊,它的试用场景我们在上节课也跟大家说了啊,嗯,你的这个传统项目啊,通过这次升级改造的话,能够大大的提高你的系统的并发量,因为你的静态文件全部都交给。
03:04
我们的这个呃,N来处理了吧,对吧,但实际的这个测试当中,N几的呃处理静态文件的能力和我们的这个Tom cat去处理静态文件的能力其实是不相上下的啊,他并没有说像网上这种传闻啊,N处理静态啊能到2万QPS,然后呢,这个Tom cat呢,可能只有一千五啊,或者是800,其实没有这么大的差距啊,因为现在的Tom catt啊,现在的Java已经是比较先进的了,它的先进是在于它利用了操级总底层的这个NIO啊。它的这个呃,操作内核里边原生就支持这种高比较高性能的这种网络数据的这种传输,才能达到这种比较高的性能,但是啊,每一次建立连接的时候,我们的他们CAD还是额外会开有一部分开销,那种会画上的会画级别的开销嘛,它还是要比N这个C要高啊,开销要高,但是性能呢,要比NG个C要略低一些,但也没有低到那么多,因为现在还有这个keep live的这个技术的存在,给大家解释一下吧,在这。
04:15
呃,我们的用户在访问我们的tomcat的时候。访问它底层的这个静态的文件,对吧?啊。当我们的用户首次访问我们的tomca的时候呢,会有绘画的概念,因为tomcad里边会有这个session。那我不管你请求啥,我都会去检查你这个session对吧?它,而且这个呃,他MD是运行在我们的这个JVM的这一套这一层这个容器里边的,它的执行效率啊,会略低于这个NGS,从这个呃,比较硬核的底层的这个语言上来说,它是略低的。呃,但是它并不是说每次请求都会去检查这个这个session,它只是在建立首次连接的时候啊,然后以后呢啊,它会保持这个连接,Tom k也是有keep alive的。
05:10
也就是因为它这个keep live,它可以复用之前这个网络连接通道啊,也就不至于的,它会创建出来无数个连接,比如我们现在同时并发有200个请求去打向我们这个tomcat,可能中间呢,需要建立十几次啊,握手连接这么十几次,然后其他的这些都可以复用,因为有很多是瞬时的请求,请求打过去马上文件就给我返回来了,对吧,这也是为啥现在有很多网站大家看啊,比如京东。它在加载这个页面的时候,它不是一次性把所有的这个图全部都给我们加载出来,它分了几个这个呃阶段,当你需要展示的时候,再给你加载出来,这也不至于一次这个并发量,真正的并发会特别特别的高,比如一次并发的有呃二三十个,它会建立这么几几个连接,然后呢发起请求,然后返回数据,再有这种请求的时候呢,还可以复用之前的连接,这也是为啥tomca的这个性能实际上并不比这个NG差的特别特别的多啊,没有那种指数级的这种差距啊,他们看的也会利用超级统底层的一些这个技术啊,比如说epo。
06:20
呃,这种高性能的,呃,网络接口呢,呃,也让我们的这个数据传输呢,速度变得更快了啊,这并不是tomcat或者Java发明的,只是它调用了系统底层的实践而已啊,这是给大家一些讲的一些扩展的知识啊。啊,再嗯,书归正传啊,再说一下这个动静分离,其实这个动静分离呢,比较简单,但是需要我们去手动去把这个静态文件呢,给它给传到前置的服务器上,呃,还有一个原则就是呃,这些静态和缓存的一类的东西呢,是越往前越往前放越好,它还减少了网络开销,对吧,你把它放到后端的服务器上。那你中间的这个N几个,他在中间还得要过一遍手,当一次中间商,每次都得搬运一下额外的开销,这属于是因为在内网环境下,这个环节里边是不需要没必要的这种开销不如啊,就直接把这个静态文件直接给它放到NG上啊,本来他也要去加载读取对吧,让NG帮我们去。
07:17
呃,把这个静态文件读出来,反馈我们前端用户啊,这样是效率最高,速度最快的啊。
我来说两句