为了快速适应业务变化,聚焦业务迭代,各大厂商都进行了分布式架构的升级改造。特别是近几年,随着微服务与云原生的流行,分布式系统的规模愈发庞大,内部服务之间的调用也越来越复杂。
然而,引入分布式架构的同时,也带来相应的稳定性问题。各项服务的开发人员、开发语言和部署节点等情况很可能各不相同,当分布式系统整体出现异常或者性能瓶颈的时候,依靠传统的指标监控和日志排查已经很难快速定位到出问题的地方。因此当下分布式系统对可观测性提出了更高的要求,需要能够解决以下痛点:
基于上述痛点,分布式链路追踪系统应运而生,其目的在于通过洞察分布式服务之间的相互调用,自动发现系统存在的稳定性隐患,从而为 SRE & 研发 定位风险提供有效的数据支撑。分布式链路追踪可以通过以下两块内容完整还原一整条调用链路:
同时,基于链路聚合可以产生站点内部流量的全局视角,形成网络拓扑。
分布式链路追踪系统近年来发展迅速,业内也涌现出了一些开源项目和框架,并且为了实现各项目和框架的接口的统一,发展出了 OpenTracing 与 OpenTelemetry 等标准。通过链路标准的制定和推广,有利于用户通过一套数据采集、处理、导出流程,轻松对接多种云厂商,避免vendor锁定,有效的降低了对接和使用的成本。
BOS一直以来致力于为用户提供无缝的可观测能力,持续拥抱可观测性标准,作为OpenTelemetry项目的重要贡献者,率先在业内提供了完整的异构应用 OpenTelemetry 链路接入方案,并已经在众多机构中成功落地。
业务智能可观测服务 BOS(Business-Intelligent Observability Service)是基于蚂蚁大规模技术风险防控实践自研的一套运维平台,具有业务数字化运维、全息可观测定位、智能场景化防控、一体化数据分析和大规模实践等产品特性,将业务场景可视化和数据业务语义化,赋能云上/云下的异构应用开箱即用的智能可观测能力,为业务提供全方位的稳定性保障,建设业务观测新范式,让稳定更有力量。
BOS的分布式链路追踪系统提供了以下丰富的产品功能,致力于帮助用户定位和解决微服务架构下的性能问题:
●应用调用拓扑及详细性能指标
○根据链路数据动态生成,帮助用户梳理微服务架构下各应用之间的调用关系。
○根据调用耗时,调用错误率等性能指标,自动定位和标注异常应用和异常调用关系,帮助用户快速定位故障。
●链路数据查询
○支持多维度的查询条件,例如超过多少耗时,调用是否失败,具体的调用接口和方法等等,准确定位到感兴趣的调用关系,进而跳转到具体而详细的链路详情展示。
●链路详情展示
○通过多种展现方式,例如树状图,拓扑图、时序图等,帮助用户观测到单条链路的完整调用关系。
○根据每次调用的成功与否以及耗时,自动标注出整条链路中异常或者潜在性能瓶颈的调用,帮助用户快速定位具体的单次调用,通过详尽的单次调用详情,助力用户进行应用调优。
○在链路详情中同时打通了与监控和日志数据的关联,用户可以非常容易的查看到相关联的全量可观测性数据,帮助定位问题的根本原因。
为了方便用户完成接入,BOS提供了业内所有常用的链路数据格式的对接能力,涵盖了OpenTelemetry,SofaTracer,Skywalking,Zipkin以及Jaeger等等,用户应用无论之前是否已经接入了链路框架,都可以快速的接入并体验BOS分布式链路追踪系统的完整能力。
通过上述BOS分布式链路追踪产品提供的丰富功能,将赋予用户以下的宏观能力:
风险定位
在分布式场景下,服务调用错综复杂,并且涉及到众多中间件的调用,出现问题的时候如何排查和定位具体的问题应用和服务,如果依靠传统的单应用监控指标或者日志,必然要涉及整条调用链路所有相关应用指标的来回切换,费时费力非常困难。
通过BOS分布式链路跟踪产品能够帮助用户迅速定位到有问题的应用和服务,协助快速解决风险。
问题分析与快速定位示意图
应用性能优化
BOS分布式链路产品通过应用调用拓扑和链路详情等分析能力,全方位的展示应用以及具体接口方法层面的性能数据,可以帮助用户快速定位到具体的单个造成性能瓶颈的调用所在或者是否存在不合理的调用关系,进而帮助用户进行应用的性能优化。
性能优化示意图
洞察微服务调用拓扑
在大规模的微服务系统中,完整的链路调用拓扑可以提供一个全局的视角,帮助发现不同应用之间的依赖关系,实时的以端到端的方式展示微服务应用架构。
此外针对应用开发者,也可以实时展示单个应用上下游调用关系的拓扑图。
通过如下的服务调用拓扑图,用户可以获得:
服务调用拓扑图
更进一步,对于感兴趣的应用,可以查看具体的应用性能详情,了解应用在指定时间范围内的性能指标数据。具体的数据涵盖了HTTP调用、RPC调用、SQL调用、NoSQL调用、消息调用的黄金指标统计(比如吞吐量、平均响应耗时、错误率、满意度等)趋势和指标明细。
同时应用性能详情支持基于应用 > 上下游应用 > 接口等逐层下钻分析,建立从底层至上层间的数据关联信息,从而深度分析分布式场景下影响应用性能的问题根因。若发现某个接口调用异常,可跳转链路查询界面,按照相关参数查询链路。
服务调用拓扑-应用性能详情图
定位异常调用与应用
服务调用的最关键的指标是 错误率 和 平均耗时,通过实时计算这两项指标,配合上可自定义的评判标准,可以生成上述服务调用拓扑图中部分呈现为黄色异常与红色错误状态的服务调用和应用自身。
应用评价标准
异常应用的评价是通过实时计算应用的平均接口耗时以及错误率实现的,用户可以配置阈值,一旦超过阈值,将分别呈现为黄色异常与红色错误状态。
调用评价标准
异常调用的评判采用的是Apdex标准,Apdex全称是Application Performance Index,是用于评估应用性能的开放标准,从用户的角度出发,将响应时间的表现转化为对应用性能的可量化满意度评价。
Apdex根据响应时间以及代表用户满意的响应时间界限T,定义了三种性能表现:
将一段时间的响应时间统计出来后,便可根据下述计算公式得出Apdex指数:
Apdex指数 = (满意数 + 0.5 * 可接受数)/ 总样本数 。
Apdex指数大于0.7的被认为拥有较为良好的性能,低于0.7将会被标红,提醒可能存在的性能问题。
应用性能调优
当排查到异常调用或者异常应用存在的时候,研发人员可以借助分布式链路追踪服务进行性能调优。
在应用性能分析过程中,对于技术研发来说,最为关键的指标是吞吐量、平均响应耗时、错误率。因此,分布式链路产品设计过程中,BOS 通过聚合链路数据,轻松展示服务调用明细,提供分钟级数据统计。如上述 服务调用拓扑-应用性能详情图 所示。
当发现平均响应耗时较高或者错误率较高请求时,通过点击明细最右边一栏的实时链路查询按钮,可以跳转到包含相关调用信息的链路查询页面,通过对耗时的排序,可以定位到耗时较高的单条链路。
链路查询页面图
进而通过点击感兴趣的调用链路,可以看到更为详细的调用树状图,单链路拓扑图以及时序图:
链路详情-树状图
链路详情-拓扑图
链路详情-时序图
通过以上三种链路详情展示图,可以很方便的找到在整条链路中,哪些调用出现了失败的情况,哪些调用的耗时过长需要优化。
更进一步:
通过链路、日志和监控的全方位信息,应用的研发人员可以很方便的发现问题和瓶颈所在,并加以优化,进入 性能优化->链路分析->性能优化 的正循环中,最终达到满意的性能结果。
应用接入
看到前面的链路分析使用场景,是不是已经很迫不及待要把应用接入到分布式链路追踪系统了?
别着急,接入的方法很多样,也很方便。
接入的核心就是如何为应用生成链路数据,并让分布式链路追踪系统采集到。
我们可以利用业内优秀的链路框架帮助应用进行链路改造,目前业内常用的链路框架有OpenTelemetry,SofaTracer,Skywalking,Zipkin与Jaeger等等,其中一些框架针对部分开发语言和部分中间件可以做到无侵入式的链路改造,还有一些场景需要通过相应的SDK进行链路能力的引入增强。
随后,BOS分布式链路追踪系统可以接收应用框架主动上报上来的链路数据,或者通过采集应用框架打印落盘的链路日志文件来收集链路数据。
以OpenTelemetry为例,Java应用只要接入一个探针,无需修改任何应用代码,即可自动生成链路数据,并通过RPC接口上报至BOS。
数据收集与解析
通过应用接入,BOS分布式链路追踪系统会根据接入方式的不同,分别用不同的方法来接受框架生成的原始链路数据,比如日志采集、RPC接收或者是HTTP协议接收等等。
然后不同原始链路数据的格式也各不相同,因此首先需要对这些原始数据按照不同的规则进行解析,解析后将构建出与框架无关的链路Span数据,这些数据将被保存至链路数据库中。
数据修复
接下来,需要对链路数据进行修复操作,这块修复的原因是,分布式链路数据是一种很特殊的数据类型,两个应用之间的一次调用实际上会产生两条链路数据,分别为客户端Span和服务端Span,而从单个应用的角度出发,应用的视角里不会很清楚的知道调用对端的详细信息,所以这两条链路数据通常情况下都会缺少部分对端的信息。
因此,分布式链路追踪系统会收集链路调用两端各自的Span,然后进行数据修复,借助双方各自的数据修复出调用的完整信息,为后续的指标和拓扑数据计算做准备。
指标计算
下一步,根据链路数据的不同调用类型(HTTP,RPC,SQL,NoSQL,消息等),分别进行相应的性能指标计算和聚合,并将相关指标信息存入时序性数据库中。
拓扑计算
接下来,由于之前已经经过了数据修复,从一个Span里可以同时获取到两端的应用信息,因此可以从应用拓扑的角度分别计算和保存两端的拓扑节点,以及这次调用代表的拓扑边的相关数据。
为了从更多的角度观测拓扑节点和拓扑边的细节:
产品展示
至此,链路分析所需要的所有数据都已经被解析落盘,当用户进行应用拓扑查询或者单条链路查询的时候,BOS分布式链路追踪系统会针对不同场景查询不同类型的数据,进行拓扑或者调用链的还原。其中:
最后,总结一下BOS分布式链路追踪产品的核心特性:
目前,BOS分布式链路追踪产品已经广泛应用在包括交通银行,中华财险,宁波银行,四川农信在内的多家机构,持续帮助用户发现和解决应用故障以及性能问题。
后续我们会持续分享分布式链路追踪能力持续演进过程中的落地与思考,欢迎大家提出任何意见与建议。