00:01
大家好,欢迎大家继续收看上硅谷的Linux云计算视频,我是刘川老师。那么本节课呢,我们来讲一个网络服务当中和NG相关的面试题,OK,首先呢,我们来看一下我们的面试题的题目。那题目呢?是这样的要求呢?我们来描述一下阿帕奇服务和ing服务对应各自的优缺点,以及呢,我们如何在生产环境中来选择使用哪个对应的服务?那这个呢,其实是我们面试题当中经常见的一类题,那就是两个对应相似的功能的服务进行一个对比,然后呢,说出各自的优缺点。这种类似的功能还是有不少的。对应的呢,阿帕奇其实我们已经讲过相关的两个面试题了,大家通过面试题应该能回想起很多和阿帕奇相关的一些信息。但是对于N来说呢,我们可能需要。单独再抽一个问题讲一讲NG的一个工作的一个原理,OK,那除此之外呢,这个题除了考察他们的各自与缺点之外呢,还考察他们的一个区别,那就是为什么生产环境中两种不同的外部服务器都有所使用,那在什么情况下使用阿帕奇,什么情况下使用NG4。
01:21
这个是有讲究的,OK,那也就是后边我们这个问题如何选择问题了的,那首先呢,我们来对题目做一个分类,它呢,我们。可以给它分为一个纯概念类的,那其次呢,就是关于阿帕奇的优缺点和N的优缺点,那首先我们来看一下关于阿帕奇的一个优缺点的问题。那大家都知道阿帕奇呢,是一个非常古老的一个外部服务器了,它发展和存在时间非常长,那。这种存在时间非常长的服务,它就有一大特点,那就是什么呢?那就是它的这种。资源文献相对比较丰富啊,资源文献相对比较丰富,那我呢,给大家总结了以下这么四个优点,大家来看一下。
02:03
第一个就是。阿帕奇的rewrite功能要比S的rewrite功能要强大。那大家都知道我们,呃。正好上一个题目讲到了关于阿帕奇的一个对应的一个配置啊。那在里边其中我们讲到了阿帕奇的重写功能,它既可以对我们的这个域名进行重写,那又可以对我们的这种什么端口进行重写啊。当然不是端口重写,还是通过访问关键词进行重写的,那它的重写功能还是非常强大的。第二个就是模块非常多,基本上想要使用的功能都能找到模块。那它这个特点呢,非常好,由于阿帕奇它所存在的时间比较长,那人们为了维护起来相对比较方便,那我们呢,是把很多的一些功能啊,都写成了一个一个独立的模块。然后呢,以这样的形式,比如说这是阿帕奇的主程序,然后呢,阿帕奇的主程数主主程序依赖一个阿帕奇的配置文件那。
03:06
配置文件里边的相关一些选项和参数很有限,只能维持阿帕奇的基本正常工作。但是如果阿帕奇想使用一些更高级的功能,则我们有一个专门的目录来存放了我。我们的阿帕奇的一些独立功能的模块,然后如果阿帕奇想使用对应功能的模块。那只需要在配置文件里边对这个模块进行调用就可以了,然后呢,我们就可以使用对应模块的功能了。所以说这种将所有的这种功能模块化的这种方式更加简便了,阿帕奇的配置啊,更贴近我们这种。简便管理的方式啊,简便管理的方式OK。所以说第二点也非常好,那再看第三点,存在时间比较长,文献比较全面,那这个呢,大家会发现我们去网上找一些和阿帕奇这个原理相关的资源的时候,以及找一些阿帕奇配置相关的资料的时候,包括一些问题解决思路的时候,会发现啊,阿帕奇相关的这种资源会非常非常的全面。
04:15
而且呢,由于阿帕奇存在时间比较长,它呢会不停的不断的去什么去优化和改良,那相对来说它的一些bug也相对比较少一些啊,相对比较少一些。那再一个就是阿帕奇的动态解析和静态解析都非常稳定啊,动态解析和静态解析都非稳定。动静态解析简单解释一下,所谓的静态解析其实就是解析我们的HTML的一面啊。那以及加上我们的CSS一些样式等等。但是呢,动态解析就不一样了,所谓的动态解析一般指的是解析需要连接数据库的页面,比如说我们的PP。
05:00
比如说我们的PP,那PP页面上呢,它只有一个大体的一个页面框架,但是呢,并没有我们的所有的数据,有些页面上这个框架上所带的数据必须要去连接我们对应的一个。数据库。然后才能把完整的页面展示出来,那这个时候需要连接数据库,并且需要解析PHP代码的这种页面,我们一般称之为叫动态页面。那这种。问题,大家肯定不可能混掉啊,OK。那这是它的一个优点,那当然它也有缺点,那它的缺点就是由于阿帕奇的工作模式使用的是同步阻塞型。导致呢,阿帕奇不管使用哪一种工作模式,它的资源消耗比都相对较高,那这也就导致它的并发能力较差,那这个地方呢,注意我这两个描述指的是相对于别的外部服务器而言,而不是和阿帕奇本身相比。
06:00
那毕竟我们上一个题目讲到了关于阿帕奇的三种工作模式,并且三种工作模式它们各自的特征也不一样,那。他们的处理任务的工作效率也不一样,确实当时我说过,其中有一些模式,它的工作效率相对比较高,抗病房能力比较大。但是。即便如此,它和其他的外部服务器对比起来之后,还是有一定的差距的,OK。那OK,我们说完阿帕奇的优缺点,然后我们再来看一下NG克斯的优缺点。首先呢,简单对N做一个简单的一个介绍啊大家。对他不是特别了解,那NG呢可以说是一个后起之秀,那这个软件是从2004年发布产。那它呢,是由一个呃俄罗斯的呃,一个排名第二的一个网站所开发的,那对应的呢,它的主要作用就是来为当时他的那个网站来做一个这种性能的提升,要做一个性能的提升。
07:01
我们一般称为NG,叫什么呢?我们一般称之为NG,叫做高性能的轻量级的web服务器啊。高性能的轻量级的web服务器,再一个它还同时也是一个叫反向代理服务器,那至于它的反向代理功能,哎,我们在下一个面试题当中会有所提示,OK。我们简单对这个NG做一个了解之后呢,会发现我们的NG要比阿帕奇要年轻的多得多,但是呢,按照我们目前的市场份额来看,NG在整个我们的生产环境中所占用的比例是一个逐年上升的一个趋势,当然啊,这个上升的趋势没有我画的这么夸张啊,但是上升的趋势也是非常大的。最终,恩和阿帕奇会不会互相被取代掉呢?注意恩克斯和阿帕奇他们各自有各自的这种。工作特性和工作优缺点,他们两个目前的身份是一个互补型的身份,至于以后会不会有所什么,谁取代谁呢?这个也不好说,因为技术的发展它是没有一个什么极限方向的,OK,那目前来说N阿帕奇它是一个相对互补的这样的一个样子。
08:18
那我们来说一下关于NG的一个特点啊。首先它的优点里边也总结了四条,那第一条呢,是关于它是一个轻量级服务器。相比阿帕奇而言,它所占用了。占用的资源更少一些啊,占用资源更少一些,那同样的配置NG克斯占用资源少,他就能处理的用户量多,你可以理解为它的并发能力强,OK。那第二点就是并发能力了,并发能力强,NG在进行处理用户请求时使用的是异步。非阻塞型,那相比于刚才的阿帕奇而言,同步阻塞型完全是不一样的,那关于什么是同步阻塞,什么是异步非阻塞,我们一会儿呢会有一个小的案例来给大家讲一下。
09:09
阿帕奇是同步左情的,所以说在高并发的情况下,NG克斯在同资源的情况下,它的并发能力要远高于。阿帕奇,注意这个地方我用了一个远高于,那就是NG克斯的并发能力要真的要比阿法奇强非常多。所以说这就是为什么。近些年,NG克斯他在我们的生产环境中使用量逐年增加的原因之一,OK。那再一个就是N也是一个高度模块化的这么一个服务啊。要这么一个服务,他呢。可以这个把很多的服务模块独立成很多的这种文件,或者是也可以直接把对应的一个模。块写入到我们的配置文件里边,直接调用啊。总之NG克斯你可以理解为他是学习了阿帕奇的优点啊,把一些功能模块化,并且这种提高了一个很方便调用的一个方式,OK。
10:11
那其次呢,就是第四个了,就是关于它的社区比较活跃,由于是一个新兴的一个web服务器,由于它性能还比较强大,所以说社区比较活跃啊。然后由又由于是开源的,很多的工程师呢,在里边进行一个这种新的模块的一个研发啊,以及一些bug的发现和修复等等啊OK。那这是NG的一些优点,那N有缺点吗?啊也有缺点,比如说。N的缺点呢,是这样的。在动态处理上,N需要通过一个叫fast c Di的一个模块来连接一个PP的叫FPM的服务。相比阿帕奇,它呢不是特别占优势,但并不代表这个东西它不好用。
11:01
相反,这个东西是可以正常使用,而且非常好用的,只是相比而言,没有阿帕奇这么稳定啊,没有阿帕奇这么稳定,OK。我们说到这个地方之后啊,我来给大家找几个图片给大家看一下,关于阿帕奇和NG克斯在这个处理上的时候,它的一个处理过程啊。我这个地方呢,有一个专门这个画了一些图片的一些N一些图解的一些图。那首先呢,我们来看一下这个关于N的处理过程。处理过程。首先呢,这是NX服务器开放了八零端口,其次呢是一些它的子进程,用来处理用户的请求,OK,那这个时候如果是静态请求,则他们直接就完成了。向NG直接把对应的动态这个静态资源页面啊返回给我们的客户,客户就可以通过浏览器来解析了。但如果我们NG所接收的是静态动态资源的请求,那这个时候我们的N就会将动态请求交给fast c这个模块,然后让他去找。
12:09
属于PP的一个服务叫做PHPFPM。这个服务呢,是专门用来和N进行对接的这么一个服务,那它会开放一个9000的户,你可以这样理解。当ins接收到动态请求之后。ins会把这种动态请求交给。PP的FPM服务,然后再找到PP来进行解析。解析过程中肯定需要连接到数据库进行一些什么。数据的查询,OK,然后把查询的结果汇总到PPT页面上,再把这个解析结果汇总给inx,再给用户。这就是我们NG克斯和PP连接的一个连接模式啊,连接模式OK,好了,这个就是我们的这个。阿帕奇和NG的一个对比,那再来说一下如何来选择。
13:02
选择其实很简单,就看你的需求了。生产环境中没有绝对说选哪个一定好这种。那只有说适合某种生产环境情况的才是最合适的,OK,比如说N吉克斯啊,比如说NG克斯,特别做静态资源的处理。首先第一个是因为它处理相对比较简单,而且它的并发能力非常高。也就意味着它的。效率会非常高,OK,那阿帕奇呢,比较适合做动态资源的处理,因为它什么连接PP的方式非常方便,是通过一个模块直接连接的,那相对比较稳定,而且它的功能也比较全面和比较强大,OK。下边这句话大家可以记一下,到时候在回答相关问题的时候,可以以这两个方向来进行回答,比如说在并发较高的情况下优先选择NG,并发要求不高的情况下,两者都是可以的,那规模稍大的可以使用NG作为反向代理,然后将动态请求负载均衡到阿尔帕西上,那我们这个地方又提到了一个关于NG第二个功能。
14:18
那就是关于它的反向代理和负载均衡的功能,OK,那同样我们来给大家看一下我的那个PPT的图片。看一下第二张图片。那这个时候呢,就是一张NG作为反向代理和负载均衡的图片了,那很简单,当我们的这种用户量非常大,并且既有动态资源请求,又有静态页面请求的时候,那我们就可以什么让NG来充当所有用户的什么请求服务器对外它提供一个八零端口,所有的请求都请求到N服务器上。那这个时候呢,NG呢,默认情况下只处理我们的静态请求。当一旦匹配到用户的请求是动态请求时,NG是不会对这个用户的请求做解析和处理的,而是会通过自身的反向代理模块将用户的请求代理的后端的。
15:15
阿帕奇服务器上。至于它怎么分配呢?N几是有一定的什么分配算法的,呃,分配算法的,比如说我们有最简单的轮询算法,那就是来一个给其中一个,来第二个给第二个,来第三个给第三个,来第四个,第四个第五个给第一个人,这样轮巡来分配,OK,那当然也有更高的算法,这个地方我们就不。在提及了,但是它的处理方式就是静态的我处理动态的,交由你们后台的阿帕奇服务器来处理那。这就是他的反向代理功能和它的负载均衡功能,以此呢,既发挥了我们NG克斯的高并发性能,又利用了阿帕奇的动态页面的什么稳定和什么功能全面,所以说会发现我们这种架构设计出来之后呢。
16:04
我们的生产环境中的并发也非常高,页面的处理效率和稳定性也非常强,OK,这也就是我们所描述的对应的这个功能。OK。所以说,当我们在这个回答相应面试题的时候,一定要抓住对方想得到的结果,告诉对方你所总结的东西有哪一些OK。也就是说,我们的总结的重点。好了,这就是NG和阿帕奇的相应的一个对比,那接下来呢,我们来看一个相应的面试题,那就是为什么NG并发要强它的资源消耗剂,也就是说我们要说一下关于NG克斯的工作原理了。那这个地方呢,我们首先来这个了解一下关于同步异部以及这个我们的这个阻塞非阻塞这个问题,OK。很简单,同步异步这个问题呢,我们用一个例子来说明,而不是去用那个对应的一个这种纯理论概念性的问题,那大家通过这个例子理解之后呢,可以自己来组织一些语言来进行回答,比如说所谓的同步,我们可以用这样的方式来描述。
17:16
那小明呢?接收到了一个快递,即将,注意是即将送达。的一个短信,那这个时候小明就会直接去楼下,然后一直等待着快递送达。一直等待着快递送达,也就是说,当有一个用户请求进来之后,他就一直会等待这个用户请求,并且等待这个用户请求处理完毕,他才会释放掉这个请求。也就是说,只有小明等到了这个快递送到了,并且他拿到快递之后,这个时候小明才会回到楼上继续他的工作。同步。那我们再看看下一步。所以的异步就是。小明收到了快递即将送达的短信,但是小明不会下楼去,而是什么呢?
18:01
等到快递小哥已经到楼下之后。并且打电话通知小明,你要下来取个快递啊,否则我就走了。这个时候小明才会下楼取快递,并且取完快递立马回到楼上进行自己的工作,这个叫做异步。异步。这两种模式看起来之后呢,会发现同步会相当的消耗资源,那就是它会等。而异步的是不会等。在你发短信之后,我会继续干我的活,直到等你真正的到了之后,我才会下楼,才会取快递,这就是同步异步的区别。然后同步异步的区别。那我们再来看一下对应的这个阻塞,非阻塞。所谓的阻塞分测是这样的。当阻塞时,就是小明收到快递即将送达信息时,他会立刻停下手中的所有的事情。然后呢,一门心思的专门等待快递的送达,你可以这样理解,诶,小明等到了这个,接到了这个快递,说我要马上要把一个快递送到了你这个。
19:07
准备接收一下啊。这个时候小明把手里的正儿八经的工作以及什么工作,所有工作全都放下,然后就搁那坐着。干嘛?两眼这个发呆,等待着快递送到。啊,不再干什么事,也就是说他现在唯一的事情就是等快递。啊,他现在唯一的事情都是等快递,所有的其他事都要什么等待。收快递这个事儿,完事之后再去操作。啊,再去搜索OK,那所谓的非阻塞呢,指的就是小明收到快递即将送达信息之后,在等快递的时候还可以干嘛呀?一边敲着自己的代码,一边听着歌,然后顺便等待着快递即将送到的信息。OK,这也就是我们对应的这个非阻塞,那如果我们连起来看,对于阿帕奇它是同步阻塞性,那就是当阿帕奇工作之后,如果有用户请求连接过来,那这个时候阿帕奇会分配一个。
20:01
线程来处理这个用户请求。那这个时候,在处理这个线程的过程当中,这个阿帕奇的线程一直等待着用户请求完毕,并且把所有的这种东西都处理完毕之后,才会断开这个连接请求。啊,才会断开这个连接请求,并且这个进程在进行处理这个用户请求的时候,即便这个用户请求中间有一些时间需要等待,这个过程中,这个进程也什么都不干,而是一门心思等待这个请求处理完毕。一门心思等待这个请求处理,你可以这样理解,就是小明啊。对吧,使用这种阿帕奇的模式,等快递的话,他就是走到楼下啊,就是收到信息了。即将送达信息了,走到楼下,然后站楼下。一直发呆,等着快递送达。这就是他的模式,那如果是非阻塞型,那就是小明到楼下等着,但是他可以在楼下什么刷刷微信啊啊对吧,看看微博呀之类的那。
21:06
这就是非阻塞性那。我们再来看一下异步非阻特性,再来看异步非特性。所谓的异步飞速色型呢,它的处理方式很特别,那就是当有用户请求发送过来之后,这个时候NG会发送一个什么线程去处理,但是在处理过程中,如果这个线程需要等待,则对应的NG这个线程会什么临时的将这个事物挂起,比如说我这个线程会释放掉你这个请求,我不和你,我不给你操作了,为什么你这个线程处理需要等待一段时间,哎,这段时间我还可以去干别的事,比如说这个线程移到了下边来,去接收一个新的用户的请求。啊,接触一个新的用户请求,这个时候你会发现在一定时间内,阿帕奇和恩吉克斯比起来,在一定时间内,阿帕奇的技能只能处理一个用户请求,而N吉克斯的可能能处理N个请求。为什么是N个呢?可能在这个进程等待过程中。
22:06
他已经处理了。五六个,六七个,甚至十几个其他的用户请求了。那。如果这个对应的用户请求突然之间处理完毕了,需要给用户反馈数据了,那对应的就会触发一个事件,然后交由一个新的进程来对这个用户处理,并且把资源传给对应的用户。这叫异。非阻塞性。啊,异步非作性,那我们来看一下对应的一个答案怎么来解释啊。也就是说,N以异步非阻塞型的方式的工作一个过程,首先客户端会发向服务器发送一个request。并且呢,服务器呢,会分配一个worker进程来处理,但是呢,对应的worker进程会处会释放一个对应的一个线程,对最终处理用户请的是线程啊。那如果对应的用户发过来的request能立即处理完,那这个对应的worker进程在处理完之后就会立刻释放掉资源,进行下一个用户请求的处理。
23:09
当然还有另外一种情况,那就是如果对应的用户发过来的请求没法立即处理完,则这个时候我们的worker进程,比如说我们的线程会干嘛呢?注册一个返回事件啊,注册一个返回事件。注册对应返回事件之后呢,这个我们的worker进程就会去处理其他用户的request,直到当之前的这个用户请求有了一个返回结果之后,我们的这个事件就会被触发。出发返回直线之后,由于空闲的洛克进程去接着处理这个用户的请求。然后等请求处理完毕之后,再进行对资源的一个释放,那以此呢,达到对所有worker进程的一个充分利用的一个这样的一个目的,那既然对所有的worker进程充分利用了。
24:00
你就会发现,相同配置模式下,N克斯的并发能力要远大于阿帕奇,要远大于阿帕奇。所以说,这就是我们所谓的NG的异不非阻塞性的工作。这也是为什么他在这些年能够在市场上占有的份额越来越大的原因,OK。那这个就是我们阿帕呃,阿帕奇和NG相关的对比,以及NG对应的一个工作原理,那希望呢,这个视频可以帮助到大家,在这个面试过程中,哎,回答问题的时候能有一个比较清晰的思路啊。解答方式。那我们本节课就讲到这了,我们下节课再见。
我来说两句