分布式追踪系统dapper

  最近单位需要做自己的分布式监控系统,因此看了一些资料,其中就有google的分布式追踪系统dapper的论文:http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/zh-CN//pubs/archive/36356.pdf,结合自己的理解描述下这篇论文。

一、引子:

  用户输入关键字后只要敲个回车键就能返回搜索结果(图1a),这样一个简单的过程可能涉及到上千个服务,可能需要上千个服务器协作完成。如图1b所示,user发了RequestX请求到达A,A通过rpc(远程过程调用,如thrift)调用B以及C,而C又需要通过rpc调用D以及E等等。

  对user的一次请求,他迟迟未收到响应ReplyX,或者响应时间很慢,我们需要确认性能到底消耗在哪个环节,这个时候我们该怎么办呢?自然是分析我们的日志。

  我们每个服务都会有请求日志,请求日志记录着一次调用所花费的时间,比如对A来说,记录着调用B所花费的时间以及调用C所花费的时间,同理C的请求日志记录着调用D以及E所花费的时间。对于互联网应用来说,各个服务比如B,同一时刻可能有成百上千次请求记录。

  这种日志有个致命缺点---没有将这些记录与特定的请求关联一起。对于user的一条特定的请求RequestX,我们不知道B日志中哪条记录与之对应,也不知道C日志中哪条记录与之对应。。。总而言之,我们不能很具体的分析user的一次请求响应缓慢到底消耗在哪个环节。

二、 如何将各个服务日志的每一条记录与特定的请求关联在一起呢?

  当前学术界和工业界有两种方法:

1)黑盒方法(black box)

  日志还是一样的记录,只是通过机器学习的方法来关联记录与特定的请求。以一条特定请求RequestX为变量,通过黑盒(也就是机器学习的模型,比如回归分析)从A的日志中找出一条记录与之对应,同理可以找出B、C、D、E等等的相关记录。

  黑盒方法的优势就是不需要改变现有日志记录方法,但是缺点很明显,机器学习的精度往往不高,实际使用中效果不好。

2)基于注释的方案

  利用应用程序或中间件给每条记录一个全局标志符,借此将一串请求关联起来。比如对RequestX来说,赋予一个标志符1000,后续相关各个服务都会将标识符1000与记录一起打在日志里。这种方法的优势就是比较精确,目前google、twitter、淘宝等都采用这种方式。下面介绍google的分布式追踪系统解决方案---dapper。

三、dapper的设计目标:

1)低消耗

  dapper本质是用来发现性能消耗问题,如果dapper本身很消耗性能,没人愿意使用,因此低消耗是必须的,dapper使用一系列创新方法确保低消耗,比如使用采样方法。

2)应用级透明

  应用级透明的意思是程序员可以不需要在自己的代码中嵌入dapper相关的代码就能达到分布式追踪日志记录的目的。每一个工程师都希望自己的代码是纯粹的,如果需要嵌入dapper相关代码,那么既影响代码维护,又影响bug定位。

3)扩展性好

  对于一个快速发展的互联网公司而言,用户规模快速增长导致着服务以及机器数量越来越多,因此dapper需要适应相应的发展,扩展性要好。

 四、dapper的几个关键点:

1)dapper日志记录的格式是怎样的呢?

  dapper用span来表示一个服务调用开始和结束的时间,也就是时间区间(图2对应着图1b的调用图)。dapper记录了span的名称以及每个span的ID和父ID,如果一个span没有父ID被称之为root span。所有的span都挂在一个特定得追踪上,共用一个跟踪ID,这些ID用全局64位整数标示,也就是图2的traceID。

 

2)如何实现应用级透明?

  在google的环境中,所有的应用程序使用相同的线程模型、控制流和RPC系统,既然不能让工程师写代码记录日志,那么就只能让这些线程模型、控制流和RPC系统来自动帮助工程师记录日志了。

  举个例子,几乎所有的google进程间通信是建立在一个用C++和JAVA开发的RPC框架上,dapper把跟踪植入这个框架,span的ID和跟踪的ID会从客户端发送到服务端,这样工程师也就不需要关心。

 

