UAVStack中的调用链是什么?

技术UAVStack中的调用链是什么本篇内容主要讲解“UAVStack中的调用链是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“UAVStack中的调用链是什么”吧!前言

本文主要讲解“UAVStack中的调用链是什么”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖学会“UAVStack中的呼叫链是什么”!

00-1010服务器端信息收集

UAVStack中的调用链是什么

服务器端信息收集的整体流程如下图所示。通过在应用程序容器(tomcat等)的启动过程中嵌入一个切点。),请求可以在应用程序逻辑执行前后被劫持。

逻辑执行前:分析请求中的调用链信息,初始化调用链上下文;

应用程序执行后:分析响应中的调用链信息,将该请求中处理的所有调用链信息输出到日志文件中。

UAVStack中的调用链是什么

切点植入

UAVStack中的调用链是什么

在介绍切入点之前,我们应该对servlet容器处理请求的一般过程有一个全面的了解(本文以tomcat为例)。

UAVStack中的调用链是什么

图片来自互联网

连接器收到连接并将其转换为请求后,会将请求传递给引擎管道的阀门。该请求将被传递到发动机管道中的发动机气门。然后,请求从引擎阀传递到主机管道,在主机管道中,请求被传递到主机阀。然后,它从主阀传递到上下文的管道,在那里它被传递到上下文阀。接下来,请求将被传递到包装器C中管道中包含的阀门包装器阀门,在那里它将通过一个过滤器链,最后被发送到一个Servlet。借助tomcat的架构设计,我们可以通过在tomcat处理一个请求的生命周期中植入我们自己的逻辑,也就是无人机的中间件增强技术,来增强tomcat向外界提供的能力。

中间件增强技术不仅巧妙地利用了tomcat容器的架构设计,还利用了java Instrumentation(它为我们提供了在首次加载对象时动态修改字节码的能力。因为篇幅原因,这里就不详细解释了,不懂的小伙伴可以自行查阅资料)。在无人机中,各种切入点功能是通过无人机服务器从外部提供的。

有了中间件增强技术,应用逻辑执行前后都有切线,下一步就是在这些切线执行我们自己的调用链逻辑。

中间件增强技术在调用链中的应用

UAVStack中的调用链是什么

上面描述的中间件增强技术是一个框架,它通过使用javaagent将切入点代码动态嵌入到tomcat代码中,并以UAVServer的形式提供功能(具体功能将在下面的文章中详细描述)。轻调用链实现正是

了UAVServer对外提供的GlobalFilterHandler能力。

GlobalFilterHandler: 这里的GlobalFilterHandler是中间件增强技术中的一种能力,与传统的filter没有任何关系。它对外提供了四个能力:

  1. doRequest:在所有应用处理请求之前进行劫持;

  2. doResponse:在所有应用处理请求之后进行劫持;

  3. BlockHandlerChain:阻塞自当前handler以后的所有handler,此处的handler为注册在当前;

  4. BlockFilterChain阻塞自当前Filter以后的所有Filter。

        调用链借助于GlobalFilterHandler提供的前两个能力,实现了在应用处理请求之前和之后执行调用链逻辑的功能。

轻调用链实现

UAVStack中的调用链是什么

        

        具体UML图如下:

UAVStack中的调用链是什么

        从UML图中可以清晰地看到, InvokeChainSupporter(调用链实现逻辑入口和调用链所需资源初始化实现类)将中间件增强技术进行了二次增强。它允许使用者在其中注册不同的handler,并且在handler的preCap和doCap(中间件增强技术中的逻辑执行之前和之后的切点术语)方法之前和之后动态织入adapter,从而能够执行更多的定制化适配和个性化逻辑。所有supporter和adapter均采用反射调用方式,最大程度上减少了中间件增强技术的依赖。

        有了二次增强技术,我们就可以开始下面的调用链绘制工作了。

        轻调用链绘制实现主要依赖于注册在InvokeChainSupporter上的                                           ServiceSpanInvokeChainHandler。主要绘制过程如下:

  1. 解析请求信息,提取其中调用链关心的信息,并将解析出来的信息放入上下文中;

  2. 通过解析出来的请求头信息进行逻辑分流,根据不同的协议类型就行不同的逻辑处理;

  • mq逻辑

  • http逻辑

  • dubbo逻辑

  1. 初始化调用链上下文,并初始化main span上下文;

  2. 在应用处理完请求之后,将调用链信息进行统一输出。

