00:02
我们完成了N这个词的配置实例,包括反向代理、负载均衡、动静分离以及高可用的矩群配置。那下面我们来讲一下NEX它的原理,咱们主要说一下NEX它究竟是怎么样进行执行的,咱们把原理给大家来做个说明。那首先呢,看一下我文档中这张图,这张图中呢,就标出了N,这个是一个最基本的一个执行过程,在里边涉及到有两部分,一个叫master,一个叫worker。那这张图我给大家直接截到我们的比中来,然后给大家详细分析一下N这子的原理到底是怎么样的。就这里边有一个叫master,还有一个叫worker。
01:01
那下面咱们来详细分析一下NEX里边的一个原理,那咱看一下就是首先呢,我们在操作中,大家看master什么意思。是不是有主的意思,或者说有管理员意思,Worker什么意思?是不是有工人的意思,也就是说啊,在这个N这个词他请之后,在我们的Linux系统中,其实是有两个进程的,一个进程叫master,一个叫worker,那咱们来看一下。比如现在N这个我们已经启动了,咱们来看一下它的进程。然后大家看里边在N中呢,有这么两个进程,一个叫master,一个叫worker,这各位应该能看到,而这两进程它就代表摁这个请之后有这么两部分,那两份钟咱看到master李伟就是一个管理员,Worker就是一个实际的宫女。
02:08
也就是说呢,当我们按这个请之后呢,Master将于是个领导,那领导呢,一般他不做具体工作,他是来干什么的,一般是不,他要分为任务,所以他把任务要分给到他手下的不同的人,而他手下的人是什么,就叫worker。当然这里边我们可以有很多worker,我们这里边是请了一个worker,他里边可以有多个,也就是说master是一个管理员领导他把任务分给他手下的不同的worker worker接到这个事情来做这个具体的任务,这是他一个最基本的两部分,一个master,一个worker。然后咱们再继续往下来看,就是我们下面这张图。在这张图中呢,就标出了这worker,具体它是该怎么进行工作的,我在笔中写下第一个master worker,第二个worker。
03:06
它是如何进行工作的?里边这张图,因为大家看到在这张图中呢,我们清晰的就是标注出来了这么一个特点。往下给大家解一下,就是这张图。啊,这个图啊,我先给它先去掉,就直接看它了,然后在这张图中呢,我们看到当这个就是CLA,也就是说我们客户端发送一个请求,请求到in中,首先要到这个master,就是管理员,或者说我们这个领导。然后管理员得到我这个请之后,把请求是不是要分担给这个worker,让worker做他的具体事情了,但是我一个管理员下面可能会有很多的worker,那这worker他是该怎么去得到这个任务的呢?这里边啊用到一种机制,什么机制第一个。
04:08
不是平均分配,也不是轮询的方式,而是什么?大家看这个词。叫什么是一种叫争抢的这种机制,也就是说现在。它就相当于啊。发送请求,然后现在我们就有新的粮食,然后管理员对所有人说,我们现在有粮食了,大家赶紧过来抢,然后这里边所有worker是不是要去争抢这么一个粮食,争抢之后来做它的具体事情。当然这个worker咱们也提到N这个词呢,本身是不直接支持Java的,Java操作还需要依赖于我们的Tom he,所以worker他可能还要做一些,就是咱们之前说那个请求转发或者反向代理,通过Tom hatt查数据库,得到我们最终结果。所以这个worker用到的是争抢的机制,而抢到这个任务,然后调用to t,或者用反向代理实现我们的操作,这个就是N这个中一个大体上的这么一种机制。
05:09
咱们再来重复一遍,首先我们发送请求先到摁这个中的master,相当于一个管理员,管理员得到任务之后,把任务就是给下面的worker worker通过争抢机制得到这个任务,然后他可以进行反向代理,用Tom hat完成我们具体操作这个就是in这的一个最基本的一个流程,里边涉及到就是master和worker之间的一个关系,也就是说呢,我们在启动N这个的时候,其实可以有一个master,但是可以有多个worker,只是咱们之前只是一个worker。当然我这里边可以有多个worker,这个是他一个最基本的这么一种机制。还是大家考虑就是现在啊,咱这种机制,也就说里边我写一下第三个。
06:03
一个master。和多个worker。它就是这么来设计,有哪些好处呢?那咱来分析一下,一个master多worker这种机制,它到底有什么样的好处。当然它的好处啊,应该说是有很多的好处,首先呢,我们先来说它的第一个好处。第一个好处是什么呢?咱们之前啊,曾经说一个命令,我们可以使用一个命令,叫做N这个杠s reload。这一命令各位应该知道它是什么,是一种叫热加载的部署方式,或者说热部署方式,也就是说啊,你不需要重新启动,把那个停掉就可以让NEX可以直接把修改完的配置进行生效,这叫热部署。而我们用一个matter多个worker方式就利于我们做肉鼠的方式。
07:13
因为大家知道在我们的真正的线上运营项目N,这个是肯定不能停止的,他要停止的话会有很多问题,所以咱们用这种方式就可以有它的好处,那好处是什么?比如我现在咱以这个为例,比如说我们现在啊,有这么四个worker。当前一个任务,比如说被第一个worker给他,就是争抢到了,他是不是要继续做这个事情,那比如我现在我用NEX-X reload把我这NEX重新进行了加载,那这个时候按照我们的机制,第一个worker它不做其他的变化,还是继续处理它的事情,但是除了第一个work之外,大家看下面是不是还有3WORKER,那这三干什么,他就把N纯净加载。
08:00
如果说你有一个新的请求,那这个争抢的时候,第一个worker他就不参与争抢,因为它里边有任务,那其他3WORK是不是进行争抢,他们争抢的时候已经是我重新加载之后那个内容,然后他们得到这个任务进行操作,而第一个ER在他执行之后,它里边也要重新进行加载,然后得到我最新这个配置,所以这个就是离我们做这个N这的热部署操作。这个是它的一个机制。就是利于ND。进行热部署操作,这个是一个master多个worker的第一个好处,各位给他记住。而除了它之外,还有第二个好处,就是里边的这句话其实跟第一个比较类似,这个好处是什么呢?这里写到。对于每个worker,它们都是一个什么?是个独立的进程,也就是说我现在这张图上,第一个worker,第2WORKER,第三个,第四个,他们都是互相独立的,每个worker就是独立占用一个进程。
09:12
那这么做的好处是什么呢?第一个因为是独立的,所以肯定不需要加锁,方便咱操作,也可以节省我们的资源,如果说你加锁之后肯定会造成不必要的开销,这是第一个好处。另外就是。因为他们是独立的进程,当你有一个进程退出之后,那其他进行是不还可以继续进行执行,比如说第一个worker退出的,其三可还可以继续增抢,我第二个退出了,另外两个还可以继续增抢,这样的好处就是能够保证咱们的服务不会中断,就算你有worker挂掉了,它依然可以正常运行,这是它有好处,而这么做也可以降低我们服务器上的风险。如果说你没有这种机制,那会造成你的请求可能就中断了,这是它的第二个好处,这跟第一个比较类似,我写一下。
10:07
每个worker。是一个独立的一个进程。如果说有其中的一个worker。一个worker它出现了问题,那其他的worker,因为他们是独立的,它还可以继续进行这个争抢。然后实现我们这个请求的一个过程,它就不会造成我服务的这么一个中断,这个是它的这么一个好处,这是它的第二个就是。是独立的进程,不会造成负的中断,就算有氢的一个化掉了,其他的可以继续竞争强,另外还有第三个,大家看第三个咱说什么呢?就是我们现在啊,我们这里边一个master中是不是有很多worker,那咱们到底是设置多少worker才合适呢?首先这个worker肯定不是随便设置的。
11:13
我写第四个。我们要设置。多少个worker?才是最合适的。那咱们看一下这个该怎么设置,我这里边写了这么一句话,首先大家看第一个啊,这里写到N,这呢跟red类似,都是采用什么叫IO多路复用机制,也就是这种机制啊,它的好处就是就咱们说的每个worker都是容为进程,每个进程只有一个主线程,它采用这种方式进行处理,而这样的话可以使它的性能掰到一个最佳的限度。但是呢,有一个特点,咱们不管是indexx和redus,我们是不是都在Linux系统中进行操作的,当然咱们可以把它是不是也能装到Windows系统中是可以的,但是如果说你装到了Windows中,它就没有了这种机制。
12:07
没有这种。IO的多路复用机制,也就是说在Windows中呢,它的功能虽然是有,但是它并不能把它的效能掰到最大的限度,所以说咱们一般来讲ndex radius基本上都是安装到我们的linu系统中,能让它的性能掰到最大的限度。这是一个特点,而到底要设置几个,这里写到。我们每个沃克线程都可以把一个CPU性能掰到极致,所以说啊,一般来讲,涡克数和服务器的CPU数量一般是最为适宜的。也就是说呢,比如我现在是一个四核的服务器,四核CPU,那我们就设置四个涡口,如果设个八核的,我就设置一个八个work口,这是一个特点,不要说你是八核的,或者设设置成四个work口,那肯定造成你某些地方没有充分利用。如果说我是。
13:06
八个CPU我设成16个涡壳,那可能造成它的切换,它也不一定能发挥到最大性能,所以说我们就是让沃克数量和CPU的数量相等是最合适的,这是它的一种设置的方式。各位把这个给他要记住,就是该怎么进行这么一个设置。所以说现在咱们就把这个N它的一个最基本的原理给大家,我们就做了一个介绍,所以各位知道它的原理到底是怎么样的。我们就做了一个说明。然后原理说完之后呢,咱们再看最后一个,就是我们的worker的连接数到底是多少。就是连接数worker connection,那这个问题呢,我们主要给大家举这么两个例子,我来说一下。
14:04
这两个例子到底都是什么?我们写上第五个。首先我们来看第一个,咱一张图上。那大家考虑啊,比如我现在。我发送一个请求,那大家考虑,比如说我现在worker,它是占用了里边的几个连接数呢?我再说一遍,发送一个请求,占用了worker的几个连接数。这是我们要说的第一个问题。我写到这个位置。第一个问题。我们。发送一个请求,那它占用了worker的几个连接数?这个大家考虑一下,那我们的答案应该是什么?是什么?我强调一下,它的答案有两个,要么是两个,要么是四个,那为什么是两个或者四个呢?我给大家详细解释一下这个问题,为什么要么是两个,要么是四个?首先我们看第一个。
15:13
如果说我现在啊发送一个请求,比如说我们就是想访问一些静态资源,那worker通过nexx是不是能指向我静态资源服务器,它把请求是不是返回了,这样的话占用的连接数是不是就是两个,这是第一种情况,但是我们的worker呢,因为本身不支持Java,如果说比如说你想查数据库,得到数据库中的信息,它是不是需要用到tomcat,所以他要发一个请求到Tom。To害的把请伏再给它返回,那大家看这种情况下占用的是不是就是四个连接数,也就是说你返回静态资源两个连接数,当你要用tomcad访问数据库,它就需要占用四个连接数,所以咱们的答案就是两个或者四个,看你的是一场景。
16:06
这个是我们的一个最基本的答案。大家把这个问题知道。然后这个说完之后,我们再来看下面这么一道问题,我来写上。第二个这个问题是什么呢?其实是在第一个基础之上,给大家换一种方式来描述这个问题,那问题是什么?我来写一下,比如说现在我们在这个N中。N这个里边有一个master。然后有这么四个窝口,注意是四个窝口,而就是每个窝口它支持的最大的连接数,比如说是1024,那现在我想知道我目前这个worker它支持的最大的并发数是多少?
17:01
这时我们要得到一个问题,支持的最大并发数是多少?那这个问题我们该怎么去算呢?给大家来做一个详细的分析。首先第一个什么叫知识最大的并发数呢?也就说我们要知道我这worker能承受多少个请求,这是我们要做的事情。那现在我们说到worker,它目前就是占用的连接数要么是两个,要么是不是就四个,那这个问题咱该怎么算呢?我们来算一下啊,首先第一个咱要得到就是我们这个worker。它的最大支持的连接数。这个是不是得到,那这怎么算。咱刚才说到我们有几个窝口。是不是有四个,然后每个worker支持多少连接数,是不是1024,所以我写一个四乘以1024,这个得到的是不是就是worker的最大连接数,这是一个,然后咱要得到每个worker就是它这个worker知的最大并发,那怎么做我们就可以用这个值。
18:19
怎么样,要么除以二,要么除以四,是不是能得到我们的结果,就是除以二或者除以四,这是我们最终可以得到的这么一个结果。这个各位要就能给他知道,所以里边的值。1024或者2048,这是它支持的最大连接数,但是这个值呢,各位不要给它死记,我们需要计量是它里边的一个公式。这公式我在这里边应该已经总结出来了,我把这段话给大家复制过来。就是这段话。
19:01
咱们看这个支持的最大并发数该怎么算,这里写到第一种情况,如果说你是普通的静态访问,最大并发数是这个值除以二。那什么意思,咱看这句话啊。首先第一个worker connection。这是什么?就是你每个worker的知识的最大连接数,就是1024。然后这个worker process,就是你有几个worker,咱是不是有四个用它除以二,如果说你是作为反向代理,那咱们用这个值是除以四,这就是我们一个计算最大并发的这么一个基本的公式,咱们通过这个公式就能得到我们最终的这么一个数据。所以说咱把这个我们就做了一个说明,也就是我笔记中写的这么一部分。啊,所以这部分就是关于N这个一个最基本的原理,在原理中呢,最后总结变要求各位主要就是这么几个,第一个N这采用master worker的方式进行这个过程的,我们有一个master可以有多个worker,然后master是管理者,Worker是实际工作者,Worker采用争抢式的方式进行这个任务的工作的。
20:25
另外它有里边几个好处,第一个领域宙部署,第二个进程独立的,不会造成服务中断,下一个就是我们可以根据CPU的数量设置worker数量。另外就是。发送请求的时候,每个worker占用了是两个或者四个的边界数,最后一个问题就是worker知识的最大并发是多少?我们有这个公式,用你的沃克的最大连接数乘以沃克数量除以二或者除以四,如果你是普通的静态资源除以二,如果你要做反向代理,那我们就除四,这样的话最终能得到它的最大的并发数。
21:13
所以咱们这样啊,就把这个N这个词一个最基本的原理我们就说完了,各位把这原理给他要记住。
我来说两句