关闭

[置顶] 分布式系统调用链监控

标签: 分布式调用链监控Dapper
15826人阅读 评论(19) 收藏 举报
分类:

分布式系统调用链监控

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

全链路性能监控

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

这里写图片描述

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

一些效果图

这里写图片描述

这里写图片描述

这里写图片描述

授权给“程序文摘”。

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

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。

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

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

4
2
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

云栖社区 2017-05-04 12:09 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 分布式调用系统的现状 当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分...
  • u011277123
  • u011277123
  • 2017-05-08 08:48
  • 2991

CAT调用链系统设计

基于Cat的分布式调用追踪 Cat是美团点评出的一款APM工具,同类的产品也有不少,知名的开源产品如zipkin和pinpoint;国内收费的产品如oneapm。考虑到Cat在互联网公司的应用比较广,因此被纳入选型队列,我也有幸参与技术预言。 使用Cat断断续续将近两...
  • blacksoil55
  • blacksoil55
  • 2017-10-24 12:43
  • 221

分布式系统监控平台-Overwatch架构设计(已开源)

作者介绍:张玄,毕业于南京大学软件学院。初中开始自学编程,高中参与上海计算机竞赛,荣获第一名。2016年毕业后就职于达达-京东到家基础架构团队,从事基础组件、系统监控等开发工作。 Overwatch是达达-京东到家自主研发并开源的分布式系统监控平台,目前广泛用于内部系统的监控,快速定位...
  • mergerly
  • mergerly
  • 2017-11-16 17:44
  • 159

分布式监控系统

美团CAT https://github.com/dianping/cat http://tech.meituan.com/CAT_in_Depth_Java_Application_Monitoring.html Akamai互联网实时监控 https://www.akamai.com/cn...
  • liushaofang
  • liushaofang
  • 2016-11-10 18:14
  • 212

Hydra - 京东开源的基于Dubbo的调用分布跟踪系统

 Hydra - 京东开源的基于Dubbo的调用分布跟踪系统 1 概述1.1 研发背景 支撑互联网应用的各种服务通常都是用复杂大规模分布式集群来实现的。而这些互联网应用又构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开 发、可能使用不同的...
  • wilsonke
  • wilsonke
  • 2014-10-09 18:06
  • 35218

使用zipkin做分布式链路监控

介绍 Zipkin 为一个分布式的调用链跟踪系统( distributed tracing system ) ,设计来源于 google dapper paper 官方网站 http://zipkin.io/ 快速入门 安装方式一:使用zipkin官方提供的jar启动服务 zipkin官方提供了一...
  • u013815546
  • u013815546
  • 2017-06-12 02:51
  • 5087

分布式监控系统的设计与实现

  • 2017-10-13 17:24
  • 2.27MB
  • 下载

分布式系统的监控和可维护性

<br />当一个100万行以上代码的分布式系统或者复杂的生产系统部署上去后,监控和维护便会成为很大的问题,<br />如旺旺/QQ 这样的大型IM系统,或者 Alimail这样的邮件系统,以及taobao.com这样的网站。<br />当生产系统中的进程以百为单...
  • jackem
  • jackem
  • 2011-03-06 15:10
  • 3300

分布式系统全链路监控方案设计

分布式系统全链路监控方案设计       在分布式系统中,全链路监控系统,跟踪requestid经过了哪些server,方便定位log的位置,能在一定程度上缓解维护压力。
  • chenglinhust
  • chenglinhust
  • 2015-12-23 10:02
  • 5904

微服务下的APM全链路监控

现在微服务很热,微服务对APM最大的影响是什么?如何构建微服务平台?王东讲师来帮你解答这一系列未知的问题。 王东 毕业于天津大学,毕业后一直从事软件相关研发和架构设计工作, 曾经在普元软件任资深架构师、IBM GBS任咨询经理、亚马逊任 架构师等,后加入创业公司,从事研发和管理工作。 什么是AP...
  • nfzhlk
  • nfzhlk
  • 2017-12-21 06:37
  • 198
    作者
    https://github.com/sea-boat

    公众号:(内容包括分布式、机器学习、深度学习、NLP、Java深度、Java并发核心、JDK源码、Tomcat内核等等)



    微信:

    打赏作者

    如果您觉得作者写的文章有帮助到您,您可以打赏作者一瓶汽水(*^__^*)

    个人资料
    • 访问:1019226次
    • 积分:13611
    • 等级:
    • 排名:第1100名
    • 原创:320篇
    • 转载:5篇
    • 译文:1篇
    • 评论:342条
    博客专栏
    最新评论