分布式链路追踪:总体介绍
【摘要】 链路追踪是分布式中一个排查问题的重要方式,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)