00:00
那前面我们zip界面已经能收到我们所有服务的追踪的数据,那接下来我们来看一下这个界面里边的这些数据该怎么看,怎么分析,上一节课呢,由于我们各个服务来引的依赖有问题,我在这儿呢,把整个全部刷新了一下,然后呢,重启了所有的服务,这样呢,我们现在所有的服务全部呢都有了链路追踪功能,大家也在这儿刷新来重启一下,我现在呢,再把我们整个项目的流程跑一遍,我们来看一下效果好来先来刷新,这是来访问首页,然后我们从首页里边将每一个请求我们都来执行一遍,来访问手机。好,这是分类检索,来再点进去,这是详情,详情还要查我们秒杀的相关信息,只不过现在没有,可以加入购物车,然后我们去来进行结算,结算我们需要登录,我们在这儿再来点一个登录,好,我们来点击微博,我现在登录进来,我们来重新来进行一个结算,购物车里边呢,有非常多的商品,我们选了123,我们选上四个商品,好,完了点一个去结算,那就来到我们的结算确认认页,这个确认页里边呢,还能选我们的收货地址。
01:09
包括我们接下来点击提交订单,那就去结算。我们订单提交以后呢,它的商品有一个没有库存了,那么就可以去购物车里边来修改一下,我们就不要这个商品了,我们直接来到我们的这个商城首页去把这个购物车里边去来修改一下。那最后一个填的这个商品呢,他说没有库存了,好我们来点一个去结算,那么去提交订单,订单在这提交成功以后呢,我们来点击支付宝,就会进入我们整个的支付,那支付成功就会回调过来,好,我们现在呢,把整个流程走了一遍,来到我们zip里边,那先来刷新zip界面,那这个界面呢,首先我们可以按照每一个服务名来查,我们现在调用了好多服务,所以这一块呢就会有,然后呢,我们也可以按照SPA的名字来查,包括我们也可以按照远程服务是什么来查,但查完以后呢,这就有数据了,咱们按照时间,那么这15分钟以内的,一小时以内的,还是们当天的,还是七天以内的,我们可以在这来查。
02:07
包括我们可以根据我们这个标签annoation查询,就是我们这个anno里边呢,比如我们标注了你是访问哪个路径的之类的,相当于按照条件来查,那特别用的多呢,就是这个持续时间,然后请求的这个时间如果太长了,那可能就会有问题,还有一次查几个,比如我来写一个五个或者十个,然后我们这块排序的规则是按照消耗的时间长短排序,而们这个请求开始的这个时间排序。还是我们整个服务的占比排序,那现在默认都是使用耗时排序,比如现在来做一个查找所有,那查所有里边呢有非常多的请求,我们发现呢,有一个请求非常慢,花费了60.419秒,因为我们现在整个网关我们都加入进去,所以我们现在看每个请求的信息都是什么,60.419秒,32SPAN s,意思就是我们在这个期间只要有32个span,那就是我们发了32次请求来点进来,那每一次请求都是什么,我们完全可以在这来参照给我们来看一下,在这呢有一个get,第一次的这个get是来访问首页的,然后我们来转发到网关这一块get,然后还有一个client start,就是我们这个开始时间,因我们这个不是服务转发,我们浏览器呢,给他来发的,所以开始时间呢,现在他没处理,没有标志,呃,Client finish,只要我们看见finish,那说明我们呢,把这个请求处理完了,处理完那。
03:36
这两个一减307456毫秒,相当于我们网关处理了一个首页请求,花费了307456毫秒,那这个首页请求里边我们又做了什么?来看网关才这除了处理这个请求外,网关处理了非常多的请求,接下来我们最慢的请求我们在下边呢,这都有,还有一个308586。那这个呢,是一个父子关系,就是我们这个请求下甩的这些,相当于我们发的第一个请求叫post,方式呢,Submit order,我们提交订单的请求,这个请求呢,时间非常慢,然后呢,我们来看这个请求里边呢,又有非常多的请求,我们可以来看一下这是什么,首先我们来提交订单的时候,我们是。
04:19
从订单服务发起的,所以这一块的标签是古立迈尔欧的,然后呢,这个提交订单总个我们合并起来花费了308585毫秒,而这一块的总统计60.419,其实是由于我们在这儿相当于我们网关转发了60多次请求,所以我们这个307,然后呢,乘以21,最终得到的这个60秒的结果,然后现在来看一下我们的第一个这个订单提交,那是这样,订单提交里边做了什么,相当于第一个库存信息,这有一个where where in fair,我们相当于来获取每一个仓库的这个信息,这块呢,我们看到时间这一块呢,就会有统计,而且仓库这一块我们能看到它的这个调用是这样子的,我们这个请求呢,是获取运费的,怎们来发了这个请求,注意这有几个标志,CS client start,我们之前说过AB2个服务要调,然后呢,A要调B的时候,A呢给B开始发一个远程调用。首先。
05:19
第一个标志就叫CS client start,我A相当于一个客户端,我想要调用你了,这有一个叫相对时间,相对时间呢,我就是在27194这个毫秒我才发起对你的调用,那相当于27194毫秒之前,那是A自己处理业务逻辑,然后呢,他在27194毫秒发起调用,调用了以后呢,如果到达BB呢,应该是我们说的SS,就是server receive SR,那么现在这个server receive呢,没有这个receive,这呢有一个叫server start ss,它新的名字呢叫SS,那这个SS呢,现在就是在30.167毫秒,它是一个相对时间,相当于我们这个B服务server,我们这个服务端呢,启动是在这个30.167毫秒那启动的,那么这两个一减,我们就算出了,其实AB2个服务之间的网络传输大概花了三毫秒,所以我们这个B服务呢,现在这个SS已经启动过来了啊SS。
06:19
是在这,然后呢B就处理,那B处理完了以后呢,就会有一个sf server finish它自己处理完了,处理完呢是相对时间是46.766,那处理完了46.766这两个一减,SF跟SS2个一减,就是我们B服务呢,处理了多久,处理呢我们花了16毫秒左右,然后呢,我们16毫秒处理完了以后,我们在46.766毫秒结束,然后呢,他要把请求整出去,那整出去以后呢,我们A就会收到,A收到呢,它相当于这个远程调用就结束了,它就叫finish a呢相当于一个客户端,它已经finish了,所以我们看finish的时间是47.044毫秒,也就是说我们B做完了是46.766,然后呢,它收成功了,是47.044,两个一减大概0.3毫秒的时间,那就是我们B服务往回传数据的这个时间,然后发现网络交互其实还是非常快的。
07:19
所以我们提交订单的第一个请求,查库存的详细信息,那就在这,包括我们展现各种tra ID SPA ID parent ID,在这我们也都能看到,这是我们分析到了第一个请求,第一个请求呢是来获取库存,然后呢,哎,不是库存是获取运费,而且获取运费呢,由于我们有一个远程调用,那刚才也在这儿分析了,这个远程调用呢,花费了多久呢?就是远程调用的处理是start到finish,现在花费了16毫秒,他们花费呢就在这儿,我们先来查库存,库存呢又会调用一个远程的会员服务查会员信息,所以们看库存呢,又调用会员服务查我们这个收货地址来算价的,那这一块的所有信息也能通过那种方式来得到一个计算,那现在可乐的端就是我们的库存服务啊库存服务,然后呢,Server端就是我们的会员服务,他们的起始时间库存是32.360,然后呢,我们这个server的start时间是36点。
08:19
28228这两个一减四毫秒就是请求发出去的时间,然后呢,我们服务端处理M这一块server start跟finish这两个一处理呢,我们发现它这一块处理呢,花了大概44减去个36,处理呢大概花了八毫秒左右的时间,处理完了以后呢,我们就要返回,所以我们接下来member的finish到我们的这个FINISH2个一减消耗的时间,其实默认应该是c finish比serve finish要大的。但这由于统计的快慢问题,我们发现这一块还居然优先收到了我们这一块的数据。发现了一个负毫秒值,但这个无所谓,说明我们这个网络传输的很快,它这个统计信息的问题。
09:04
然后我们这一块的调用我们就看到了,然后接下来我们第一个查邮费,计算邮费就知道了,第二个我们要提交订单,我们还要获取到我们当前购物车里边的数据,我们之前写的功能,所以整个购物车服务的调用花费了46.058毫秒,这些毫秒的时间都花费在哪了?我们看到这块呢,有所有的这个提示,然后呢,我们就应该是这样,我把这个购物车一合并,这个合并呢,那就在这儿结束,我们看这个层级关系在这结束,因为买了三个商品,所以我们这个购物车呢,我们来看它的处理时间,在这一块呢,大家就可以来计算,算出哪个网络时间,咱们来看在购物车里边三个商品,购物车呢要去调用我们商品服务,查每一个商品最新的价格,所以每一个商品的最新价格的查询消耗了多久,我们能看到这是九毫秒,六毫秒,八毫秒,这这个整个时间,所以这三个服务的调用时间,然后呢,完了以后就是购物车的处理时间,购物车处理完整。
10:04
二返回用了46.058毫秒,那接下来我们的这个订单提交,那这一块就结了,我们先来算运费,再来拿每一个商品的价格,然后在这儿我们又来查每一个商品的puu信息,每次查询花费了多长时间,这也都有,我们都看到了,这块时间也是在这儿OK的,没问题的,我们查到了SQ信息,那查完了以后,接下来我们又去在这库存,我能不能看到这是一个货锁库存,我们看到了锁库存,锁库存呢?那就是订单服务,我们所有商品要提交订单了,我们一定要让他锁库存,那锁库存的这个时间大家也可以来换算,这块的时间都是一个相对时间,客户端我们订单服务发送呢是210,然后呢到我们server端启动是213,两个呢,就是三毫秒,然后呢,整个这个传输,那server完成到客户端完成,那就是一个0.6毫秒这个传输时间,那也挺快的好,那么这一块呢,就是所有的服务,那么这个订单这块提交完。
11:04
那我们能看到他把所有远程服务调完了,订单都创建完了以后,那还有一微秒的这些时间,这个时间呢,首先publish publish是一个什么?是一个给rabbit MQ发送消息的,所以他在这也能监听到我们发消息,而且发消息呢,这个start finish你能看到只两个意见,只花了一微秒,现在于给re MQ发消息,一微秒的时间挺快的,然后再来,那MQ呢,既然是发消息,我们来点下边,我们呢发了这么三个消息,那就在这儿,诶每一个呢是一个一微秒的时间,因为锁库存要锁三个库存,所以呢,我们发了三个锁库存的消息,这个消息呢,其实是自动解锁库存的,而这关这些消息我们可以看到在这儿这一微秒的publish,整个调用关系是这样子的。我们最终的调用全在这古励mail well这个库存,然后我们来看上边,上边呢,如果我们看库存服务,我们还能看到我们消息都发了什么,我们试试给re MQ,哪个交换机,哪个队列用哪个路由件发的消息,而且这个我们都知道是这个队列能收到了,所以它监控到了,而且呢,这一块大家注意,这叫consumer,相当于我们消息都已经收到了,回来的时间了,这个回来的时间呢,我们能看到相对时间叫60秒,为什么现在变成了60秒,那原因就在这儿。
12:30
因为我们库存一整以后,我们订单一创建以后,们先发送的消息是这个来看订单,这个是producer来发,先发送的是一个我们订单的自动释放自动关单功能,因为要一分钟的自动关单,我们现在测试环境是一分钟自动关单,所以呢,在一分钟以后,我们consumer收到了订单的释放消息,所以订单的释放消息收了以后呢,他就处理订单一释放以后,我们又触发主动的释放库存,这都是我们写的逻辑,我们之前写的,所以我们能通过整个链路看到我们之前的逻辑也都没问题。
13:07
而这一块的这个时间你看起来很慢,是60多秒,我们来看一下这个订单服务。订单服务来查这一个小时内的这个订单服务,我们看着他时间很长,但是我们因为有关单的存在,所以我们得等上一分钟去来关单,所以这块呢很长,他也统计到了我们这个rabbit MQ收发消息的信息,所以你会发现这个消息发出去到收回来它都能记录,这是一整条链路。这是功能是非常强大的,那这是我们的这一块,而且如果我们出现错误,在这儿呢也能统计到,我们就以一个统计为例,剩下的看法都是一模一样,我们看到这个20弹,那就是发生了20次调用,来点进来看我们这个是什么,我点一个get,这呢就是请求开始了突出,那就是它真正的请求们想要去订单的确认页,然后呢,这个确认页里边我接下来要做什么,每一个请求,而且大家注意,如果我们有异步的话,我们在这儿还有一个标识,这两个请求鼓励麦order,这个请求呢是一个异步的,这呢也是一个异步的,因为我们做了异步编排,我们异步呢,查会员的这些地址信息,我们在这儿呢都能看到每一个请求一步干了啥,我们来合起来,这个一合起来,你就知道这两个异步干了啥,要想知道干了啥,把它展开,包括这两个异步完了以后,们这个异步又开始了,所以们这个异步干了什么,我们也可以来展开,默认呢是展开的,我们给它合并起来,所以我们的大请求。
14:37
突出就是123个一步,我们可以确认一下来到我们这个订单的这一块去我们这个。结算的确认页来看一下我们订单的controller,订单的controller to try to try呢,我们调了一个control order点进来,他说呢,有几个异步,到底是几个呢?我们来看一下一个异步,两个异步,然后呢,这异步完了以后还有一个异步,三个异步,三个异步呢,妥了,正好在在他这儿统计了三个一步,第一个异步是什么点进来这一块呢,是一个大统计信息,没有再在里边来点进来。第一个异步呢,是查会员的地址信息,来看一下我们调用链是不是这样子的,第一个异步查收货地址列表,没问没问题,然后呢,第二个异步来看一下。
15:26
这是第一个异步,第二个异步,这两个异步呢,由于它同时开始,所以这是并发执行的,我们来看第二个异步,它呢是查我们当前的购物车里边的数据信息,我们来看这是第一个第二个查询购物车的选中项,看到这两个异步呢,是同时执行的,而且呢,当购物车的选中项执行完了以后,又有一个异步,这个异步呢也被监控到了来看。这个购物车的选中以后呢,在他结束以后,紧接着来了一个异布,这个异布是干嘛的,是来查库存的,查我们当前这个商品呢是不有库存的,所以我们能看到这个异步,来点进来这个统计信息肯定不行,点开它真实的实现点进来,诶它是来查hands stock是否有库存的,所以我们即使是异步,我们在这也能监控到,包括如果我们是错误,我们如果出现了哪些错误,比如我们将库存系统模拟宕机,库存系统的宕机我在这来停一下stop,模拟宕机以后呢,我们来发送上几个请求,我们来到古力麦尔我们的商城这个页面,我们来看购物车,购物车里边呢,这个商品数据,因为我们要查库存,但是我们库存呢,现在都没有,我点一个去结算,去这个结算页呢,我们说这个库存服务有异常,所以这些东西大家要做好容错,但我们这块有了以后,来看我们的zip点击查找,那们现在来查,所有来点查找,我们会发现即使有问题。
16:50
这块呢,也有113毫秒这个红颜色,那就是出问题了,哪一块出问题在这儿都给你标志住了,我们网关突出的时候,这个出问题,问题的原因在这也有,原因呢,是我们这个库存服务超时,包括你能看到完整的信息拖出来的,我们有几个一步一步一步都当值都执行的时候,但是这一块出了问题点进来,那么这一块呢,就是post发送一个请求,是来找库存的,所以们这儿呢就出现了问题,那最终的问题呢就在这儿,所以我们所有的这个异常,我们也在这个调用链里边全部能监控到,那有了这些分析信息,我们就是通过整个这个调用链再来结合我们来整个熔断保护我们系统啊,这个呢,相当于来查找我们系统里边的一些不稳定因素,比如我就来查所有的大鱼。
17:40
一秒的这个响应时间的,好,我来点一个查找,这是持续时间,不是响应时间,持续时间比如我们的那个订单提交服务,订单一提交以后,我们还发了re MQ自动解锁订单,一分钟以后呢,解锁订单,所以持续时间呢,会超长60多秒。而我们这个呢,可以来查找到我们持续时间非常长的一个请求,这个请求持续时间结束了,相当于我们这个业务才算是完整结束了,就是我们整个请求的业务就结束了,那最终我们就来结合这个,加上那在这里边找到不稳定的因素,在center里边该限流限流,该降级降级,这是我们zip的这个界面该怎么看,还有我们这一块,我们在这呢,是查找这些调用链的,我们这儿还有一个依赖,依赖呢能画出我们整个架构的依赖图谱,这个依赖图谱的顺序是这样子的,我们这个箭头呢,能看到流向哪,那就代表网络请求流向哪,我们从网关开始留给订单,然后呢,订单再去调用我们这个库存啊等等等,每一个呢,点进去我们都可以看到,我们来点网关,网关呢它它依赖这么多,所谓的依赖就是它的下游服务,然后呢,我们在这儿,比如我来点订单,订单呢,他说他依赖这些,那就是订单会下游调用这些,而订单的上游服务。
18:59
不是这些上游呢,调用这些,而且呢,每一个服务点进来,它都有统计,比如我们现在调了几个,诶错误了几个,这都有数据,那就是订单,而且看这个箭头是订单调购物车调了六个,错误零个,这就是我们整个头部信息,那有了zip,我们其实就很方便的能找到我们不稳定的服务,以及能看到我们整个依赖的架构图谱。
19:24
另外大家也可以尝试一下它的这个Les UI长得呢更加漂亮,但是呢,功能跟我们以前的东西也一样,更加友好,来点一个查询,让们所有的服务的调用信息在这里都有,包括在这排序也很方便,来点进一个也能看到它的整个动态信息,跟我们以前所有的分析都一样,只不过它的这一块可视化界面,比如我来点开它这一块打标签的时间,我们在这来点一下,我们就可以看到这个时间,这个图呢,那我们就能更快的观察到我们这个client start到server start中间这一部分呢是一个网络传输,那这一块也是个网络传输,这一块呢是一个我们的调用过程。
20:03
那有了它呢,就看起来更友好了,包括我们还可以看我们整个依赖的这个图,比如我来点一个查询,我能看到这个图里边给我们统计了,相当于每一个数据都怎么流向过去的,包括数据如果有错误的话,图里边也有红点的显示,诶那在这如果不想用这个Les UI了,可以这样F12把它这个控制台呢,在这有一个cookies cookies里边呢,保存了一个Les处,咱把它删掉,删掉以后呢,ZP关掉,来重新访问一下192168ZIP。现在呢,又回到原生的UI,大家也可以来尝试一下这个Les UI。
我来说两句