下面来看一下具体每一步都做了什么。

解析请求信息

UAVStack中的调用链是什么

        对于像tomcat这类中间件容器,所有进入tomcat的请求都会被封装成HttpServletRequest和HttpServletResponse(后面简称request和response)最终进入用户的servlet中。调用链借助于中间件增强技术会在用户逻辑处理之前将request和response进行一次拦截,并解析其中是否含有调用链信息。如果有则将调用链信息进行封装放入上下文中。

逻辑分流

UAVStack中的调用链是什么

        由于不同协议对应的调用链绘制逻辑也不同,此处调用链会根据协议类型进行一次分发。

初始化调用链上下文

UAVStack中的调用链是什么

将调用链上下文中的信息进行解析:

  1. 没有父节点则将当前节点当作初始化节点,并初始化记录当前服务内调用链信息的main span;

  2. 有父节点则根据父节点信息初始化当前节点,并初始化记录当前服务内调用链信息的main span。

main span:在服务内可能会进行多次客户端通讯或服务间通讯,需要一个main span来记录当前服务内调用链最后一个节点的信息。

调用链信息输出

UAVStack中的调用链是什么

        在用户逻辑处理结束之后,调用链记录器会从上下文中取出当前服务的调用链信息并将其输出到指定日志路径。

服务间上下文传递

UAVStack中的调用链是什么

        对于不同协议调用链传递信息方式也略有不同,具体实现方式借助了中间件增强技术提供的另一个能力:AppFrkHook(简称hook,此功能在客户端调用链实现时会进行具体介绍)。它能够对用户使用的客户端技术进行劫持,如用户使用了httpclient进行通讯,则对httpclient进行劫持并动态织入代码,从而达到在http通讯的过程中注入调用链上下文信息的效果。目标服务在解析请求信息时,将调用链上下文进行解析;在初始化调用链上下文逻辑时,使用传递过来的信息初始化目标服务的调用链上下文,实现跨系统调用时调用链连接。

到此,相信大家对“UAVStack中的调用链是什么”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153161.html

(0)

相关推荐

  • 如何租用香港服务器更便宜

    技术如何租用香港服务器更便宜由于每个网站都会有独特的硬件配置需求需求。而不同类型的服务器需要的硬件配置的价格也是不一样的,出于这个原因,对于不同类型的网站所有者,都没有所谓最便宜的的香港服务器。作为网站多有者在租用服务器

    礼包 2021年10月19日
  • java的native使用方法有哪些呢(javanative方法拿什么写的)

    技术Java中的Native方法是什么这期内容当中小编将会给大家带来有关Java中的Native方法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。以下是java中如何使用nati

    攻略 2021年12月23日
  • 树莓派如何连接WPA2企业级802.1X保护WIFI

    技术树莓派如何连接WPA2企业级802.1X保护WIFI树莓派如何连接WPA2企业级802.1X保护WIFI,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。让

    攻略 2021年11月19日
  • 怎么快速掌握scrapy爬虫框架

    技术怎么快速掌握scrapy爬虫框架这篇文章主要介绍“怎么快速掌握scrapy爬虫框架”,在日常操作中,相信很多人在怎么快速掌握scrapy爬虫框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年10月22日
  • 什么是抽象工厂模式

    技术什么是抽象工厂模式这篇文章主要介绍“什么是抽象工厂模式”,在日常操作中,相信很多人在什么是抽象工厂模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是抽象工厂模式”的疑惑有所帮助!

    攻略 2021年10月28日
  • 伤害英语,几个关于伤害的英语词汇的区别

    技术伤害英语,几个关于伤害的英语词汇的区别damage: 指部分性的损坏,意味着损坏后价值降低,有损于功能、吸引力及效率降低伤害英语。 destroy 指完全彻底的破坏,常有不能或很难修复的意思。
    harm: 较为通俗

    生活 2021年10月24日