关于物理链路追踪,出名的有阿里的鹰眼,Twitter的zip-kin等,这些追踪的工具都是建立在Google的一篇Dapper论文的基础上,这篇论文可以说是指明了链路追踪设计的指导方针和设计原则(https://ai.google/research/pubs/pub36356)。所以楼主写了此篇博文对这篇博文进行总结。

一、两个基本需求

  • 无处不在的部署:
    无处不在很重要,如果系统的一小部分没有被监视,就会受到影响
  • 连续监测:
    因为通常情况下,不寻常或其他值得注意的系统行为很难或不可能重现

最终形成三个具体的设计目标

二、三个设计目标

  • 低开销:跟踪系统对运行服务的性能影响应该可以忽略不计。在一些高度优化的服务中,即使很小的监视开销也很容易被发现,并且可能迫使部署团队弃用跟踪系统,Dapper的消耗时间在200纳秒左右。
  • 应用程序级透明度:应用程序的开发人员不需要知道追踪系统,依赖于开发人员的基础设施经常是会变的极其脆弱
  • 可伸缩性,需要能支持公司未来几年内的服务数量

    如上图所示,在架构的最上端是应用集群,每台机器中都有一个带鹰眼埋点,该中间件负责向日志文件中写入数据,每台机器上的数据收集agent从日志文件读取数据,实现实时收集日志;在鹰眼系统中通过实时处理集群对实时日志进行计算分析,得到两种类型的数据,分别是统计类型的报表(存放在HBase中)和调用链调用明细详情(存放在HiStore中);另外,涉及到离线数据分析的数据使用ODPS离线分析集群进行计算,主要是一些模型建设方面的分析。关于鹰眼的介绍,楼主也是参考了如下被转载的文章:分布式调用跟踪与监控实战

三、详细实施办法

  • 1、记录rpc调用的开始时间和结束时间:只有记录了时间才知道每个rpc调用所消耗的时间
  • 2、记录消费方调用服务的id:如果想知道完整的调用顺序的调用链,必须知道调用的前后关系。
  • 3、每调用一层rpc,添加一个深度级别:有时候服务多次调用,光用id是不行的,这时候深度级别是可以鉴别调用链关系的字段
  • 4、有一个全局唯一的TraceId:用来定位追踪
  • 5、不仅要追踪访问了的服务,还要在返回端打印追踪情况情况,记录是否返回。
  • 6、不同主机时间不完全相等:在一个rpc调用中,不能根据时间判断调用顺序,不同主机的时间不是一样的,在rpc调用中,2,3ms的影响就很明显。
  • 7、对于部分直接进行TCP或者SOAP连接的服务,支持手动代码添加
  • 8、写磁盘是非常昂贵的消耗,通过异步合并多个日志文件写操作并异步执行。经测量Dapper的cpu使用率不到0.3%,数据收集的网络流量占用不到0.01%。将cpu的轮转优先级调到最低。
  • 9、为了避免追踪代码影响应用的逻辑,怎么进行测试,是一个非常值得重视的问题。

四、鹰眼

在鹰眼平台中,通过顺序编号的方式表示服务间的顺序关系,采用如1.1、1.2.1多级嵌套编号的方式体现服务的调用顺序与调用关系,下图中的数字就是rpcId的示意,鹰眼平台正是通过RPCID还愿一次请求过程中各服务的调用关系。

鹰眼的埋点日志中包含如下信息:

  • TraceId,RPCID、开始时间、调用类型、对端IP
  • 处理耗时
  • 处理结果(ResultCode)
  • 数据传输量:请求大小/响应大小
    对于打印日志带来的影响非常敏感的服务,如大促秒杀,就只收集记录其中很小一部分日志的方式。

这段引用自阿里巴巴中台实战架构

五、其他

在Google的Dapper中,链路追踪还提供了统计,校验等功能,但这些应该不是链路追踪所必须的,上面的基础功能先进行实现是最为重要的。

链路追踪-Google-Dapper论文翻译总结相关推荐

  1. 链路追踪google dapper论文 中文

    概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...

  2. 黑白盒 时序Prometheus详解 ; 含 全链路Spring Boot Actuator - google dapper论文 -ELK 日志易 吹牛篇

    一 Prometheus配置文件详解 # 四个模块 配置文件指标说明 global: 全局配置(如果有内部单独设定,会覆盖这个参数) alerting: 告警插件定义.这里会设定alertmanage ...

  3. google dapper论文

    overview 概述 1. 介绍 1.1 文献的总结 2. Dapper的分布式跟踪 2.1 跟踪树和span 2.2 植入点 2.3 Annotation[标注] 2.4 采样率 2.5 跟踪的收 ...

  4. google dapper论文 中文

    overview 概述 介绍 1 文献的总结 Dapper的分布式跟踪 1 跟踪树和span 2 植入点 3 Annotation标注 4 采样率 5 跟踪的收集 6 安全和隐私考虑 Dapper部署 ...

  5. Google Bigtable论文翻译

    2019独角兽企业重金招聘Python工程师标准>>> 1 摘要 Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的 ...

  6. Google Chubby 论文翻译

    目录 摘要 1 介绍 2 设计 3 扩展机理 4 实际应用,意外和设计错误 5 与相关工作的比较 6 总结 7 感谢 松耦合分布式系统的锁服务 Chubby 摘要 我们描述了我们使用 Chubby 锁 ...

  7. Google Spanner论文翻译

    2019独角兽企业重金招聘Python工程师标准>>> [摘要]Spanner 是谷歌公司研发的.可扩展的.多版本.全球分布式.同步复制数据库.它是第一个把数据分布在全球范围内的系统 ...

  8. 语音切割,个人VAD (google 2019 论文翻译)

    论文:https://arxiv.org/pdf/1908.04284.pdf 题目:PERSONAL VAD: SPEAKER-CONDITIONED VOICE ACTIVITY DETECTIO ...

  9. 原来10张图就可以搞懂分布式链路追踪系统原理

    分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务.服务内缓存变为分布式缓存.服务 ...

  10. zipkin链路追踪详解

    服务链路追踪(Spring Cloud Sleuth) sleuth:英 [slu:θ] 美 [sluθ] n.足迹,警犬,侦探vi.做侦探 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布 ...

最新文章

  1. MFC中CArray类原理及其应用
  2. qt 嵌入web页面_Qt嵌入浏览器(三)——QWebEngine与Https
  3. Java Server Faces (JSF)页面转换与验证(二)
  4. centos6.5安装sublime text 2
  5. 【ASP.NET MVC 学习笔记】- 18 Bundle(捆绑)
  6. Json概述以及python对json的相关操作
  7. Qt在VS2012中引用QtWidgets时报GLES2/gl2.h无法打开错误的解决办法
  8. base64编码规则
  9. 四阶魔方用三阶魔方公式时,两个特殊情况处理方式(顶面十字、最后一步)
  10. 登录功能使用 JWT 技术
  11. Android 蓝牙开发 BLE(低功耗) 摩拜单车共享汽车开门实例
  12. 静态单赋值(二)—gcc中的SSA化算法
  13. (笔记)记录Sql中一些例子和常用语法
  14. ctf-web入门-php特性
  15. nc65右键生成菜单_NC65管理员层级管控
  16. Python数据处理016:Pandas 导入导出
  17. 计算机体系结构 第7章 存储系统(2)
  18. 指针、空指针、野指针
  19. STM32 USB使用记录:使用CDC类虚拟串口(VCP)进行通讯
  20. 激光测距VL53L0X查询方式 源代码 已测试

热门文章

  1. 详细SpringBoot教程之数据访问
  2. 2019--3.10学习笔记
  3. centos进入救援模式并修复文件系统(7、8)
  4. 一种简单快速的方式实现 Android App 的夜间模式
  5. IP-guard 双机热备使用说明
  6. Unregistere
  7. jsonObject.toBean
  8. svn: E170001 : Authorization failed 非主流的解决方案!
  9. Moore-Penrose伪逆
  10. 终于解决困扰我多年的问题 浙江绍兴这边 洋拉毛树 树名原来叫 毛白杨 春天种子满天飞