开发过稍微大一点的soa服务系统的程序员都听说过trace系统(但真正从零开始设计的人,我个人认为很少)。为什么需要trace呢?原因是调用soa服务的调用链路太复杂(什么是调用链路,下面解释),trace的目的是为了定位系统的调用过程的一切一切。

理论依据

  • a Large-Scale Distributed Systems Tracing Infrastructure

    牛X公司,Google的

听说过或开源的trace框架

  • Googe的Dapper;
  • Twitter的zipkin;
  • 淘宝的鹰眼;
  • 大众点评的cat;
  • 京东的hydra,现在是CallGraph,hydra已不维护了;
  • spring Cloud Sleuth,它可以集成zipkin;
  • 想了解这些系统,可以去github找源码学习,能找到的就是开源的,找不到就是不开源的。

SOA服务trace系统的设计思路

大致了解一下,几乎上面所有的系统都是围绕Google的那篇论文,或者说是受那篇论文影响。对于一次rpc请求,trace系统将其分为四个阶段:

  1. rpc客户端发送请求(customer send ,简称cs);
  2. rpc服务端接收请求(server receive,简称sr);
  3. rpc服务端发送响应(server send,简称ss);
  4. rpc客户端接收响应(customer receive,简称cr);

追踪就是围绕这四个阶段进行一系统日志记录。之所以很多程序员对于trace系统不理解,原因是对于rpc的整个调用过程不清楚,或者说是没有理解透彻。下面围绕下面几个问题展开。

  1. 什么是调用链?

    上面描述的四个阶段,就是一个完整的调用链。即从一个调用请求发出至该调用接收到相应的响应为止。出现调用依赖,就会有这一调用的结束是下一个调用的开始。

  2. 什么是api接口业务参数?

    业务参数就是我们在定义api接口中显示定义的参数。

  3. 什么是api请求参数?

    在单机api请求很简单就是直接调用api的实现类对应的实例中的方法并传入相应的业务即可;但是在远程调用(rpc),则对应的参数不仅仅只是业务参数。至少需要直接调用服务端机器的ip地址与端口port参数。这些参数,而不需要显示的传递至服务端,而是客户端根据这些参数建立调用通道;

  4. 什么是链路参数?

    链路参数:指不同于业务参数,原因是api接口在进行业务处理时,并不真正的依赖于它;也不同于api请求参数,链路参数可以隐示的传递至api服务端。正是由于有了这种机制,我们才可以通过链路参数完成trace系统的非侵入式设计。当然没有这个机制也可以完成trace,只是需要将相应的trace参数显示的定义在api业务参数中。

说的再直白一点trace系统就是为了完成将各个系统在每个阶段服务调用输入的日志“串起来”。为了完成这个“串起来”,trace系统只需要在各个服务的调用链上进行拦截,并进行相应的每个阶段的日志记录,并根据链路参数传递traceId进行上下文日志的衔接。
基于dubbo框架的SOA服务的trace系统hydra正是基于这个思路。它实现了dubbo框架的com.alibaba.dubbo.rpc.Filter,并注入dubbo框架调用链路中,从而完成前面调用链路的四个阶段的日志记录,构建一个trace系统。hydra源代码的github地址 https://github.com/zhuzhong/hydra