3)dapper跟踪收集的流程

  如图3所示,分为3个阶段:a)各个服务将span数据写到本机日志上;b)dapper守护进程进行拉取,将数据读到dapper收集器里;c)dapper收集器将结果写到bigtable中,一次跟踪被记录为一行。 

 

4)如何尽可能降低开销?

  作为一个分布式追踪系统,dapper希望尽可能降低性能开销。如果对每一次的请求都进行追踪收集,开销还是有点大的。一个比较好的方式是通过统计采样的方法,抽样追踪一些请求,从而达到性能开销与精度的折中。

  dapper的第一个版本设置了一个统一的采样率1/1024,也就是1024个请求才追踪一次。后来发现对一些高吞吐的服务来说是可以的,比如每秒几十万的请求,但是对一些低吞吐量的服务,比如每秒几十个请求的服务,如果采样率设置为1/1024,很多性能问题可能不会被追踪到。因此在第二版本dapper提供了自适应的采样率,在低吞吐量时候提高采样率,在高吞吐量时降低采样率。

  上面的采样是在第一个阶段,此外在收集器将span数据写到bigtable时,还可以使用第二次采样,即不一定都将数据写入到bigtable中。

 五、dapper的使用

1)监测新服务部署性能情况

  对一个新服务,往往需要经过一段时间的观察,这时候可以使用dapper进行监测,从而发现存在的性能的问题;

2)推断服务间的依存关系

  通过使用dapper,可以很清晰的表明一个服务依赖了哪些服务,以及一个服务影响到哪些服务,这样能促使我们在上线的时候能及时通知下游服务监控者重点观察。

...)

 

六、dapper的不足

1)某些时候缓冲一些请求,然后一次性操作会比较高效,比如I/O请求等。各个请求都有traceID,但是聚集之后只有一个请求,因此只能选择一个traceID用于传递到聚集请求,这时追踪会中断。

2)dapper可能找出某个环节慢了,但不一定能找出根源。比如一个请求慢可能不是它自身慢,而可能它在消息队列中比较靠后。

...)

 

时间: 2025-01-02 13:21:05

分布式追踪系统dapper的相关文章

服务网格 Istio - 分布式追踪

微服务架构将复杂系统切分若干小服务,每个服务可以被独立地开发.部署和伸缩:微服务架构和容器(Docker/Kubernetes)是天作之合,可以进一步简化微服务交付,加强整体系统的弹性和健壮性.然而由大量的微服务构成的分布式应用架构也会增加运维.调试.和安全管理的复杂性.为了解决上述挑战,Spring Cloud和Dubbo/EDAS等微服务框架将服务治理能力内置在编程框架中. 2017年5月,Google.IBM和Lyft发布了开源服务网格框架Istio,提供微服务的连接.管理.监控和安全保护

分布式服务化系统一致性的“最佳实干”

李艳鹏 易宝支付平台架构师,专注线上和线下支付平台的应用架构和技术架构的规划与落地,负责交易.支付.渠道.账务.计费.风控.对账等系统的设计与实现,在移动支付.聚合支付.合规账户.扫码支付.标记化支付等业务场景上有产品应用架构规划的经验. 1 背景 一致性是一个抽象的.具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义.在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我.我中有你.浑然一体:而在互联网时代,一致性的含义远远超出了它原有的含义,在我们讨论互联网时代的一致

在分布式OSSIM系统中查看传感器状态

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chenguang.blog.51cto.com/350944/1760020 分布式OSSIM系统中查看传感器运行状态      在OSSIM系统分布式部署中,我们通常需要快速预览多个传感器的各项状态,例如IDS.漏洞扫描.Netflow等子系统的工作状态.完成下面实验之前请确保浏览器能够正常连接谷歌地图,设置方法如下.      首先在Dashboards→Risk Maps

分布式视频点播系统的设计与实现

