0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

调用链监控原理浅析

Linux爱好者 来源:YXQ 2019-08-09 17:42 次阅读

「 调用链监控 」是在微服务兴起后才有的一种新流行的监控模式。因为在我们传统单体应用的项目中,不存在服务链/调用链的概念,所以也就根本没有调用链监控的需求了。

当我们开始微服务架构之后,我们的很多服务变成分布式的了,并且我们对服务进行了拆分,拆分之后,用户的一个请求进来,会依次经过不同的服务节点进行处理,处理完成后再返回结果给用户。那么在整个处理的链条中,如果有任何一个节点出现了延迟或者问题,都有可能导致最终的结果出现异常,有的时候不同的服务节点甚至是由不同的团队开发的、部署在不同的服务器上,那么在这么错综复杂的环境下,我们想要排查出是链条中的具体哪个服务节点出了问题,其实并不容易。

因此大家就想到了一个办法,将这个请求经过的每一个节点都记录下来,形成一个完整的调用链监控系统,那么一旦发生请求调用异常的情况,只需要去排查这个调用链日志就能很清楚看到出错的环节在哪儿。

一、为什么需要「 调用链监控 」?

「调用链监控」是在微服务架构中非常重要的一环。它除了能帮助我们定位问题以外,还能帮助项目成员清晰的去了解项目部署结构,毕竟一个几十上百的微服务,相信在运行时间久了之后,项目的结构很可能就是下面图片这样了,在这种情况下,团队开发者甚至是架构师都不一定能对项目的网络结构有很清晰的了解,那就更别谈系统优化了。

好了,说了这么多,咱们下面就来具体看一下「调用链监控」的作用有哪些:

项目网络拓扑图:

我们可以根据「调用链监控」中记录的链路信息,给项目生成一张网络调用的拓扑图。通过这张图,我们就可以知道系统中的各个服务之间的调用关系是怎样的,以及系统依赖了哪些服务。并且还可以起到监控全局服务的作用,便于架构师掌握系统的状态。

快速定位问题:

这个作用前面一直在讲,微服务架构下,问题定位就变得非常复杂了,一个请求可能会经过多个服务节点,那么有这么一套调用链监控系统就能让开发人员快速的定位到问题和相应模块。

优化系统:

优化系统也是「调用链监控」很重要的一个功能。因为我们记录了请求在调用链上每一个环节的信息,我们就可以通过这个来找出系统的瓶颈,做出针对性的优化。还可以分析这个调用路径是否合理,是否调用了不必要的服务节点,是否有更近、响应更快的服务节点。通过对调用链路的分析,我们就可以找出最优质的调用路径,从而提高系统的性能。

提高团队成员自律:

上面都是系统层面的作用。但如果有了「调用链监控」之后,对团队开发人员的帮助也是非常大的。因为团队所有成员都可以通过这个调用链监控系统看到系统各个模块的状态,相当于给了开发同学一个放大镜,以前开发同学完成项目交付后,只要没有出现问题,可能不太关心系统的优化,但是有这个调用链监控系统之后,哪个模块性能高,哪个模块问题大,一眼就能分辨,通过这么一个看板,开发同学慢慢的也会对自己负责的模块有更多的责任感,也会很自觉的去优化自己的模块。这种习惯的养成,对研发团队而言,非常的重要。

二、「 调用链监控」的原理?

在调用链监控系统中,有几个核心概念需要了解:

Trace:

Trace是指一次请求调用的链路过程,trace id 是指这次请求调用的ID。在一次请求中,会在网络的最开始生成一个全局唯一的用于标识此次请求的trace id,这个trace id在这次请求调用过程中无论经过多少个节点都会保持不变,并且在随着每一层的调用不停的传递。最终,可以通过trace id将这一次用户请求在系统中的路径全部串起来。

Span:

Span是指一个模块的调用过程,一般用span id来标识。在一次请求的过程中会调用不同的节点/模块/服务,每一次调用都会生成一个新的span id来记录。这样,就可以通过span id来定位当前请求在整个系统调用链中所处的位置,以及它的上下游节点分别是什么。

Annotation:

是指附属信息,可以用于附属在每一个Span上自定义的数据。

具体参考下图:

从图中可见,一次请求只有一个唯一的trace id=12345,在请求过程中的任何环节都不会改变。在这个请求的调用链中,SpanA调用了SpanB,然后SpanB又调用了SpanC和SpanD,每一次Span调用都会生成一个自己的span id,并且还会记录自己的上级span id是谁。通过这些id,整个链路基本上就都能标识出来了。

好了,了解了核心概念之后,我们再来看一下它具体是如何工作的,下面选取Twitter开源的Zipkin原理图作为参考:

所有的调用链监控系统都由 数据埋点采集、数据存储处理、数据分析展示 几大部分组成,Zipkin也不例外。

图中左上角Reporter部分集成到应用程序中采集数据,并将数据上报,由Collector进行收集,然后通过Storage模块负责存储,落地到存储系统中(Zipkin用的是Cassandra)。而API模块是可以将处理后的数据提供对外服务的,UI模块就是数据统计展示层了。

三、「 调用链监控」的应用?

了解了调用链监控的原理之后,我们再看看目前业内有哪些主流的开源调用链监控系统:

CAT

CAT是由大众点评开源的一款调用链监控系统,基于JAVA开发的。有很多互联网企业在使用,热度非常高。它有一个非常强大和丰富的可视化报表界面,这一点其实对于一款调用链监控系统而来非常的重要。在CAT提供的报表界面中有非常多的功能,几乎能看到你想要的任何维度的报表数据。

