00:00
嗨,同学们,呃,最后呢,给大家来聊聊这个上游服务器的应用缓存,那顺便呢,我们把这多级缓存呢,把它给串联起来,让大家这个看起来呢会更直观一些,这张图呢,有点过于复杂,那同学们可以字形啊,到课后自己去呃根据自己的这个学习情况,你去呃画一张适合自己的系统架构的这么一个呃整体的这个链路架构图。那这个多级缓存啊,给大家来看一下,就是这是我们最前端的用户,我们在这儿呢,给大家已经讲了,用基于用户这一端啊,我们可以在用户这端做的缓存,比如说呃。基于HTTP协议的这些啊,对吧,呃,像这个呃,Control啊。这些基于浏览器的,呃,实现的HTP协议的缓存,我们就把它叫HTTP协议缓存。这是用户这一端的缓存,那么这这个作为用户这一端,呃,和用户距离最近的缓存,对吧?那用户这一端呢,其实还有额外的一层缓存是DNS缓存,DNS缓存呢,内置到我们的各大操作系统里吧,不管是手机的这种移动端的操作操作系统,还是咱们桌面的Windows Linux对于DNS都有缓存,因为DNS在发送请求的时候,它不可能针对于每一次请求都去解析这个域名的IP地址,对吧?那所以在DNS在本机上就已经有一级缓存了,然后DNS的上游的DNS服务器。
01:30
啊,它还会有缓存啊,它是层层缓存,那所以它的第二层缓存的就是我们的DNSDNS本机的DNS缓存啊,不会去频繁去解析请求,然已达到这个高效访问的这个目的,对吧?那透过了DNS呢,拿到了IP地址,那它会打向我们的服务器,那这第一层服务器呢,就是我们之前给大家介绍的这个CDN服务器。CDN服务器呢,是全网静态内容分发网络,它可以把大量的静态资源直接部署到距离用户最近的呃机房里,以达到快速访问的目的啊。CDN服务器里边通常存储的都是静态资源,呃,基本上也都是那些不太变化的,所谓的不太变化就是没有特殊情况不会改的那些东西啊,你你三五天就有一些特殊情况,这种东西呢,尽量不要往CDN上去传,因为这样非常有可能你在更新不及时的时候,或者呃这个。
02:27
CDN服务器它自身缓存没有更新的时候,你返回的用户的数据呢,它还是这个老的数据,但是现在的CDN服务器呢,也是比较先进了,支持更多的功能,但总的来说呢,我们把责任分清,任务分清啊,每一个这个角色究竟应该干啥,他不要去呃过多的去参与其他节点这些操作啊就可以了,也没必要去把呃我们的这个性能呃想的特别特别的这个极致。啊,首先呢,我们第一是有点儿不太容易做到,第二呢就是呃,这个也没有什么太大的必要,因为现在的网络和这个计算性能呢,都已经有一点过剩了,如果要是弱一点呢,就是我们现在的网络呢,有时候会不稳定,对吧,但是这5G时代已经到来了,访问速度呢都还可以了,那CDN它本身解决的问题是跨区域问题,一定要明确这一点啊,它是跨区域的缓存,比如说北京想要访问。
03:21
这个广州的服务器,那我的这次请求会延迟非常高啊,比如说五十六十的毫秒的这种延迟,对吧,那如果要是把这台这个这个主机搬到北京的访问速度肯定就快了,它主要解决的是地域区域的问题啊,它并不是这个真正去缓存我们的这个一些动态内容,它不合适,所以这第三集的这个缓存就是到CDN服务器了。那从CDN服务器再往后边就会数源嘛,那到云服务器上就是我们的NG格服务器,NG格服务器呢,这也是我们,呃本套课程主要给大家讲的这个内容,在NGS里边我们给大家讲了pro catch对吧?啊,通过pro catch可以去做静态文件的缓存。
04:10
这是做静态文件缓存。那么它同时呢,还可以配合用户端啊的这个HTP协议去生成1LAST moify control等等这些关键字,来配合他呢,去做这个浏览器或者HDP协议上的缓存,对吧?呃,这是NG的静态文件缓存,然后另外呢,就是NG里呢,可以去做这个动态内容,呃,或者说内存级别的这种数据缓存,那第一个呢就是。静态文件索引。缓存。或者叫原数据缓存。就原数据比较合适。啊,这就是上节课给大家讲的,在NG里呢,呃,它的内存空间里边,我可以去缓存它的这个呃云数据信息,然后以达到呃这个send file啊,它的这个更更加高效一些啊,在读写数据的时候呢,速度会更快。
05:10
然后另外就是他还可以去。内置另外一块内存级别的缓存。就是这个多进程共享缓存,多进程的共享缓存呢,这就比较适合存储一些热点数据啊,同时把内容也给它存储到内存当中,而不再去读取磁盘上的这些数据了,因为读取磁盘它要这个呃,这个这个寻址啊,他找这个文件究竟在哪儿,还得去顺序去读,它的性能要和这个内存比起来,那简直是天壤之别啊,内存的里边的数据是极在读写的时候极快的。那但它有一个另外一个弊端,就是内存的大小会受制约啊,即使你搞到了128G,那它变成256G的话,这是很困难的,256提升到512,这也很困难,所以你说几百G的数据存到这个内存里边,呃,一般来说它不太好做啊。
06:06
主要是硬件资源太贵,当然公司如果不差钱的话,嗯,是可以做到几个T的内存的这个共享数据的,呃,之前我之前我工作的时候,一家一家特别大的央企独角兽公司。搞了三台机器,5T的内存,全部的关系数据库全部都存在这个内存里,当然这机器不能挂,不能挂对吧?啊,一旦要挂了,它在冷启动的时候,这些数据想初始化几个T的数据,那也是非常麻烦的一件事。呃,这是在NG进程内部啊,多多进程共享内存啊,然后另外呢,就是在它的进程外部啊,脱离NG,在NG这台机器上,或者是另外再找一台机器,一般来说啊,呃,如果用外置的内存缓存的话。你就不要把它再放在这台NX机上了,那如果要是可以的话,你为啥不把它直接用到N内存里啊,对吧,一般用到外置内存都是内存不够用了,所以我才加一台机器用memory catch或者是reddi去做这种外置的内存缓存,那到这呢,1234多级缓存的,我们已经到了第四级缓存了,对吧,那如再往后边。
07:16
NG的后边是啥?就是我们的上游的应用服务器了,这就这堂课里面跟大家来聊的,比如这是呢,我们用的是tomcat,因为我就是个Java同学嘛。这个Tom cat里边是不是也可以做多局的缓存,当然不作为我们的,呃,重点内容讲在这里边呢,首先呃,Java呃自身呢,就有一层缓存啊,在Java内,就在Java的内存里边,我们生成好了对象在访问一些数据的时候,有很多这种静态的变量,我们不需要管理,这本来就已经是一层缓存了,对吧,然后拿过来直接去用,最经典的呢,就是这种这个这个单例模式,我把一些共享数据呢,写到这个单例里,一些这个innuration啊,或者一些共享的这些,呃,高高频访问的这些变量都可以往这里边去放,对吧,这叫静态缓存。
08:04
然后呢,再有就是这还没聊到他这个JVM这一层啊,这也没必要聊了啊,在tomcad里边呢,呃,就不叫tomca,在Java这一层呢啊,在它的内部呢,还可以通过像cash。这种呃,第三方的组件去组建呃,JVM级别的内存,或者是JVM的对外内存啊,当然它也是在本机里边的嘛,对吧?啊,这是在我们的Java开发的时候,包括还有那个呃,谷歌的va catch啊,这些都可以建立这个啊对内对外内存。刮吧啊等等等等,有很多这种JVM级别的这种内存,那么在tomcat的外部呢,同样它也可以可以去呃,去访问这个第三方的这个呃。组件啊,对吧,啊,我们这个缓存中间键这个呢,这一部分呢,不作为我们的重点讲解,那我们看啊,这多级缓存分成的用户DNSCDN。
09:05
Tomcat。在NG呢,作为我们重点课程讲解内容呢,在这里边也介绍了多种。缓存的配置方式。呃,最后给大家总结的就是在真正的企业开发当中,我们所用到的这种缓存的机会肯定是有,但是绝对不会像我给大家讲的这么复杂,你在这里边呢,稍微搞一搞就能够扛住现在的这个,呃基本的用户的并发,如果你想要进一些互联网公司,对这个呃技术技术要求比较高,或者是对这个呃某项技术要求比较深,比如对NG它要求比较深的话,那这会儿可以去深度去研究我给大家讲的每一个这个知识点,那每一个知识点打开之后呢,都会发现它都是一个新的而且特别大的事件。那这就是这个多级缓存这一部分的所有的内容,那么接下来呢,我们就要进入第二部分我们的这个讲解啊,就是对于效率上的一些提升的,呃,这些课程的内容啊。
我来说两句