天天看点

分布式架构设计之分布式调用链跟踪技术,给系统装上鹰眼

作者:coderTT
延续《分布式架构设计》系列,讲解分布式调用链路跟踪,想全面了解分布式架构相关其他主题,请继续阅读文章底部合集。

微服务架构的兴起,调用链路越来越复杂,同时还可能引入分布式缓存、消息队列等中间件,这些组件共同构成了复杂的分布式网络,数据在网络中流转,给问题的定位和排除带来非常大的困难。

分布式架构设计之分布式调用链跟踪技术,给系统装上鹰眼

于是就需要一种方案实现多调用链路进行追踪,来解决:故障快速定位、调用链路可观测、分析路径依赖、各环节性能耗时等问题。

分布式链路追踪原理

最早提出链路追踪理念是Google在2010年发表的论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,被各大互联网公司争相效仿和学习。

原理:将请求链路看成一个有向图,分布式跟踪系统要做的,就是记录每次发送和接受动作的标识符和时间戳,将一次请求涉及到的所有服务串联起来,只有这样才能搞清楚一次请求的完整调用链。

分布式架构设计之分布式调用链跟踪技术,给系统装上鹰眼

论文中提出的一套链路追踪的 API 规范,支持多种编程语言,与平台无关、与厂商无关,使得开发人员能够方便的添加(或更换)链路跟踪系统的实现,这就是OpenTracing,并在2016年10月,加入CNCF基金会。(官方文档:https://opentracing.io/docs/getting-started/)

可选方案

分布式链路追踪,是微服务架构下必备的能力,很多科技公司都参考Google的论文开发了自己的系统,比如:

  • Twitter:Zipkin
  • Uber:Jaeger
  • 阿里:鹰眼
  • 大众点评:Cat
  • 京东:CallGraph
  • 新浪微博:Watchman

其实总体上架构差别不大,造的不同的轮子而已,简单介绍两个有代表性的供大家了解。

jaeger

由Uber 用golang开发,Jaeger 目前由 Cloud Native Computing Foundation(CNCF)托管,是 CNCF 的第七个顶级项目(于 2019 年 10 月毕业),未来云原生架构的首选方案。

分布式架构设计之分布式调用链跟踪技术,给系统装上鹰眼
  • Jaeger Client:Jaeger 客户端,用于手动或通过与 OpenTracing 集成的各种现有开源框架(例如Flask,Dropwizard,gRPC等)监测应用程序以进行分布式跟踪。
  • Jaeger Agent:Jaeger 客户端代理,在 UDP 端口上监听数据并分批发送给 Collector。
  • Jaeger Collector:Jaeger 收集器,用于收集/管理Agent上报的追踪信息。
  • Jaeger Query:数据查询与前端界面展示。
  • Jaeger Ingester:可从 Kafka 读取数据并写入其他的存储介质(Cassandra,Elasticsearch)。

Jaeger 是一个很经典的架构,由客户端主动发送数据到 Agent,Agent 上报给 Collector,再经由队列,最终落地到存储。

阿里鹰眼

鹰眼是阿里基于Google Dapper开发的调用链追踪系统,用于淘宝所有服务之间的调用追踪。 架构: 带有鹰眼埋点的中间件将追踪数据打印到日志,由日志收集agent将日志中的追踪信息上传到Storm,Storm将追踪数据全量存入HDFS,并将实时统计结果存入HBase。它是一个以链路追踪技术为核心的监控系统,它主要的手段是通过收集、存储、分析、分布式系统中的调用事件数据,协助开发运营人员进行故障诊断、容量预估、性能瓶颈定位以及调用链路梳理。(想了解细节可参考这篇文章:https://www.cnblogs.com/gzxbkk/p/9600263.html)

分布式架构设计之分布式调用链跟踪技术,给系统装上鹰眼

鹰眼的优势是,阿里内部中间件比较完善,tengine/HSF/MateQ/Tair等都集成了鹰眼,所以业务系统基本上不需要代码开发就能自动产生和收集调用日志。同时,因为经历了非常多生产场景的打磨,无论UI体验和治理规范都已经很完善了。

关注我,探讨技术、了解更多科技动态[灵光一闪]

继续阅读