00:03
好,下边呢,我们来详细说一下这个消费耗时,再来分析它啊。这样说了啊,影响消息处理时长的主要因素是什么?是代码逻辑。而代码逻辑中可能会影响处理时长的主要呃,时常的呃。主要。是长的代码啊。呃,主要有两种,主代码主要有A代码主要有两种类型。两种类型。啊,哪两种呢?一个是CPU内部计算型代码,一个是外部IO操作型代码。这两类啊。你看我们现在分析都很细了啊。代码里边,呃,我们再给它细分。
01:09
然后还有这个是吧。Web l操作性。那么通常情况下啊,代码中如果没有复杂的递归。没有复杂的递归或者是循环。那么内部计算耗时相对于外部IO操作来说几乎可以忽略,就是它这个时间就很小很小了啊,被忽略不计了,那那也就是说这两类里边把这个忽略不计了,那剩下就是谁了,那就是他了。所以,外部IO型代码是影响消息处理市场的主要症结所在。这我们得出的结论就是,你消费耗时,我关注点应该在哪?关注点就应该在外部I操作型代码上。
02:03
当然我们再分析的再深入一些啊,给大家再深入的说一下,那有哥们说了,那什么是外部IO操作性代码呀。啊是吧,咱们咱们举个例子啊呃。干嘛啊?外部。呃,这个。啊,操作型的代码。嗯。比如说。呃,比如说。这个这个什么啊。啊,我们。啊,数据库。啊,数据库是吧,你你你你注意啊,是外部数据库,一般就是我们啊,不是我们本地的啊,是外部数据库,比如我访问我们的MYSQL是吧。你再比如说我们。读写啊,外部这个缓存。
03:03
我觉。系统,然后读读写我们的是吧。再比如说我们的这个这个这个叫什么,这是最常见的啊叫。下游,呃,系统调。瞎折腾。系统调用啊,比如说。我们double啊,我们大家知道double的这个远程调用是RPC的是吧,Double的RPC调用。比如说我们cloud。啊,我们这个对下游这个it接口的调用是吧。呃,啊,例如这个选项。Double。Are?RPC啊。远程调用。是吧?呃。这个还有谁啊?Cloud是吧,呃,这个。
04:01
就当然是这个是对谁。对啊,下游啊。对下游呃,系统的呃这个。PP。接口。对吧,一般cloud它是什么?它是itp是吧,第二个是T,它不是不是这个RPC的是吧?啊这个也写简单写一下吧,嗯,例如。呃,对,呃,远程。的。访问是吧,这个呢,例如对远程。的访问是吧?来这是什么?这就是我们说这个外部IO型代码。举例吧。
05:00
是吧?这俩啊,好说,其实嗯,老雷在这给大家再再再再说的细一些啊,我们再往深里边说一下,就关于这个下游系统的调用啊。我们需要进一步的再展开一个分析。就是我们。对于下游系统,它这个调用逻辑啊。我们需要怎么做?我们需要提前做一些梳理工作。掌握我们每个调用你这个操作啊,预期的好,你得先有个预期。你这样才能判断你这个消费逻辑。嗯,这个这个它它里边这个IO操作啊,它是不是合理。这个。所以啊,呃,就是说。
06:04
这样吧。这个这个这个。那就这样吧,继续往下写吧,就是关于这个下游啊呃,老师给大家再诶。呃,关于这个。下游。呃,系统调用。逻辑啊,我们。需要,需要怎么做,什么需要,呃,进行一个提前。处理。掌握什么?我我们要梳理他的目的是什么,是为了掌握每个。调用操作。预期的。耗时就你你得有个预期是吧,大约是多少。
07:01
这样是为了什么啊,这样做啊,呃呃。是为了?能够判断消费。逻辑就我们上游调用下游就算消费啊呃,消费逻辑中这个。IO操作等。呃,耗时。对吧。啊,这我们需要提前梳理一下啊。呃,这里边儿啊,我们其实这这这就有一个问题是吧,那那我每个操作啊,我先做一个,呃,梳理是吧,梳理我梳理重点。是什么,其实就我们通常情况下啊,我们这个消费这个这个消息堆积啊。呃,是由于什么,我们下游系统里边。两类问题导致的。
08:05
工程。呃。这个消息堆积。飞机。是由于呃。下游。系统出现了两类问题。哪两类啊,一个叫。服务异常。过吧。一类叫什么,呃,这个这个怎么怎么说呢,就是他达到了我们这个。数据库啊,这个容量的极限。嗯,那那没法简化,那就这吧,啊达到了那这个。AB。AM。呃。容量这个这个这个。
09:00
限制。啊。通常消息堆积是由于下游系统出现了服务异常或达到了这个DMS容量限制。然后它会导致什么,导致这个。消费。耗时增加。会导致消费耗时,消费耗时增加了,然后你这个消息堆积。那通常它是由于它。不要导致他这个。对吧。啊,胳膊后悔会会又又会问了啊,这咱们这个东西就说了,越说越深,越说越细了啊,不一腔是什么意思?一说到服务异常,大家马上就想到了啊,服务异常。那这里边是不是有降级啊,啊对啊,出现服务异常我们可以进行降级啊,啊就想到这个东西了,那服务异常我们马上马上就想到了500。
10:02
啊,这样的这个这个错误是吧,你注意啊,这个服务异常。它不仅仅指的是我们就出现这种代码里面出现这种错误啊,这属于低级的错误,不仅仅是这样啊。它可能还包含一些什么比较隐蔽的问题,比如说。比如说啊,也新开了一家这个互联网公司是吧,电商平台。这新新建的一个公司啊,这个经验比较少。对吧,然后呢,他对这个用户啊,他自己因为新新创建的公司,他对自己的用户量啊,他事先会有一个评估,在这个评估。出现了失误。他觉得他刚开始没没那么多人。啊,一开始运营了。项目上线了,然后运营了,咔嚓来了很多人。因为他刚开始的时候对这个用户量啊,这个评估失误了,所以他当时觉得人少,对他当时租这个弄这个网络带宽的时候啊。
11:06
子小了。他租的小了。然后平常访问的时候感觉也没啥是吧。但是到了双11,到了618对吧,这这种这种比较大的这种,呃,电商电商节是不是。那我们这个TPS就会增加,那真的是暴增。你想GPS增加了,所以。用户的什么?是不是他的2T。就真的。对不对。为什么会出现2T增大?很简单,你的网络带宽太小了。所以得出现大量的大量用户得等待。所以这是由谁?出现的引发的这种服务异常,不是你的代码的问题。
12:02
你公司租用的网络太团太小了,那你说我这时候啊,我我单纯的,你说我就提升这个,呃,消费的变化度。行不行,肯定不行。是吧,肯定是不行的,你这时候需要再再掏钱啊,把这个网络带宽给它搞大。是不是就可以了。所以这是什么?这是我们说的负异常。所以大家关于这个负异常啊。呃,服务,呃这个异常啊,并不。仅仅,呃。是系统中出。出现的,呃,这个这个这个类似呃。500啊这样的。代码。这个这个这个错误吧。而。呃,可能是更加。
13:04
隐蔽是吧的问题。是吧,刚才我说了,例如啊网络。贷款。贷款。是吧,啊,这我们说这个网啊,这个不异常啊,服务异常是什么那。行,那达到了DBMS的容量限制,我们现在说MQ的,这和DBMS有又有什么关系呢?你们也也简单写一下吧。达,达到了DBMS的容量。限制。对吧,这什么意思啊。其实是这样的。呃。然后来给大家画个图。
14:00
比如说这是我们的上游系统。这是我们的下游系统。这样啊。这个这个这个这画的图看不清。怎么?这临时画图啊,我不想用这个。那么咱们画一个吧。大家看假设啊,是这种情况。呃,这是我们的。因为这画图主要有点费时啊。嗯。上游。系统。对吧,然后呢。这是我们的。就这吧。这是我们的下游系统。是吧?商业系统线上系统啊,我们我们现在啊,这个要把他们做成异步的,现在系统都是我们这个平台都是这样的啊,应该怎么做,这样肯定我们得搞出来一个。啊,这是我们的。
15:01
Q,是吧,这样的话,上游系统和下游系统之间啊,就变成了异步的。对吧。然后下个系统,它需要访问我们的。是吧,完了我们数据库啊。给大家看一下。假设啊,我们现在还有一个电商平台啊,电商平台我们这个业务侧啊,这边我们业务侧啊,他需要向我们的数据库里边呢,呃,写入一条数据。那当然你你这个要发请求的,这请求肯定是写到我们MQ里边的异步处理吗。然后我们信号系统会把这个消息还是以消息的形式,把这个请求写到他了,然后会把这个消息我读过来。
16:03
读过来以后。要处理处理结果,他肯定要调用什么,调用这个我们这个IO啊,然后处理它是吧,往这边写。提数据写完了给出一个响应。是吧,啊,这边处理完了会有一个响应。是吧?那么整个这个过程。大家想一下啊,如果说我们正常情况啊,就是我们这个请求,我把这个请求发出一个请求。从发出请求开始啊呃,发出什么请求发出我我获取。我获取这个消息的请求,到我处理完这个消息,整个这是一个TPS。如果这个TPS啊,我耗时是呃一一毫秒吧,假设一毫秒。在正常情况下,平常是没问题的啊。就是如果说我们现在啊公司啊,我们这个业务侧干嘛呢,业务侧要进行这个大型的促销活动。
17:03
是吧,我们又来了双11了,我们来了618了。那这时候我们肯定访问量会大增,访问量大增,所以它里边消息就会大增。消息大增,你这边就要把消息读过来。读过来以后,然后给他里边写数据嘛,我们刚才说写数据。如果说啊,我们这个DMS它的容量比较小。这个这个数据量太大了,往里边写数据,写着写着还达到我们这个数据库的简介值,就不用写满了。只要你到了,他的警戒值了。那么这个DBMS,它的被这个请求,它的处理的这个速度。就急剧下降。E就下来。你这边处理速度下来了,这边有大量的进来数据进来请求。所以所以这里面就会形成问题。
18:03
我们这边马上。呃,我们这个这个这个我们的业务侧啊,我们的业务侧我们上系统马上就能感受到什么,你给我的响应速度太慢。那怎么办?你想想,那我这时候我我这个增加啊,我这个增加线程,增加什么处理这个MQ的处理消息的线程,我增加线程行不行。不行,你增加线程,它的容量已经到了。所以你这时候要做的是什么?你加大你升级你的数据库。是不是你生命的数据库?所以这是什么?这是达到了DMS容量的限制。它也会引发。啊,就是我们这个消费耗时增加。对吧,达到这个呃限制啊。嗯。
19:01
其也会引发。引发这个。小。呃,消息,呃。消费。耗时。增加。对吧。啊,这是我们把这个消费耗时啊,呃,我可是详细的给大家进行了一个分析是吧,我们再看一下啊,就是影响我们的消费耗时的啊,这主要就是代码。代码里边营养消费耗时的这两类代码,CPU内部计算性代码和IO型外部IO型代码,而这两类代码里边我们说它。啊,和他比可以忽略不计,就是你如果没有复杂的递归和循环的话,也就是说我们主要矛盾集中在哪,主要矛盾集中在外部IO操作。就这这这种就外部IO操作,而外部IO操作里边我们又说了。它里边实际上会。
20:02
具体这个L操作在他这啊下系统里边这个不异常。和达到了DBMS容量的限制。这都是什么,都是属于。我们IO操作,因为我们IO操作里面有有这个下游系统调用啊,这个肯定是IO的对吧。那引发IO调用异常,那有这两种情况啊,服务于场合达到了DBMS说限制,这是最常见的。对吧。所以这种问题怎么解决,就不仅仅是我们把这个。就是就是就是并发度给他提高就可以解决的了。对吧,OK,这我们关于这个消费耗时啊,它的一个深入的分析。
我来说两句