00:00
Hello,同学们好,我们在呃上一期的基础课程当中呢,学习了很多基础的安装配置以及NGS最常用的一些功能,那么我们现在已经可以完整的构建出一个网站来了,呃在接下来这个阶段呢,也就是我们在进阶扩容当中,第一部分会给大家讲扩容,那什么叫扩容呢?也就是我们在原有的这个网站架构的基础之上,用N构建出来这个站点,有可能会在运行的过程当中产生一些呃瓶颈,也就是用户的体验度会变得越来越不好,因为用户呢,呃会随着我们的运营过程当中呢变得。呃,越来越多啊,访问的频次呢,可能也会越来越高,那么这会儿我们就要支撑更高并发的这种系统的设计了。那么在支撑更高并发系统的这种设计的过程当中呢,我们先给大家讲解第一部分的内容就是扩容啊,扩容呢分为很多的,呃,这个维度,我们先来一个一个看一下,首先呢,第一个呢叫单机扩容啊,单机扩容这种方式其实最简单粗暴,也是我们能够想象到的这种最廉价的提升系统性能的一种方式,就像我们用自己的电脑啊,刚开始的时候可能玩的一些游戏啊,就比较简单啊,随着这个后来的这个游戏越来越复杂啊,现在这个3D游戏也都嗯越来越多啊,原来的电脑肯定就不行了,那我们增加一些硬件就能够直接呃提升这个用户的这种体验度,比如买更好的显卡啊,更新的这个CPU啊,在单机硬件扩容的时候呢,我们也也管它叫垂直扩容,什么叫垂直扩容呢?这也是我们在呃,学习过程当中,或者你看书的时候吧,经炒到的一个词,这个垂直扩容对应的还有一个叫。
01:45
水平扩容垂垂直扩容呢,我们就可以理解成像有一个村子,我们现在有100个人在这村子里呢,需要喝水,那我们这个村子里呢,要喝水的话,就只有这么一口井。当井水不够的时候呢,这个垂直扩容呢,就像在单一一个井里边呢,我们往更深的这个这个呃层面去挖井,那它就能够呃吐出来更多的水嘛,对吧?啊但无论如何,你对于一个井的这种扩容啊,这种垂直的扩容呢,也是能也是有这个一定的瓶颈的啊,对吧?所以我们就会引发下一个这个扩容的方式叫水平过容,就是一个井不够用了啊,再怎么去往里边去深挖,它能够吐出来的水也就这么多了,那么就可以去水平的去挖更多的井来供整个村子来呃这个这个饮水是吧?水平扩容呢,其实就是在呃原有的基础之上呢,我们可以提供集群化的这种呃服务方式,原来呢,我们的单机啊,在上面追加了硬件之后。
02:46
啊,在堆加硬件达到一定瓶颈的时候,我们不可能无限的去往上面去堆加更先进的硬件了啊,那我们就可以去采用水平扩容的方式,增加更多的机器,用集群化的服务来呃整体的对外提供服务,那么这样的话呃,成本呢呃就会比较低一些。
03:05
另外呢,就是从力度的这个拆分的角度来讲,我们也可以把已经水平扩容的,也就是集群化的这种服务呢,呃,在这个层面上呢,我们再去做分布式的这种系统啊,比如说我们可以把数据分区,以NG为例,我们在NG上存储了呃非常多的网页,那么网页过多的时候,比如说现在已经有呃1亿个网页了,那么这会儿呃我们就可以把数据拆分一下啊,做到数据分区,也就是原来呢,我们在单一的一个NG上呢,存储的过多的这种数据,我们可以把数据分成呃一块一块的,比如说我们有呃这种编号。那从一到1亿,我们就可以从一到3000万啊,这从一到3000万这份数据,这一这一系列的数据可以放放到其中的一台机器上啊,从3000万到6000万,再放到另外一台机器上,把数据呢,呃,给它拆分拆分开。
04:00
分成多个区段啊,当然拆分这个数据的维度有很多种,我们一会儿再详细的讲。那么这个上游服务A化呢,指的是什么意思啊,OA啊,就是面向于服务去做技术架构,这个面向于服务做技术架构,其实更多的指的是我们的后端的应用,像我们做一个商城啊,原来的呢,我们的这种代理方式会呃把多个商。原来这种代理方式呢,会把一个商城我们复制出来很多份,然后前面呢做一个返向代理服务器啊,然后把请求呢分发到不同的这个上游服务器当中,也就是真正的这些应用服务器里,比如说tomcat啊,那OA化了之后呢,就像我们现在做主最主流的这些技术框架,像double,像spring cloud啊等等这些微服务的这种框架,其实都属于OA的啊,这种技术实践啊,OA其实就也就是面向于服务器做技术架构,把原有的一个庞大的庞大的服务呢,我们拆分成更加细粒度的服务,那么对于我们的NG个来说,如果我们把后端服务SOA化了之后,也就相当于把一个特别庞大的系统拆分成了具体细力度的模块,然后这些模块呢,还会在单独的服务器上去独立的去运行,那那我们对于前端的代理服务器,也就是反向代理服务器NG来说,它所代理的后端的服务呢,就不再是原有的一个完整的整体了,而是一个一个的具体的细力度的小块。比如。
05:25
比如说后边代理了商城的登录服务,登录服务呢有三个啊,然后这个展示商品详情页的呢,可能有20个啊,然后这个呃。用户订单系统还会有好多个,那么每一个N这在做反向代理的时候,后端代理的具体的服务呢,力度更加这个这个呃细力度化了啊,这也是提升我们整体性能的呃一种方式。那再有就是入口的细分,对于入口的细分来说呢,我们整体的入口有浏览器啊,移动端的这个原生的APP啊,也也这个和我们现在的一些物联网的一些设备很像。
06:04
啊,再有就是我们的这个H5的这种内嵌式的应用,我们一旦要把入口细分的话,其实就可以让用户在接入我们的系统的时候,就可以选择不同的NGS的这个主机来访问他具体想要的服务。然后再看我们还有这个数据异构化的方法,也就是说把我们原有的这个数据啊,拆分成多份存储在不同的系统当中,原来呢,我们是把NG作为我们的主要的这种静态文件的存储的,呃,这种呃容器或者载体,那后端的服务器啊像。呃,Tomcat啊,像这个数据库这些呢,是我们对于数据文件以及计算的这种存储的载体,那么数据异构化呢,其实就是我们可以把这些数据分布在不同的这些数据载体当中,其中呢,我们可以把原有的缓存呢,做成多极化啊,这种多极化的缓存也可以让我们的客户端来分担一些责任,就是客户端的缓存啊,然后CDN的缓存以及异地多活,也就是把我们的数据以及缓存呢放到多个这个,呃。
07:12
物理的空间当中去存储啊,分成机房或者是不同的地区啊,再有就是我们可以在NG格地区缓存原有我们上游服务,也就是后端服务器里边那些数据,比如说呃,MYSQL里边存的那些呃数据文件,我们可以把它前置到NG里,NG做缓存啊,不只是能够做静态文件的缓存,它在。呃,动态的数据存储方面呢,也是可以存储的。那下一个呢,就是服务的异步化啊,在之前的这些知识的讲解当中呢,我们所有的请求其实都是同步请求,就是用户请求到我们的系统当中,那么我们系统会给他寻找一个他所需要的这个呃,资源文件,或者是一些数据文件,然后返回给我们的这个用户,在这过程当中呢,用户需要等待,他等待的呢,不只是我们在N内部呢,它需要去做处理网络呢,同样同样他也需要等待啊。
08:08
在不出现网络故障的情况下,网络它也是需要有带宽的这种消耗的,对吧?啊,在传输的过程当中,如果数据文件过大的话,它也需要等待很长的时间,在等待的过程当中,我们称为同步,那么这种异步化的服务呢,我们就可以,呃。提高用户的这个请求的这个效率,就是降低他的响应时间,用户请求打过来之后呢,我们可以先简单的给他一个响应,告诉他,诶可以了,对吧,然后呢,我们再真正的去处理,等真正处理完之后呢,再反馈我们的用户,那在。服务一步化的时候呢,我们在这给大家讲解两种方式,一个是啊拆分请求,原本一个请求呢,嗯,我们把它拆分成两个请求,比如我们想要让用户呃去下载一个文件,那我们可以先告诉用户这个文件究竟有多大,然后让用户去选择自己的这种方式去下载,你是去去做这种多线程的下载,还是去做单线程的下下载,对吧?啊,当然还有这种拆分请求额外的这种方式,比如说呃,这种复杂的提交请求,我想要一个呃数据报表,想要更复杂的这种内容结果集,那么先。
09:12
接受用户的请求,然后接下来处理完成之后呢,再返回给我们的用户,具体崭新的方式呢,比如说我们有一些系统有这种visor的这种导航式的这种方式啊请求。一步一步的来啊是吧,啊,一步根据下一步,下一步这种指示的这种方式啊,来提示用户接下来要做什么,或者我们能够给你什么了啊对吧,这是服务异步化这种拆分请求,还有就是进入消息中间件啊,把用户的请求呢,写到我们的消息中间件里,然后一步一步的再来处理,这个和拆分请求呢,其实很像,其实也就是我们这个具体拆分请求里里边的这个具体落地的方式了。在扩容的时候呢,有两个比较重要的原则,也就是无状态原则和弹性原则,这是我们呃第一部分扩容的这个整体要给大家讲解的内容,那么接下来呢,我们会一个一个详细给大家来讲解如何去通过扩容来提升整体系统的吞吐量。
我来说两句