共计 1285 个字符,预计需要花费 4 分钟才能阅读完成。
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,表明上下游请求的关系;利用这些信息,可以可视化地分析服务调用链路和服务间的依赖关系。