1、微服务链路跟踪介绍
1.1、为什么要实现微服务链路跟踪
一个完整的微服务系统一般由成百上千,甚至上几万、几十万、几百万的服务实例构成。在这种规模下,如果出现问题,则准确跟踪问题点会十分困难。所以,需要用链路跟踪工具来监控微服务状态,当出现问题时能及时定位问题点,快速解决问题。
实现微服务链路跟踪主要有以下需求:
**实时监控:**完备的监控系统可以提供及时、准确的性能报告,可以了解请求的路径、请求耗费的时间、网络延迟状况、单个业务逻辑耗费时间等指标
**决策:**可以分析系统瓶颈、解决系统存在的问题,以及当前和未来的决策提供基础数据
**避免技术债务:**系统会根据业务需求不断地进行演变,如果过去遗留的问题没处理好,则会对新的功能产生影响。如果没有跟踪技术,则会产生大量技术债务。技术债务的累计会对修改或升级带来更多的问题
**快速定位故障:**如果要解决问题,则首先要发现问题,然后定位问题的故障点、及时采取措施解决问题。发现、定位、解决问题都非常重要,如果任何一点没有能及时得到解决,则在发生故障后会花费非常长的时间
1.2、微服务链路跟踪的技术要求
一个好的链路跟踪技术应满足以下要求:
**低消耗:**跟踪系统本质是发现某个系统的性能或故障问题,所以它不能反过来影响被监控系统的性能
**应用透明:**应用透明即要求链路跟踪技术对业务系统是透明的,没有侵入性,不会影响开发人员开发业务,或者不会因为开发人员的疏忽而失效
**延展性:**链路跟踪系统应能满足业务系统的发展的需求。当系统越来越庞大和复杂后,链路跟踪技术依然能快速地跟踪产生的数据,并及时地对数据进行统计和生成报表
**可控采样率:**可以通过设置采样率平衡性能消耗和采样质量
**可视化:**具有可视化的控制台也是链路跟踪的一个重要要求
2、认识Sleuth和Zipkin
2.1、Sleuth
Spring cloud 借助了Google Dapper、Twitter Zipkin和Appache HTrace的设计,提供了分布式跟踪的解决方案Sleuth。其兼容Zipkin、HTrace和Log-based追踪微服务的服务调用链路。
Sleuth术语:
跨度(Span):
它是链路跟踪的基本单元。Span通过一个64位的ID来唯一标识,它还包含摘要、时间戳时间、关键值注释(tags)和进度ID
跟踪(Trace):
一系列Span组成一个树状结构(即一个Trace)。和Span一样,Trace以另一个64位的ID来标识
标注(Annotation):
Annotation用于及时记录一个事件,可以定义请求的开始和停止等信息。比如,客户端发起一个请求,Annotation会描述这个Span的开始;服务器端获得请求并准备开始处理它,Annotation可以根据服务器端收到的请求时间戳、客户端发送请求时间戳来计算网络的延迟
2.2、Zipkin
Zipkin主要提供链路追踪的可视化功能。
**Zipkin的原理:**在服务调用的请求和响应中加入ID,表明上下游请求的关系;利用这些信息,可以可视化地分析服务调用链路和服务间的依赖关系。