00:00
那好,同学们,接下来我们看一下keep live在N里的一些详细配置,也是我们经常会用到的啊,然后这些配置呢,它都在哪,还是在这个官官方文档里。在这儿keep live time啊和这是keep live time,这是呃,Keep live里边在大家看啊,是在01:19里边,在新加入的这个新的一些这个新的功能啊,它默认的这个时间是一个小时,接下来我会一个一个给大家解释,然后最完整的呃NG的可配置的选项全部都在它的官方文档里啊,有很多配置呢,你现在其实在网上搜不着啊,就是有还没人写这些文章呢,但是期待同学们你们去分享出去啊,去写一些东西。啊,你搜不着的东西呢,就可以在这个官网里边去找,它这些英文呢,也不是特别难,大家可以简单看看呢,基本上也都能读懂,我们先看这第一个叫keep lifetime。这lifetime它指的是整个这个绘画啊,你看limit the max number time during啊。
01:06
Which requests can be processed through one keep alive,但是呃一个呃keep alive连接里边最大的这个时间啊,你不能你keep alive的,你跟你在这给我搞一辈子对吧?啊你这个呃你不管怎么去复用这个连接,我都要让你呃在一段时间之后呢,给你给强制的关闭掉,这样呢,以避免咱们的这个系统资源呃会被浪费。啊,因为有可能会有一些攻击啊,打过来啊,他这种专门去消耗我恩吉格斯的一些连接资源的啊,这个我也是吃不消的,所以有一些连接呢,在一在一定的时间内呢,我要给它关闭掉,然后把这些这个可配置的选项呢,全部都给大家画一张图,这样呢。方便大家的学习,呃,这个图呢,嗯,其实也是很久以前呢,我就想画的,这次的时间呢比较充足,所以我就给它画出来了,要不然呢,这些配置呢,可能还真的记不住,我们先看这个,呃,这张图的这个几个位置吧,首先前面这是我们的浏览器啊,然后这个。
02:17
这是针对于我们的服务器端了,除了浏览器之后呢,后边全都是服务器端,服务器端的包含我们的NG和NG的上游服务器啊,在NG这个。嗯,我们的反向代理服务器的这个内部呢,在server节点里,我们就可以配置和这个客户端的这个keep live相关的一些配置,在这儿呢,有这些。那keep live disable,我一个一个给大家解释一下,这keep live Dis呢?啊,这是指的把某些浏览器给它给禁用掉啊,在官方文档里也给大家解释了啊,它是针对于具体的user agent,当他带的这个user agent,比如说是IE啊,我现在已经不支持IE了,我不希望你过来给我建立这种这种长连接,因为有一些浏览器啊,它内部是。
03:07
呃,有一些实践啊,对于我们的服务器端来说并不是特别友好的,所以我们要明显的去禁用掉一些这个,呃,浏览器的它的这个keep live功能,那我们在这儿呢,默认的情况下呢,我们可以不动它,一般来说我们也不会动它啊,这个disable指的是针对于某些浏览器的型号,它默认值呢是Miss ie6。就是微软的IE6.0版本啊,那个浏览器对服务器端的,它的这个keep live啊是有一定问题的,所以就把它直接给禁用掉了。呃,其他的呢,像Safari也可以选一下给它给配置一下,但一般来说我们不会动这个配置选项值,你只需要记住啊,这个配置选项它不是说直接把我们服务器上所有的这个keep live直接给它关掉的,它后边取值是呃,这个呃字符串,具体的浏览器型号在官方文档里边也能找得到。
04:00
这个在upstream这个模块下找这文档怎么找呢?我再跟大家说一下,你点开这document的这个,呃,Documentation在这里边呢,往下拉。看这个moss在,呃,NGS。HTTP。NG X HD upstream在这里边儿呢,我们找这个keep life time对吧?啊,然后这个。呃,Keep keep live request,这是upstream这个模块,这是向上游服务器发起请求的,对于客户端的呢,在它这个里边。在这里边你们可以搜一下这个disable keep alive。相关的配置是吧。这儿就能看到它这个disable这里边能取的值啊,在这边也给你写清楚了,对吧,一般来说呢,我们会默认情况下它default这里边。Default直接就disable掉了,MISSI16。
05:02
让这个6.0版本的这个IE呢,在咱们这个系统上呢,不能建立超连接啊。这是它呃能配的这个第一个啊,这基本上我们不动就可以了,然后还有这个keep live request。我们看这吧。啊,这个keep level的request,嗯,这个指的是我们建立好了一个可复用的长连接啊,之后呢?呃,在当当前的这一个连接里边,我可以发起多少个并发请求啊,就是一个TP管道啊,它不是只能处理一个请求,但要知道我们现在的操作系统。啊,我们现在的这个服务器的操作系统和我们的客户机的客户端的操作系统,它的网络全都是异步的啊,并不是说同步阻,侧式的同步阻测试指的就是一个请求打过去,你得把结果给我返回来。那么我才会在这个连接上呢,再去干别的事儿啊,就是一一条路呢,只能走一个人啊,然后这个异步式的网络呢,它建立好了一次连接之后呢,可以在这个连接上呢。
06:03
去并发,去发送很多请求,以事件回调的机制来区分不同请求返回的不同的数据啊。啊,这个呃,Keep live request指的就是在单一的一个呃。可复用的keep live里边我们可以并发发起多少个请求,它的默认呢?是1000个啊。嗯嗯,这个keep level request啊,呃,默认1000个其实就已经不少了啊,有一些这个调优的这个文章里边说可以把这个k request再给它调的再大一点,你想想你的浏览器,你你正常用户的话,呃,可能有100个200个也就基本上就够了,如果要是超过了,你设置一两百之后呢,他可能嗯,再再再再重新建立一个TCP连接,或者是直接把或者他等待之前的这个结果,呃返回来之后再去复用这个连接,进入队列状态,或者新建连接都可以。对吧,没有必要这个给它设置特别特别大啊,因为它是针对于我们的客户端呃,来配置的啊,除非是你相于相当于这个上下游服务器的时候,比如我们像。
07:12
在这个嗯,Upstream里,我们去配置,像去请求上游服务器,我们可能会把它给调的稍微大一点,但这个一般来说一两百个也就够了,你像打开百度,我们发起的并发请求可能也就那么几个,那虽然说并发的请求非常多啊,很多请求它不是在同一站点内的,并不是像一个站点发起的,因为你的那个。HM页面里呢,它内连的那些连接,它都不是都它不是只是一个地址啊,它可能是好多的服务器并发去发送请求,针对一个服务器一个连接的复用。1000个是足够了啊。非常非常足够了。然后呢,再看这个,呃,Send timeout这个指的是呃,我们在呃发送数据向我们的客户端,客户端发送数据的时候,建立好了网络连接了啊。
08:04
他的两次写操作之间的间隔。也就是我建立好了keep live啊,虽然说这个keep live有它的这个自身的timeout,但是呢啊,你超过了两次,呃,没有任何操作,两次活动连接,呃,不是不叫活动连接啊,两次活动之间的这个间隔,如果要是实在是太长了,就是我服务器很长时间没有给你返回数据了。那么我们就把这个连接,呃。给它给关掉,这是send,呃,Timeout,这个send timeout和这个。呃,我们的这个系统的一些这个。具体的业务啊,它有关系,这东西它比较坑。啊,你一定要注意,你比如说我如果把这个send time out,把它的这个时间呢,设置的如果要是太短了,它可能会出问题,比如说我的系统呢,就是一个传统的项目,那我需要给客户展示报表,那他拉取一次数据就消耗的时间非常长,然后这次操作就是同步请求,也就是用户点了,比如我想要去下载这个月的数据报表,那你点了这个链接,那后台系统呢,在这玩命去给你操作呢,正在给你准备数据的时候,这个send timeout如果要超出这个时间了。
09:18
它默认值是60秒啊,这默认值60秒,如果要是超过了60秒,比如他已经呃跑了两三分钟了,大于你设置的默认值,那这个连接就给关掉了,它是强制关闭,这连接一旦要被强制关闭了之后。但数据它还能返回来吗?啊,这就返不回来了,这跟这个timeout没有关系啊,不是,这跟这keep left,它是保持连接没关系,上面的这个keep left timeout,这是保持连接时间,就是两次活动之间,两次活动之间呢,它的时间间隔。啊,这个呢,是它返回数据的时间。这个返回数据的时间你一定要注意,它千万不能比这keep live的时间要短啊,比如这keep live的时间,默认时间它是65秒,你直接在这给他记上吧。
10:12
这是65秒,它的默认时间呢是60秒。你如果把它给改成20秒了。那他把连接就只给断开了啊,如果你的系统呢,呃有这种呃复杂的这种呃计算操作啊,等待时间比较长,这不是说呃,比如说我在下载东西啊,它特别大,我需要下载好长时间,下载一个小时,这它不会断。啊,这是指的是它,呃,发送数据两次操作之间的间隔啊,就是不,它不在这个传输数据的这个状态,它是空闲状态,超过了你所配置的这个60秒,然后这个连接就会被强制关闭掉。啊,它跟这个keep live呢,本质上这俩它是有冲突的啊,Keep live是保持连接,就直接把连接给关掉。然后我们再看啊这个keep lifetime。
11:03
啊,这是强制去设置一下我这个TCP连接,你keep alive的,嗯,最长能有多长时间,它默认情况下呢,它是一个小时。啊,你一个TCP连接连过来,我也不能让你无限的去复用啊,一个小时之后你重新连一下吧,如果你真的想要用的话啊。然后还有这个keep live disable,这之前跟大家说过了,这是对于客户端啊,这个keep life的一些相关的一些配置,那我们把这个配置呢,在咱们的这个配置文件里给它打开,我们看一下。啊,所有的这个和客户端相关的配置呢,都在这HTP的这个模块下,那么刚才那几个配置呢,也都可以在这里边去啊,给它给追加进来啊,比如说这个。嗯。这啊,直接复制吧,比如说这个lifetime。这个呢,默认它是一个小时啊。我们在这记一下,这是呃,一个TCP连接送的。
12:07
十场,然后超过之后强制断开。啊,也不叫强制断开啊,让他强制失效啊,强制失效之后呢,下次再请求的时候,他不会强制把这TCP连接给它给断开啊。然后啊,是指的是强制让这个keep live的保持这个时间呢,让它失效啊,然后这个keep live timeout这个指的是,呃,这个这个活动时长时间啊超过。超过这个活动时间,超过这个时间,然后这个呃没有活动,然后会呃,让这个keep live的失效会失。
13:00
会让keep alive失效。然后这个在配置的时候呢,现在是一个参数,它可以配置两个参数,比如说在这儿给他配置65秒对吧,然后后边呢,还可以再给他。配置一个65。啊,如果只配置一个的话,我们可以看啊在这个,呃,我们返回的这个response里边呢。嗯,Response这个没有是吧,哪个有这个是不是有啊,对这个有这个response里边这是N返回的,对吧,人家这已经明显的写了server是NG,它返回的这个HTV的头。如果你只配置一个,它在这只会显示一个这个connection keep alive,如果你配置两个参数的话,你看我们重启一下,我们看看。他在下边会额外再加一个这个header的这个,呃,这个这个这个这个信息啊。我的Excel呢?
14:06
这刚才把这Excel给关了。我们连一下这个是吧,然后我们重启一下restart这个。然后再刷新,我们再看这个链接。大家看啊,这里边多了一个东西叫keep alive,然后这边的time,它有一个值叫timeout,等于65。啊,这个配置的意义在于,呃,跟HTTP的版本有关系。HTP 1.0版本的,你就得加这么一个东西啊,1.0版本的HTTP协议,它也支持这个keep alive。啊,1.1版本的呢,就不需要这个配置了,直接这connection里边加这个东西就行了,而且1.0和1.1版本的HTP协议,它在实现keep alive的时候呢,也有细节上的差异啊,尽可能的我们使用1.1版本的这个HTTP啊。这是在配置两个参数的时候,它会多一个对吧。
15:00
呃,然后再看啊。我们的配置文件啊,这是这个keep life time out,然后还有。这个send time out啊,这是两次时间间隔,我把这个文字性的解释呢,都给它写到这个文档里,然后一会儿给它,呃,我就给写到这配置文件里,一会儿再给大家粘到这个文档里啊,这send time out。呃,你这个时间呢,你不能太少了啊,这里边儿一,这里边是有坑的,它默认是60秒。这默认60秒啊,你一定得就是此处有坑,一定注意此处有坑。这个坑是啥呢?你如果有系统。
16:02
如果有这个。这种这个厚实操作。那你一定得提前预知得到,如果他已经大于60秒了。啊,Send timeout,它会强制断开连接。如有后置操作超过这个send time out。都会。嗯,强制断开连接啊,有很多老的系统啊,这个还没改造的啊,之前就碰到过这种问题,你点了之后等着等着讲道理啊,我应该等一会儿,他应该给我了,就我请求发过去,我他指的是什么呢?我请求发过去了,但结果没给我,给我返回,返回来是因为他还在准备过程当中,这不是在下载过程当中啊。注意,这是准备过程中,不是传输过程。
17:10
意思是啥呢?你看啊。这是我们的客户端发请求给我们的这个服务器,请求打过去了,这里边儿正在转圈圈。正在给你做复杂的计算,那这个等待他在返回之前,这个过程当中,我请求打过去了,我在等,等你把这个结果给我返回来,这个过程这个叫send time out啊。这如果要是超过了这个时间,它就不等了,直接把这个连接就给断了啊,这是这个呃,Send time out啊默认是60,一定要注意啊,这有坑啊,你别千万别把改太小,还有就是你的系统如果有这种后车操作的话,你要把它调的呃更这个更大一些,当然最好是做异步操作,就用户点了之后呢,然后让他等着,然后好了之后再通知他一下啊,然后然后再给他展示出来,或者再让他去独立的去下载。
18:05
再给它展示出来一个下载按钮,然后呢,再去点击啊,这样比较好一些。这是这个send time out是吧,然后我们再咱们再看啊。呃,还有这个keep live request,这个是经常被一些调优或者优化的文章提起的。但是你最好。要明确的知道这东西是干啥的是吧,它默认值就已经是1000了,这1000呢,就已经很够用了啊,你给他提升它在对于客户端来说,他也不会这个,呃,提升你整体的这个性能,因为它是针对于单一的一个这个可复用的连接,它能够同时发起的请求个数,只要你别把它调太少就可以,你给你给它设置成一,那全都给阻塞住了。对吧,啊,那你最好是给它呃,这个稍微的比如几百,或者是用它的默认值就可以了,这是一个一我们的一个这个呃。
19:05
这个。TCP,嗯,复用中,呃,可以并发接收的。请求歌手。这是keep request。呃,然后还有这个keep live disable啊,这个呢,咱就不配了啊,它默认就是Miss Miss i16啊。这就是针对于客户端的一些比较关键的,呃配置,嗯,还是那句话,配置的交给大家之后啊,你别拿过去直接给你的那个线上生产服务器,胡胡乱一顿乱操作。啊,有必要的这种调优呢,我们会在调优课里边呢,单独给大家讲,像这些呢,都其实都并不涉及到调优操作,在这给大家提到的这么一嘴,它可能会有坑,这个坑呢。呃,就是这个一定要注意啊,千万别把它时间设置的太短了啊。
20:02
呃,不好意思,大家稍微纠正一下啊,这是keep alive的Z啊,这个我少打了一个S,不然这个你重启的时候会这个出问题啊,然后这个啊,它会报错,那具体看这个报错啊,因为刚才我给他讲完之后呢,我重启了一下,就这样啊,你重启的时候,如果他要是给你报错了之后呢,你可以看一下,先看一下简单的这个报错就是。啊配你你看这个sta里边呢,他会在这里边给你简单的去把这个日志里边错误日志里边给你摘出来一部分,就是keep alive request,这行呢,他按no啊对吧,他不知道这是啥意思,那如果改成S的话,我们再试一下。啊,这就没有问题了啊,还有就是你如果要写注释的时候啊,你你你得记着啊,这加井号,如果没有这井号的话。呃,这个。他他也会报错的啊。然后呢,这就是我们对于这个客户端的一些相关的配置,那么接下来呢,我们看看在pro pass和upstream里边,对于上游服务器里的一些,呃,Keep alive的这种长链接保持的这些配置。
我来说两句