一 视频点播技术面临的挑战 互联网与WWW技术的发展,使人们更易于主动地获取信息.越来越多的人们更愿意及时.主动地观看节目,这一趋势正冲击着传统的单向广播.观众被动收听收看的运行模式,迫使广播电视系统向交互式方向发展,实现互动点播.但对于巨量的音视频数据,其存储.传输.大量并发性访问等使其与在目前互联网上流动的文本.图像信息有很大的差别,这些问题不解决,将难以实现有效的互动点播.本文结合以上问题,提出了一种分布式的视频点播系统模型. 虽然现在许多公司开发出了视频点播软件,如VideoCharge

伏羲—阿里云分布式调度系统

今天,大数据已经从概念发展到在很多行业落地生根.广泛用在电商.金融.企业等行业,帮助行业分析数据.挖掘数据的价值.即使在传统的医疗.安全.交通等领域也越来越多的应用大数据的技术.数据.价值二者之间的联系是计算,计算是大数据中最核心的部分.大数据计算就是将原来一台台的服务器通过网络连接起来成为一个整体,对外提供体验一致的计算功能,即分布式计算. 点击查看回顾视频 伏羲系统架构 分布式调度系统需要解决两个问题: 任务调度:如何将海量数据分片,并在几千上万台机器上并行处理,最终汇聚成用户需要的结果?当

首都网络安全日 360推出全球首个伪基站追踪系统

4月29日,首都网络安全日暨网络与信息安全博览会在北京展览馆开幕.今年的网络安全日以"网络安全同担,网络生活共享"为主题,由北京市公安局.北京市网络行业协会等单位主办,涵盖网络安全人才培训.网络安全创新.网络安全现状报告.网络安全合作等各个方面. 展会上,中国最大的网络安全公司360首次对外系统性展示了基于大数据技术的伪基站追踪系统,并同时发布了基于该系统追踪和分析结果的伪基站调查报告.报告称,北京市民每天收到30多万条伪基站短信,警方与360合作对伪基站进行打击. 图:360首席反诈

【可视化、安全】盘点全球网络攻击实时追踪系统

FreeBuf科普:攻击数据从何而来? 这是一些很形象.生动.有趣的攻击可视化记录.所有在地图上展示的大数据都是来自真实的生活目标."蜜罐"和安全公司部署的"诱饵系统"收集的数据,其中有攻击来源.攻击方式以及攻击频率. 此外,地图中显示破坏系统的"攻击方"组织通常是从别的某个地方发起的,也就是说你所看到的"攻击源"很可能只是攻击者的一个攻击"跳板",并非真实发起地,真正幕后攻击者会用多重伪造技术,隐藏的很深

让孩子喜欢运动 iBitz推完善的健康追踪系统

在平板,智能手机横行的时代里面,小孩子更加容易被手机上的游戏所吸引,可能就趴在床上或者坐着不运动了,所以导致各种健康问题.所以厂商iBitz开发出了一 套完善的健康追踪系统,在iOS客户端安装一款非常卡通的应用,然后在鞋子上安装色彩鲜艳的iBitz同步计步器,通过蓝牙进行连接,能够帮助父母及时记录今天孩子走了多少步,消耗了多少卡路里等等的信息,并且提供相关的游戏能够让整个身体和软件进行互动. 现场还有专门的演示,但是由于CES大展上有太多的新奇食物,外媒记者并没有花太多的时间来拍摄视频,非常抱歉

分布式监控系统Ganglia,测试中的监控技术

我们在测试活动中,时常关注一些性能数据,这些数据从哪儿来?很显然,放在我们面前的第一道关卡便是监控技术,我们需要合理的,可以高度扩展和集成的监控系统,可以实时监控性能数据,并将他们用漂亮的方式展现出来,云时代背景下诞生了这么一些给力的工具,他们中有一些名字已经让大家足够熟悉了,Nagios,Gmond等,他们中还有一个强大的身影,就是今天给大家分享的Ganglia. Ganglia Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格.它是基于分层设计,它使用广泛的