追踪(trace)系统框架设计的思考
开发过稍微大一点的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系统将其分为四个阶段:
- rpc客户端发送请求(customer send ,简称cs);
- rpc服务端接收请求(server receive,简称sr);
- rpc服务端发送响应(server send,简称ss);
- rpc客户端接收响应(customer receive,简称cr);
追踪就是围绕这四个阶段进行一系统日志记录。之所以很多程序员对于trace系统不理解,原因是对于rpc的整个调用过程不清楚,或者说是没有理解透彻。下面围绕下面几个问题展开。
什么是调用链?
上面描述的四个阶段,就是一个完整的调用链。即从一个调用请求发出至该调用接收到相应的响应为止。出现调用依赖,就会有这一调用的结束是下一个调用的开始。
什么是api接口业务参数?
业务参数就是我们在定义api接口中显示定义的参数。
什么是api请求参数?
在单机api请求很简单就是直接调用api的实现类对应的实例中的方法并传入相应的业务即可;但是在远程调用(rpc),则对应的参数不仅仅只是业务参数。至少需要直接调用服务端机器的ip地址与端口port参数。这些参数,而不需要显示的传递至服务端,而是客户端根据这些参数建立调用通道;
什么是链路参数?
链路参数:指不同于业务参数,原因是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)系统框架设计的思考相关推荐
- Asp.net基于工作流引擎的系统框架设计开发(源代码+论文)
工作流就是一系列相互衔接.自动进行的业务活动或任务.工作流引擎是工作流管理系统的核心,它的主要功能是通过计算机技术的支持去定义.执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互 ...
- Android源码分析(三)-----系统框架设计思想
一 : 术在内而道在外 Android系统的精髓在源码之外,而不在源码之内,代码只是一种实现人类思想的工具,仅此而已...... 近来发现很多关于Android文章都是以源码的方向入手分析Androi ...
- fre 更新了,框架设计重思考……
halo 大家好,好久不贱呢~ 好久没出来浪了::>_<::,主要是之前在重构 c站,现在重构完了 是时候重构一下俺的轮子了-- 所以,如你所见,smox.fre.eplayer 都更新了 ...
- 【毕业设计】asp.net基于工作流引擎的系统框架设计开发(源代码+论文)
文章目录 目录 一.系统设计 二.系统实现 源文件 目录 一.系统设计 4.1模块的划分 通过对用户需求调研并分析,确定系统应具备的功能,所需模块包括:状态图管理,任务管理,任务指派,任务提交. 4. ...
- 基于WPF系统框架设计(7)-TextBox/PasswordBox在ViewModel中支持回车命令
应用场景 我现在做一个系统登录功能,要求在PasswordBox上输完密码后回车,能够响应Enter事件,并执行ViewModel中对应的方法.如果登录成功则隐藏当前窗口显示主窗体,登录失败则焦点返回 ...
- 再议成就系统框架设计
根据http://blog.csdn.net/heartrude/article/details/8523570的设计,其实还有几点可以优化 1.Group组的Buff是靠严格的配置的偏移量计算出来的 ...
- 《数字孪生虚拟电厂系统框架设计及其实践展望》——阅读笔记
数字孪生的典型特征 1.互操作性:物理实体和数字空间双向 映射.动态交互和实时连接,因此物理-数字孪生系统能够量测获取实时数据更新数字模型,同 时通过控制接口将数字模型中校正计算后的控 制参数回传给实 ...
- Buff系统框架设计
Buff的配置文件 BufType: 1: 精神类Buf 2: 物理类Buf 3.元素类Buf 4.其他类Buf 5.被动类Buf BufSubType: 1000-1999 精神子类 2000-29 ...
- 基于Vue和SpringBoot的毕业生追踪系统的设计和实现
作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...
最新文章
- plsql developer的一些使用
- 电脑桌面路径多了个计算机名,文件太多,电脑桌面太乱?一个技巧帮你解决!...
- [转载]出了国才明白的10件事~(MITBBS ZT)
- SpringBoot JWT工具类完整代码
- 用科幻艺术描绘未知的魅力-人物篇
- 完美替代Mask RCNN!BlendMask:实例分割新标杆
- IOT(3)---传感器厂家
- python 类可以调用实例变量_Python实例方法、类方法、静态方法区别详解
- python执行命令不阻塞_通过python 执行 nohup 不生效的解决
- AAC 文件解析及解码流程
- 微信开发刷新网页code过期
- ctfmon是什么启动项_我MSCONFIG启动项里面没有ctfmon怎么处理?
- Python敏感词汇检测
- matlab插值拟合案例,matlab插值与拟合
- 交换机的Vlan技术 以及Vlan隔离和 端口隔离区别
- 计算机网络之——非常恶心但友善ip地址、子网掩码、网络地址、构造超网、最小地址和最大地址(理解篇)
- 2021-04-14
- java环巢湖区域旅游网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- 【技术分享】如何通过PPPOE拨号上网
- 多图上传以及多图排序的方法及流程详解
热门文章
- 在职研究生如何做选择
- 腾讯面试官:矩阵中的路径怎么求?
- Visual Studio 2013 配置Boost库。 如何编译和选择,遇到无法打开文件“libboost_thread-vc120-mt-gd-1_58.lib的解决办法
- 新代系统怎样看服务器ip,新代数控系统是如何进行网络连接
- 关于字符型变量的几点说明
- ResponseBody详解
- 验证码的前世今生(前世篇)
- Garch模型Stata实例
- CVPR2020:Deep Unfolding Network for Image Super-Resolution解读
- Dense Deep Unfolding Network with 3D-CNN Prior for Snapshot Compressive Imaging