分布式链路追踪:总体介绍

举报
李路的路 发表于 2021/07/03 11:28:36 2021/07/03
【摘要】 链路追踪是分布式中一个排查问题的重要方式,Spring Cloud中的多个组件,利用这些组件构建一个微服务系统。本系列文章将会介绍Spring Cloud提供的链路监控组件Spring Cloud Sleuth。Spring Cloud Sleuth 提供了分布式链路追踪的解决方案,用以追踪微服务系统中的某一次的请求完整过程。 链路监控组件介绍在微服务架构下,系统由大量服务组成,每个服务可能...

链路追踪是分布式中一个排查问题的重要方式,Spring Cloud中的多个组件,利用这些组件构建一个微服务系统。本系列文章将会介绍Spring Cloud提供的链路监控组件Spring Cloud Sleuth。Spring Cloud Sleuth 提供了分布式链路追踪的解决方案,用以追踪微服务系统中的某一次的请求完整过程。

链路监控组件介绍

在微服务架构下,系统由大量服务组成,每个服务可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心…例如一次请求往往会涉及到多个服务,在系统发生故障的时候,快速定位和解决问题,就需要追踪服务请求序列。因此,分析性能问题的工具以及理解系统的行为变得很重要。

分布式调用链监控组件在这样的需求下产生了。最著名的是谷歌在公开的论文提到的Dapper。开发Dapper是为了收集更多的复杂分布式系统的行为信息,然后呈现给Google的开发者们。分布式系统有大规模的低端服务器,作为互联网服务的载体,是一个特殊的经济划算的平台。想要在这个上下文中理解分布式系统的行为,就需要监控那些横跨了不同的应用、不同的服务器之间的关联动作。

常用的监控组件

市面上的APM(Application Performance Management)理论模型大多都是借鉴Google Dapper论文,笔者重点关注了以下几种APM组件:

  • Zipkin
    由Twitter公司开源,开放源代码分布式的跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。Spring Cloud Sleuth中集成了Zipkin。
  • Pinpoint
    Pinpoint是一款对Java编写的大规模分布式系统的APM工具,由韩国Naver公司开源的分布式跟踪组件。
  • Skywalking
    一款国产的APM组件,是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。

其他类似的组件还有美团点评的CAT,淘宝的鹰眼EgleEye。我们认为链路监控组件的选择要考虑下列要求:

  • 探针的性能消耗。
    APM组件服务的影响应该做到足够小。在一些高度优化过的服务中,即使一点点损耗也会很容易被察觉到,而且有可能迫使在线服务的部署团队不得不将跟踪系统关停。

  • 易用性
    对于应用的程序员来说,是不需要知道有跟踪系统这回事的。所以,引入链路监控组件应该是对开发人员透明的。如果一个跟踪系统想生效,而必须要开发者主动配合,往往由于跟踪系统在应用中植入代码的bug或疏忽导致应用出问题。

  • 可扩展性
    能够支持的组件越多越好,或者提供便捷的插件开发API,对于一些没有监控到的组件,应用开发者也可以自行扩展。

  • 数据的分析
    数据的分析要快 ,分析的维度尽可能多。跟踪系统能提供足够快的信息反馈,就可以对生产环境下的异常状况做出快速反应。分析要全面,避免二次开发。

基础概念

上面列出的几种组件中,Zipkin组件是严格按照Google Dapper论文实现的,下面介绍其中涉及的基本概念:

  • Span
    基本工作单元,一次链路调用(可以是RPC,DB等没有特定的限制)创建一个span,通过一个64位ID标识它,uuid较为方便,span中还有其他的数据,例如描述信息,时间戳,key-value对的(Annotation)tag信息,parent-id等,其中parent-id可以表示span调用链路来源。

  • Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识。比如运行的分布式大数据存储一次Trace就由一次请求组成。

  • Annotation注解
    用来记录请求特定事件相关信息(例如时间),通常包含四个注解信息:

    • CS:Client Sent,表示客户端发起请求
    • SR:Server Receive,表示服务端收到请求
    • SS:Server Send,表示服务端完成处理,并将结果发送给客户端
    • CR:Client Received,表示客户端获取到服务端返回信息

小结

本文主要介绍了链路追踪的基本概念。Spring Cloud Sleuth 提供了分布式链路追踪的解决方案,用以追踪微服务系统中的某一次的请求完整过程。下面的文章将会继续介绍分布式链路追踪的相关概念。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。