CAT有个很大的优势就是处理的实时性,CAT里大部分系统是分钟级统计。

CAT主要提供的报表有:

Transaction报表:

主要是监控一段代码运行情况,如:运行次数、QPS、错误次数、失败率、响应时间等。

Event报表:

主要是监控一行代码/一个事件运行次数,如:程序中某个事件运行了多少次、错误了多少次等。Event报表的整体结构与Transaction报表几乎一样,只缺少响应时间的统计。

Problem报表:

主要是统计项目在运行过程中出现的问题,根据Transaction与Event的数据分析出来系统可能出现的异常,比如访问较慢等。

Heartbeat报表:

以一分钟为周期,定期向服务端汇报当前运行的一些状态,如:JVM状态、Memory、Thread等。

Business报表:

业务监控报表,如订单指标、支付数据等业务指标。

Open Zipkin

Zipkin由Twitter开源,支持的语言非常多,基于 Google Dapper 的论文设计而来,国内外很多公司都在用,文档资料也很丰富。在上面讲原理的环节已经介绍过了Zipkin,这里就不赘述了,下面是示例图:

Naver Pinpoint

Pinpoint中的服务关系依赖图做得非常棒,超出市面上任何一款产品。另外,Pinpoint因为采用字节码增强方式去埋点,所以在埋点的时候是不需要修改业务代码的,非侵入式的,非常适合项目已经完成之后再增加调用链监控的时候去使用的方案。但是也是由于采用字节码增强的方式,所以它目前仅支持JAVA语言。

以上,就是对微服务架构中「 调用链监控」的一些思考。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微服务
    +关注

    关注

    0

    文章

    117

    浏览量

    7241

原文标题:微服务架构之「 调用链监控 」

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    突破无线监控网络路高带宽瓶颈

    的优点,无线技术才会在监控领域被用户越来越看重,也为监控集成商提供了非常好的商业机会。无线聚合满足监控网络路高带宽需求    虽然无线技术正在
    发表于 03-18 12:51

    浅析uCosII

    浅析uCosII
    发表于 08-20 13:26

    医疗冷监控系统

    系统的复杂性决定了,人根本不可能进行实时监控,这样不仅会浪费大量人力资源,同时不容易提前预警,而采用GPRS远程监控方案,可以方便的对分布的冷系统进行集群化管理,提前预警等。适用范围中心血站、疫苗
    发表于 09-09 16:29

    调用温度生成子VI,实现温度监控

    调用温度生成子VI,实现温度监控
    发表于 05-31 17:43

    低功耗蓝牙上层架构浅析

    低功耗蓝牙上层架构浅析低功耗蓝牙架构上层有两个基础的服务就是 GAP和GATT,这个跟android的framework相似,系统提供服务,用户调用接口,设置回调,填充参数就可以完成整个连接和传输
    发表于 04-12 11:31

    数十万应用结点全息监控,ARMS新上线的应用监控神器到底有多牛?

    。• 通过ARMS特制的日志API和全息排查功能,用户还可以将业务信息进一步关联到具体的调用中,快速定位相关业务信息的调用上下文。和同类APM类工具相比,基于鹰眼的ARMS应用
    发表于 12-25 13:55

    “前端+应用”两大监控利器商业化首发 ARMS领跑APM市场

    ,快速定位分布式调用中的问题点。• 通过ARMS特制的日志API和全息排查功能,用户还可以将业务信息进一步关联到具体的调用中,快速定位相关业务信息的
    发表于 03-14 11:30

    请问基于GPS/GPRS冷运输车辆监控系统是怎么设计的 ?

    本帖最后由 一只耳朵怪 于 2018-5-28 09:31 编辑 题目:基于GPS/GPRS冷运输车辆监控系统的设计要求:单片机采集车厢内温湿度,利用GPRS将GPS定位的车辆信息和采集到
    发表于 05-26 18:51

    基于分布式调用监控技术的全息排查功能

    作为鹰眼的商业化产品,用于全路APM监控的阿里云业务实时监控服务 (ARMS) , 基于鹰眼的全息排查沉淀,近日推出了基于分布式调用
    发表于 08-07 17:02

    浅析team路聚合

    team:1.team也是路聚合的一种方式a.最多支持八块网卡b.支持模式:广播、轮询、主备、负载均衡
    发表于 07-12 07:03

    监控工具Skywalking使用指南

    国产全监控工具Skywalking
    发表于 09-03 14:26

    上海逻迅丨冷物流温湿度监控 系统构架图

    内。本公司提供的冷系统管理解决方案,集无线SmartNode 通讯技术、温湿度传感技术、物联网技术、数据库技术于一体,对冷物流中的环境温湿度进行实时监控,实现了冷物流过程中的可视
    发表于 10-08 15:18

    浅析方程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、磁方程前言异步电机转子磁场定向控制提示:以下是本篇文章正文内容,下面案例可供参考一、磁方程...
    发表于 09-06 08:19

    MC68HC908LJ12 监控ROM 中的子程序调用

    MC68HC908LJ12 监控ROM 中的子程序调用
    发表于 05-14 14:50 21次下载

    浅析JVM虚方法表和方法调用

    今天我们来填坑,在之前的一篇文章深挖⾯向对象编程三⼤特性 --封装、继承、多态中 我们遗留了一个问题:当父类引用指向子类对象时,JVM是如何知晓调用的是哪个子类的方法?
    的头像 发表于 03-02 09:57 712次阅读
    <b class='flag-5'>浅析</b>JVM虚方法表和方法<b class='flag-5'>调用</b>