天机阁——全链路跟踪系统设计与实现

小时光茶社

传说中天机阁里有一台掌控世间一切的机器,万物运行由此产生。本文的“天机阁”是一个基于链路跟踪的监控系统,后台开发人员能够通过“天机阁”洞察“天机”,快速解决问题。

摘要

为了支撑日益增长的庞大业务量,业界大量使用微服务架构。服务按照不同的维度进行拆分,互联网应用构建在不同的软件模块集上,这些软件模块可能是由不同的团队开发、可能使用不同的编程语言来实现、可能布在了几千台服务器,横跨多个不同的数据中心,分布式系统变得日趋复杂。

如何快速进行故障定位?如何准确进行容量评估?如何动态展示服务的链路?如何进行系统性能优化?这是分布式系统给后台开发同学带来的四大挑战。业界都是通过链路跟踪系统来解决以上问题,然而腾讯在链路跟踪方面比较欠缺。为了填补此空白,“天机阁”系统横空出世。

“天机阁”通过采集、存储、分析分布式系统中的trace数据、指标数据和日志数据,完成全链路跟踪,从而解决上述问题。目前天机阁接入了1200+个服务,trace数据上报峰值500万/分钟,指标数据上报峰值1.3亿/分钟,日志数据每天30T。如此海量的数据天机阁是怎样处理的?天机阁的链路跟踪是怎样实现的?又是怎样做到低侵入,低开销的?这些问题本文将一一为您揭秘。

背景

e19de99b708210dfb42f90c35b5a8991.png

 微服务崛起让系统越来越复杂

如摘要所述,企鹅电竞也采用微服务架构。图1是企鹅电竞首页接口的依赖关系图,这张图大家可能看不清楚,看不清楚才是正常的,因为系统依赖的服务太多了。这种情况下一个请求涉及几十个服务,若其中某个关键服务出现了失败,只知道有异常,但具体的异常在哪个服务引起的就需要进入每一个服务里面看日志,这样的处理效率是非常低的。

61721a76e1a31b50a48c0123b2d6fb21.jpeg

图1: 

企鹅电竞首页接口拓扑图

789661deb5298340a31d3850317997fa.png

后台开发的痛

微服务的好处不用多说,然而微服务也是一把双刃剑,其坏处就是系统太复杂,后台开发者面临着以下四大问题。

1、故障定位难:一次请求往往需要涉及到多个服务,这些服务很可能是由多个团队负责的。一旦出问题,只知道有异常,但具体的异常在哪个服务引起的就需要进入每一个服务里面看日志,这样的处理效率是非常低的。最坏的情况可能要拉上多个团队一起定位。

2、容量评估难:企鹅电竞每个月都就有好几场推广活动。活动形式还经常变化,导致流量入口经常不同。企鹅电竞有500多个模块,不同入口的流量导致各模块的qps增量是不同的,容量评估是一件难事。接入天机阁之前,企鹅电竞的每次大型上量活动都需要2个开发同学花一整天的时间来做容量评估,事倍功半。

3、链路梳理难:一个新人加入后台团队,他在这个微服务体系中接手一个模块,根本不知道自己身在何处,不知道自己的系统被谁依赖了,也不知道自己的系统下游依赖哪些服务,需要看文档,一行行根据代码来分析,费时费力。

4、性能分析难:一个服务依赖于后台多个服务, 如果某接口的耗时突然增加,开发得从自己开始,逐步分析各依赖接口的耗时情况。

bf1e33824428245da25aa7e879d37301.png

业界解决方案

 业界都是用分布式链路跟踪系统来解决上述问题。Dapper是谷歌生产环境下的分布式跟踪系统,算得上各大链路跟踪系统的鼻祖。2010年谷歌发表了Dapper的论文, 之后各大互联网公司纷纷参照dapper的思想推出各自的链路跟踪系统。包括Twitter的Zipkin,韩国人的pinpoint,Apache的HTrace,阿里的鹰眼Tracing、京东的Hydra、新浪的Watchman等。

3a97272bbcff4123032665f6ceed80d3.png

我们的出路

腾讯在链路跟踪这块比较薄弱,需要尽快填补这个空白。以上几款链路跟踪系统都各自满足了链路追踪的功能,但落实到我们自己的生产环境中时,这些Trace系统存在诸多问题。 谷歌“dapper”和阿里“鹰眼”并不开源。Pinpoint和zipkin已经开源,然而pinpoint通过字节码注入的方式实现调用拦截和数据收集,仅能用于java服务器,Zipkin没有C++的版本,并且功能不够用。 最终我们选择用zipkin的协议,参照阿里鹰眼的架构自建一套腾讯内通用的链路跟踪系统----天机阁。 

天机阁介绍

f64c15a16b4afbc876e9e62ce5591fb2.png

 天机阁是什么

天机阁是一个以分布式链路跟踪为核心的监控系统。它通过采集、存储、分析分布式系统中的调用事件数据,再结合压测数据和TNM2数据,实现故障诊断、容量评估以及系统梳理等多种功能,大大降低开发人员的运维挑战, 见图2。数据采集架构图见图11。

7b952a738e469c65384ea7768c2b589c.jpeg

图2:

天机阁功能示意图

注:“调用事件数据”包括“trace数据”、“指标数据”、“日志数据”三种。

trace数据——指链路跟踪的span数据,主要用于链路跟踪、还原、绘制拓扑图。

指标数据——指rpc的模调数据,包括分钟级别的rpc请求量、成功率、延时分布、错误码分布等等。

日志数据——业务日志。 

b58e362d115d62826bc40bd5695e7f4a.png

天机阁有些啥功能

1.故障定位:天机阁利用跟踪数据,可以还原调用链,再结合日志数据,可以快速实现故障定位。例如:用户投诉他的视频点赞数不对,开发同学可以根据用户qq号码找到投诉用户的请求trace。 查看trace详情就能很清楚的看到该请求在获取点赞结果的时候超时了,开发同学可以迅速完成定位并处理。Ui界面见图3。

fe909883f9320c1325800a07be2c428c.jpeg

图3:trace跟踪ui界面

2.链路梳理:有了跟踪数据,画出业务拓扑图就是水到渠成,图4是企鹅电竞某服务的拓扑图。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值