分布式系统调用链监控

分布式系统调用链监控

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

全链路性能监控

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

期间我们会关注各个调用的各项性能指标,比如吞吐量(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 运维部门业务价值。
  • 快速定位代码性能问题,协助开发人员持续性的优化代码;
  • 协助开发人员进行白盒测试,缩短系统上线稳定期。

一些效果图

授权给“程序文摘”。

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

时间: 2024-09-08 06:25:49

分布式系统调用链监控的相关文章

程超:手把手教你动手扩展分布式调用链

一.说在前面 微服务是当下最火的词语,现在很多公司都在推广微服务,当服务越来越多的时候,我们是否会纠结以下几个问题: 面对一笔超时的订单,究竟是哪一步处理时间超长呢? 数据由于并发莫名篡改,到底都谁有重大嫌疑呢? 处理遗漏了一笔订单,曾经是哪个环节出错把它落下了? 系统莫名的报错,究竟是哪一个服务报的错误? 每个服务那么多实例服务器,如何快速定位到是哪一个实例服务器报错的呢? 现在很多系统都要求可用性达到99.9%以上,那么我们除了增加系统健壮性减少故障的同时,我们又如何在真正发生故障的时候,快

基于云计算的分布式校园视频监控系统的设计

基于云计算的分布式校园视频监控系统的设计 朱琳 针对传统校园视频监控系统存在的因数据传输量过大而造成的带宽资源不足 数据存储量有限 系统计算能力不足等问题提出基于云计算的分布式校园视频监控系统 通过分布式计算将海量视频数据拆分处理应用虚拟化资源替代有限的物理资源实现存储的的完全虚拟化提供更强的存储和共享功能 并将校园监控系统的有线网络与无线网络融合在一起最合理化的使用系统资源 实验证明应用云计算架构的校园视频监控系统视频图像清晰流畅信息处理能力大大提高拥有海量存储能力具有安全稳定高性能和高可扩展

【开源】.net 分布式架构之监控平台

开源地址: http://git.oschina.net/chejiangyi/Dyd.BaseService.Monitor .net 简单监控平台,用于集群的性能监控,应用耗时监控管理,统一日志管理等多维度的性能监控分析. 集群的性能监控:(需要服务器部署监控节点) 目前仅支持windows服务器监控, 支持windows自带的性能分析器所有配置项监控,及预警的定制. 支持自定义的插件扩展服务器采集dll进行各类性能采集及预警的定制. 支持性能采集快照. 支持cpu,内存,磁盘读写,网络上传

Python用rpc实现分布式系统调用的原理及实例

rpc概念? rpc 一般俗称,远程过程调用,把本地的函数,放到远端去调用. 通常我们调用一个方法,譬如: sumadd(10, 20),sumadd方法的具体实现要么是用户自己定义,要么存在于该语言的库函数中,也就说在sumadd方法的代码实现在本地,它是一个本地调用! "远程调用"意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个地方(分布到各个服务器),但是用起来像是在本地. rpc远程调用原理 : 比如 A调用B提供的remoteAdd方法: 首先A与B之间建立一个

打造立体化监控体系的最佳实践——分布式调用跟踪和监控实践

摘要: 本文将从分布式系统调用的复杂现状说起,具体分析调用链的三大使用场景,以及调用链的最佳实践,简述如何将调用链作为排查问题的核心,通过其可以将各类数据关联在一起,提高问题排查能力. [最新快讯]EDAS上线方法追踪新特性,打通应用诊断的"最后一公里". 1. 分布式调用系统的现状 当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务.消息收发.分布式数据库.分布式缓存.分布式对象存储.跨域调用,这些组件共同构成了繁杂的分布式网络. 如上图右侧

分布式数据流监控公司SevOne获1.5亿美元融资

专门从事分布式计算系统数据流监控的SevOne从 Bain Capital 处获 1.5 亿美元的巨额融资.这表明数据正在成为许多 IT 采购背后的驱动力,即便在系统层面也是如此.SevOne 是一家分布式系统性能监控解决方案提供商.销售挂到分布式系统上的监控设备,可以让用户拦截.监控这些系统产生的数据并对其进行分析.数据来源可以多样化,包括网络引擎.服务器和存储等任何地方.其部署采用 P2P 架构,从而实现快速.可伸缩的数据集中化管理.数据对营销的作用越来越大,随着大数据时代的到来,一些分析师

运维改革探索(一):用多层级监控实现可视化运维

作者介绍 朱祥磊,山东移动BOSS系统架构师,负责业务支撑系统架构规划和建设.获国家级创新奖1项.通信行业级科技进步奖2项.移动集团级业务服务创新奖3项,申请发明专利13项. 一.背景 当前运营商业务支撑系统正向云化发展,以某移动公司为例,近年先后进行了经分系统云化.大数据系统建设.BOSS云化,现正在进行CRM云化,同时构建企业级资源池.经过几年的探索,深刻感受到云化给业务支撑系统带来高效低成本的优点,但同时也对运维能力带来了更高的要求,针对传统架构下的运维管理模式已经越来越不适合云化下的要求

区域链实践第一步——区域链测试环境搭建

区域链光速发展,在许多人的期许下,已经成为了互联网下一个革新点.区块链会成就的未来价值互联网,是新时代的基石. IBM中国研究院开发的超能云(SuperVessel)平台提供了给区块链爱好者.开发者的区块链开发测试环境.通过该平台,用户能够免费.快速创建基于Hyperledger Fabric的多节点区块链.并在自己的链上编写智能合约. 通过IBM的SuperVessel,我们能接触区块链,能自己部署和执行智能合约:通过Github上的开源项目,也就是上面提到的Hyperledger Fabri

WebRAY助力某超大型城市打造网站监控预警平台

该市为国家直辖市,国家中心城市,超大城市,经济繁荣,承担国家重要活动重大事件多,社会影响大.全市重点网站数量2000+,独立二级站点4000+. 日前,各类网站被攻击趋于频繁,攻击手段也是越来越恶劣,为了应对日趋严峻的网络信息安全形势,该市网监部门计划运用网络信息安全监测和预警手段,搭建技术支撑平台,对该市网站和信息系统开展安全大检查工作,定期探查漏洞风险和实时监控攻击威胁等状况. 在威胁发生前进行漏洞扫描,在威胁发生后的第一时间发现并进行应急处理.提升网络信息安全监测与预警能力,贯彻习近平总书