追踪(trace)系统框架设计的思考相关推荐

  1. Asp.net基于工作流引擎的系统框架设计开发(源代码+论文)

    工作流就是一系列相互衔接.自动进行的业务活动或任务.工作流引擎是工作流管理系统的核心,它的主要功能是通过计算机技术的支持去定义.执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互 ...

  2. Android源码分析(三)-----系统框架设计思想

    一 : 术在内而道在外 Android系统的精髓在源码之外,而不在源码之内,代码只是一种实现人类思想的工具,仅此而已...... 近来发现很多关于Android文章都是以源码的方向入手分析Androi ...

  3. fre 更新了,框架设计重思考……

    halo 大家好,好久不贱呢~ 好久没出来浪了::>_<::,主要是之前在重构 c站,现在重构完了 是时候重构一下俺的轮子了-- 所以,如你所见,smox.fre.eplayer 都更新了 ...

  4. 【毕业设计】asp.net基于工作流引擎的系统框架设计开发(源代码+论文)

    文章目录 目录 一.系统设计 二.系统实现 源文件 目录 一.系统设计 4.1模块的划分 通过对用户需求调研并分析,确定系统应具备的功能,所需模块包括:状态图管理,任务管理,任务指派,任务提交. 4. ...

  5. 基于WPF系统框架设计(7)-TextBox/PasswordBox在ViewModel中支持回车命令

    应用场景 我现在做一个系统登录功能,要求在PasswordBox上输完密码后回车,能够响应Enter事件,并执行ViewModel中对应的方法.如果登录成功则隐藏当前窗口显示主窗体,登录失败则焦点返回 ...

  6. 再议成就系统框架设计

    根据http://blog.csdn.net/heartrude/article/details/8523570的设计,其实还有几点可以优化 1.Group组的Buff是靠严格的配置的偏移量计算出来的 ...

  7. 《数字孪生虚拟电厂系统框架设计及其实践展望》——阅读笔记

    数字孪生的典型特征 1.互操作性:物理实体和数字空间双向 映射.动态交互和实时连接,因此物理-数字孪生系统能够量测获取实时数据更新数字模型,同 时通过控制接口将数字模型中校正计算后的控 制参数回传给实 ...

  8. Buff系统框架设计

    Buff的配置文件 BufType: 1: 精神类Buf 2: 物理类Buf 3.元素类Buf 4.其他类Buf 5.被动类Buf BufSubType: 1000-1999 精神子类 2000-29 ...

  9. 基于Vue和SpringBoot的毕业生追踪系统的设计和实现

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

最新文章

  1. plsql developer的一些使用
  2. 电脑桌面路径多了个计算机名,文件太多,电脑桌面太乱?一个技巧帮你解决!...
  3. [转载]出了国才明白的10件事~(MITBBS ZT)
  4. SpringBoot JWT工具类完整代码
  5. 用科幻艺术描绘未知的魅力-人物篇
  6. 完美替代Mask RCNN!BlendMask:实例分割新标杆
  7. IOT(3)---传感器厂家
  8. python 类可以调用实例变量_Python实例方法、类方法、静态方法区别详解
  9. python执行命令不阻塞_通过python 执行 nohup 不生效的解决
  10. AAC 文件解析及解码流程
  11. 微信开发刷新网页code过期
  12. ctfmon是什么启动项_我MSCONFIG启动项里面没有ctfmon怎么处理?
  13. Python敏感词汇检测
  14. matlab插值拟合案例,matlab插值与拟合
  15. 交换机的Vlan技术 以及Vlan隔离和 端口隔离区别
  16. 计算机网络之——非常恶心但友善ip地址、子网掩码、网络地址、构造超网、最小地址和最大地址(理解篇)
  17. 2021-04-14
  18. java环巢湖区域旅游网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  19. 【技术分享】如何通过PPPOE拨号上网
  20. 多图上传以及多图排序的方法及流程详解

热门文章

  1. 在职研究生如何做选择
  2. 腾讯面试官:矩阵中的路径怎么求?
  3. Visual Studio 2013 配置Boost库。 如何编译和选择,遇到无法打开文件“libboost_thread-vc120-mt-gd-1_58.lib的解决办法
  4. 新代系统怎样看服务器ip,新代数控系统是如何进行网络连接
  5. 关于字符型变量的几点说明
  6. ResponseBody详解
  7. 验证码的前世今生(前世篇)
  8. Garch模型Stata实例
  9. CVPR2020:Deep Unfolding Network for Image Super-Resolution解读
  10. Dense Deep Unfolding Network with 3D-CNN Prior for Snapshot Compressive Imaging