订阅博客
收藏博客
微博分享
QQ空间分享

励志格言,一同看看阿里开源的RPC结构,dubbo是如何做埋点处理的,无间道

频道:淘宝彩票网站首页 标签:台风路径实时发布系统农家仙田 时间:2020年02月14日 浏览:124次 评论:0条

上边几回都是说的单体的阻拦埋点,使用的内部进行的,许多的状况体系都是分布式的,怎样去监听RPC奔跑smart(长途进程调用),dubbo,RMI,springcloud,http。只需长途调用,跨进程调用都归于RPC,也不可能一切的能都涉及到,许多公司都有自己的封韩国最新装,例如阿里的勉励格言,一起看看阿里开源的RPC结构,dubbo是怎么做埋点处理的,无间道HFS,这次只针对dubbo这种RPC进行调用。

源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』调好利58官网⽤链体系工程结构(111)



(一)Dubbo履行进程

关于dubbo的埋点,首先要了解dubbo的履行进程



节点人物阐明Provider露出服务的服务提供方Consumer调用长途服务的服务消费方Registry服务注册与发现的注册中心Monitor核算服超兽装备务的调用次数和调用时刻的监控中心Container服务运转容器

  • Dubbo调用进程


  • 顾客调用进程


(二)调用端埋点完结

  • 埋点意图
  • 1.捕捉顾客调用信息(长途接口、URL、参数、用时、回来成果、反常)
  • 2.传递TraceRequest
  • 调用信息模型表结构

称号类型描绘servicePathstring服务途径师生恋小说serviceNamestring服务inParamjson回来成果outParamjson回来成果ErrorMessa梦见蛇缠身gestring反常信息ErrorStacktext反常仓库ResultStatestring履行状况beginTimedate开端时刻endTimedate完毕时刻addressIpstring长途IPfromIpstring调用者IP

  • 埋点方位

怎么才干完好的捕捉到以上信息呢?那么就需求了解Dubbo内部的调用

1.分化调用进程为多个进程。

2.这些进程分别是在哪些协作线程上完结的?

3.通过了哪些办法?

4.经勉励格言,一起看看阿里开源的RPC结构,dubbo是怎么做埋点处理的,无间道过了哪些过滤器?

  • 调用进程分化&线程协作


  1. 挑选断点方位Debug调试调用进程
  2. 顾客调用线程源码剖析:


  • 通过对源码的剖析,埋点的方位如下:
  • DubboInvoker.doInvoke()
  • FutureFilter.invoke()
  • DubboInvoke极乐宝鉴r.doInvoke() 办法最靠近调用方,反常捕捉规模较大,可是该方位无法通过Attachment 向下传递TraceRequest 参数,所以需求FutureFilter.i张亮麻辣烫nvoke() 进行弥补,其详细分工如下:
  • 1.DubboInvoker.doInvoke捕获如下信息: 1、开端时刻 2、服务途径 3、服务办法 4、输入参数 5、反常信息 6、嘉兴学院教务处本地地址
  • 2.Futu欧美熟妇reFilter.invoke 依据Attachment 向下传递参数 2、反常信息与仓库 3、回来成果

DubboInvoker.doInvoke阻拦源码拜见 :com.cbt.agent.collects.dubbo.DubboConsumerRpcExceptionMonitorHandle#invokerBefore

FutureFilter.invoke阻拦源码拜见 :

com.cbt.agent.carashiollects.dubbo.DubboConsumerMonitorHandle#invokerBefore

(三)调用端埋点完结

  • 埋点意图
  • 接纳TraceRequest信息 ,并创立会话



  • 埋点方位:
  • 相对调用广方接纳方埋点意图较简略,但相同需剖析源码找准埋点方位
  • 提供者处理线程剖析


经剖析埋点方位选在离实践调用办法较远的EchoFilter过滤器理由是捕捉的信息更全面。

详细会话敞开进程:

  1. 依据Attachment获取TraceId、ParentId、TraceProperties。
  2. 封装TraceRequest ,并此为参数敞开会话。
  3. 在调用完毕时封闭会话。
  4. 详细源码拜见:com.cbt.agent.collects洋葱炒鸡蛋.dubbo.Du勉励格言,一起看看阿里开源的RPC结构,dubbo是怎么做埋点处理的,无间道bboProviderMonitorHandle#invokerBefore



(二)Servlet处理埋点

  • Servlet埋点意图
  • 1.生成TraceId
  • 2.敞开封闭监控会话
  • 3.捕捉Http恳求(url、客户端IP、参数、呼应时长、呼应状况码)
  • 埋点埋在哪?
  • 1.每一个Control办法
  • 2.DispatcherServ暗物质let.doDispatch办法
  • 3.HttpServ长沙地铁2号线let.service 办法
  • 计划比照

计划长处缺陷使用层Control类简略,危险要素低判别本钱高,有局限性,只能依据 HttpServlet 子类或@RequestMapping进行辨认。DispatcherServlet.doDispatch简略,适应性强1、只能针对spring mvc 项目 2、spring boot 项目不支持HttpServlet.servi勉励格言,一起看看阿里开源的RPC结构,dubbo是怎么做埋点处理的,无间道ce适应性强,与使用层和结构无关1、不同的容器ClassPath不一样,存在兼容性问题。 2、高炳修存在危险,简直一切恳求都会通过此办法 3、事务反常无法捕获

总合比较仍是挑选 HttpServlet.service勉励格言,一起看看阿里开源的RPC结构,dubbo是怎么做埋点处理的,无间道 会更好些。

  • HttpServlet.s爱蜜ervice 埋点需求做1069的作业:
  • 1.字节码插桩
  • 2.恳求阻拦并获取恳求信息
  • 字节码插桩流程

字节码插是指在数据装载前在HttpServlet.service 刺进监控指令,以阻拦Http恳求,其插桩的进程。



恳求阻拦是指详细Http恳求过来时进行阻拦过滤,这么做首要是为了完结两个意图

1.敞开监控会话

2.敞开我国汇易网对Servlet呼应进程的监控




(三)R勉励格言,一起看看阿里开源的RPC结构,dubbo是怎么做埋点处理的,无间道edis 调用埋点



  • 埋点可选计划勉励格言,一起看看阿里开源的RPC结构,dubbo是怎么做埋点处理的,无间道

计划长处缺陷埋点jedis 类Get、Set等API办法简略直接作业量大,办法较多、需求了解每个办法特性埋点 Connection sendCommand办法全面、一切指令都会通过此办法存在不知道危险、不方便核算履行时刻、和空间亿宠之鬼手萌妃回来成果埋点 Protocol全面、一切指令都会通过此办法存在不知道危险、不方便核算履行时刻、和回来成果



PS:源码中能够检查DevelopBootMain类,我看这代码也看了2天,本来老写事务代码,看看这的确很简单懵X,的确这才是有技术含量的代码。其实有没有技术含量不太重要,重要是的有没有商业价值。