`

分布式系统调用链监控

阅读更多

分布式系统调用链监控

  • 应用架构由集中式向分布式演进后,整个调用关系变得复杂。
  • 分布式架构由复杂且较大规模集群构成,各个应用之间相当独立,可能由不同团队、不同语言实现。
  • 系统一个完整的调用过程可能横跨多个服务及数据中心。
  • 复杂的调用导致系统出问题后难以定位问题。
  • 无法准确知道整体系统性能及运行情况。

全链路性能监控

一个请求完整的调用链可能如下图,经过多个系统服务,调用关系复杂。

这里写图片描述

期间我们会关注各个调用的各项性能指标,比如吞吐量(TPS)、响应时间及错误记录等。

  • 吞吐量,根据拓扑可相应计算组件、平台、物理设备的实时吞吐量。
  • 响应时间,包括整体调用的响应时间和各个服务的响应时间等。
  • 错误记录,根据服务返回统计单位时间异常次数。

全链路性能监控从整体维度到局部维度展示各项指标,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。

Google Dapper

系统整个调用链
1. 当用户发起一个请求时,首先到达前端A服务,然后分别对B服务和C服务进行RPC调用;
2. B服务处理完给A做出响应,但是C服务还需要和后端的D服务和E服务交互之后再返还给A服务,最后由A服务来响应用户的请求;
这里写图片描述

对整个调用过程的追踪
1. 请求到来生成一个全局TraceID,通过TraceID可以串联起整个调用链,一个TraceID代表一次请求。
2. 除了TraceID外,还需要SpanID用于记录调用父子关系。每个服务会记录下parent id和span id,通过他们可以组织一次完整调用链的父子关系。
3. 一个没有parent id的span成为root span,可以看成调用链入口。
4. 所有这些ID可用全局唯一的64位整数表示;
5. 整个调用过程中每个请求都要透传TraceID和SpanID。
6. 每个服务将该次请求附带的TraceID和附带的SpanID作为parent id记录下,并且将自己生成的SpanID也记录下。
7. 要查看某次完整的调用则只要根据TraceID查出所有调用记录,然后通过parent id和span id组织起整个调用父子关系。

这里写图片描述

调用链监控核心工作

  • 调用链数据的生成,对整个调用过程的所有应用进行埋点并输出日志。
  • 调用链数据采集,对各个应用中的日志数据进行采集。
  • 调用链数据存储及查询,对采集到的数据进行存储,由于日志数据量一般都很大,不仅要能对其存储,还需要能提供快速查询。
  • 指标运算、存储及查询,对采集到的日志数据进行各种指标运算,将运算结果保存起来。
  • 告警功能,提供各种阀值警告功能。

整体架构

这里写图片描述
* 通过AGENT生成调用链日志。
* 通过logstash采集日志到kafka。
* kafka负责提供数据给下游消费。
* storm计算汇聚指标结果并落到es。
* storm抽取trace数据并落到es,这是为了提供比较复杂的查询。比如通过时间维度查询调用链,可以很快查询出所有符合的traceID,根据这些traceID再去hbase查数据就快了。
* logstash将kafka原始数据拉取到hbase中。hbase的rowkey为traceID,根据traceID查询是很快的。

AGENT无侵入部署

通过AGENT代理的无侵入式部署,将性能测量与业务逻辑完全分离,可以测量任意类的任意方法的执行时间,这种方式大大提高了采集效率,并且减少运维成本。根据服务跨度主要分为两大类AGENT:

  • 服务内AGENT,这种方式是通过Java的agent机制,对服务内部的方法调用层次信息进行数据收集,如方法调用耗时、入参、出参等信息。

  • 跨服务AGENT,这种情况需要对主流RPC框架以插件形式提供无缝支持。并通过提供标准数据规范以适应自定义RPC框架:

    1. Dubbo支持
    2. Rest支持
    3. 自定义RPC支持

比如生成的数据格式如下:

{
    "hostIp": "192.168.4.1",
    "instanceName": "TracingDemo",
    "isEntry": true,
    "errCode": 0,
    "spanId": "3cbfe7f0-141c-4597-8b15-38d2fb145e01",
    "parentId": "16a52a9f-e697-45ce-92fb-7395339eae4b",
    "traceId": "e5549498-60f3-4870-8483-fe26f6d0367b",
    "className": "dao.impl.ProductDaoImpl",
    "methodName": "queryProduct",
    "inParam": "",
    "createTime": 1448442004537,
    "returnTime": 1448442004537,
    "callTime": 5
}

 

 

调用链监控好处

  • 准确掌握生产一线应用部署情况;
  • 从调用链全流程性能角度,识别对关键调用链,并进行优化。
  • 提供可追溯的性能数据,量化 IT 运维部门业务价值。
  • 快速定位代码性能问题,协助开发人员持续性的优化代码;
  • 协助开发人员进行白盒测试,缩短系统上线稳定期。

一些效果图

这里写图片描述

这里写图片描述

这里写图片描述

  • 大小: 17.7 KB
分享到:
评论

相关推荐

    分布式服务调用链客户端

    在分布式系统中,服务调用通常涉及多个微服务之间的交互,这使得传统的单体应用中的调试和性能分析变得复杂。服务调用链能够提供一个全局视角,它记录了请求从客户端发出,经过各个服务节点,最终返回到客户端的完整...

    分布式系统服务链追踪与监控.pdf

    分布式系统服务链追踪与监控 分布式系统服务链追踪与监控是近年来随着云计算和分布式架构的发展而产生的一个重要技术领域。分布式系统由分布在不同节点上、通过网络相互通信和服务调用的组件构成。由于其分布式特性...

    zipkin 分布式调用链跟踪

    分布式调用链跟踪是一种用于监控和调试分布式系统中各个服务之间调用关系的技术。随着微服务架构和服务网格技术的流行,分布式系统的规模和复杂性日益增加,调用链跟踪技术逐渐成为保证系统稳定性和性能的关键工具。...

    基于分布式跟踪的业务调用链监控技术在湖南电信的探索和应用.pdf

    【分布式跟踪技术在业务调用链监控中的应用】 在当今的IT行业中,随着微服务架构的广泛应用,业务系统往往由分布在不同节点上的多个服务协同完成。湖南电信在2017年采用“平台+应用”的技术架构,构建了智慧运营BSS...

    分布式系统全链路监控介绍包括架构,原理等

    一个请求完整的调用链可能如下图,经过多个系统服务,调用关系复杂。期间我们会关注各个调用的各项性能指标,比如吞吐量(TPS)、响应时间及错误记录等。吞吐量,根据拓扑可相应计算组件、平台、物理设备的实时吞吐...

    分布式实时监控系统

    2. 链路收集和分析:分布式系统中的链路收集是通过在服务调用点埋点(即插入特定代码或配置,用于监控和收集信息),来记录每个服务的调用链路。链路分析则是对收集到的链路数据进行分析处理,提炼出性能数据,包括...

    39_分布式系统中的接口调用如何保证顺序性?.zip

    在分布式系统设计中,接口调用的顺序性是一个重要的考虑因素,特别是在处理事务一致性、数据同步和业务逻辑的正确性时。"39_分布式系统中的接口调用如何保证顺序性?" 这个主题主要探讨了在分布式环境中,如何确保...

    \"鹰眼下的淘宝-分布式调用跟踪系统介绍\"分享总结

    《鹰眼下的淘宝-分布式调用跟踪系统介绍》是一篇深入探讨分布式系统监控与追踪的文章,主要关注于淘宝内部使用的“鹰眼”系统。这篇文章基于作者在ITeye博客上的分享,我们将围绕分布式调用跟踪、系统监控以及相关...

    分布式系统网络教程之采用分布式系统的必要性

    2. **通信机制**:节点间的高效通信是分布式系统的基础,需要选择合适的通信协议和中间件,如RPC(远程过程调用)和消息队列。 3. **容错性**:设计容错机制以确保系统在部分节点故障时仍能正常工作,这可能涉及到...

    分布式系统设计 分布式控制系统的设计

    7. **通信协议**:如RPC(远程过程调用)和消息队列(MQ)等,是分布式系统中节点间通信的基础。例如,gRPC和AMQP协议分别用于结构化和非结构化的通信。 8. **分布式锁和共识算法**:在多节点协作时,如何确保对...

    dubbo分布式系统Rpc调用框架

    《Dubbo分布式系统RPC调用框架深度解析》 在当今的互联网时代,分布式系统的构建已经成为企业级应用的常态。作为一款高性能、轻量级的RPC(远程过程调用)框架,Dubbo在分布式领域的影响力不可小觑。本文将深入探讨...

    Dapper,大规模分布式系统的跟踪系统

    Dapper 是 Google 开发的一个分布式跟踪系统,专门用于解决大规模分布式系统中的跟踪和监控问题。它的设计目标是在不影响现有应用和服务的前提下,提供一种低损耗、应用透明的大范围部署方案。Dapper 的设计受到了...

    微服务调用链监控CAT架构和实践

    微服务调用链监控是现代分布式系统中至关重要的一个环节,它可以帮助开发者了解服务间的交互情况,定位性能瓶颈,以及在出现问题时迅速找到故障源。CAT(Catapulta)是阿里巴巴开源的一款实时分布式应用性能监控平台...

    基于ZooKeeper的一种分布式系统架构设计与实现.pdf

    服务监管则是监控服务运行状态的过程,对于提高分布式系统的可靠性至关重要。服务加载是指根据服务注册的信息,将服务实例加载到系统中进行工作。通信服务则是指分布式系统中各个服务之间进行通信的机制。 文章指出...

    23分布式系统关键技术:全栈监控1

    2. **跨系统调用串联**:在分布式环境中,服务间存在复杂的调用关系,监控系统需追踪请求在整个系统中的调用链路,以便于理解服务之间的相互作用。 3. **实时报警与自动处置**:监控系统需要实时发现异常,并自动...

    设计开发 分布式系统原理与范型 第二版 完整版

    分布式系统是现代信息技术领域中的重要组成部分,它涉及多个计算节点通过网络进行协同工作,共同处理任务和数据。《设计开发 分布式系统原理与范型 第二版》完整版为读者提供了一个深入理解和实践分布式系统设计与...

    分布式调用跟踪与监控实战

    【分布式调用跟踪与监控实战】是针对现代互联网架构中分布式系统复杂性的解决方案。随着微服务、消息收发、分布式数据库、缓存等组件的普及,系统间的调用关系变得错综复杂,需要有效的工具来追踪和监控这些调用过程...

Global site tag (gtag.js) - Google Analytics