阿里百度华为等大厂是如何追踪微服务调用的?(下)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 阿里百度华为等大厂是如何追踪微服务调用的?

3 服务追踪系统实现

  • 服务追踪系统的架构
  • image.png
  • 服务追踪系统可以分为三层:
  • 数据采集层,负责数据埋点并上报
  • 数据处理层,负责数据的存储与计算
  • 数据展示层,负责数据的图形化展示

3.1 数据采集层

在系统的各个不同模块中进行埋点,采集数据并上报给数据处理层进行处理。

那么该如何进行数据埋点呢?结合下面这张图来了解一下数据埋点的流程。

image.png

以红色方框里圈出的A调用B的过程为例,一次RPC请求可以分为四个阶段。


CS(Client Send)阶段 : 客户端发起请求,并生成调用的上下文

SR(Server Recieve)阶段 : 服务端接收请求,并生成上下文

SS(Server Send)阶段 : 服务端返回请求,这个阶段会将服务端上下文数据上报,下面这张图可以说明上报的数据有:traceId=123456,spanId=0.1,appKey=B,method=B.method,start=103,duration=38。

CR(Client Recieve)阶段 : 客户端接收返回结果,这个阶段会将客户端上下文数据上报,上报的数据有:traceid=123456,spanId=0.1,appKey=A,method=B.method,start=103,duration=38。

image.png

3.2 数据处理层

把数据采集层上报的数据按需计算,然后落地存储供查询使用。

据我所知,数据处理的需求一般分为两类,一类是实时计算需求,一类是离线计算需求。

实时计算需求对计算效率要求比较高,一般要求对收集的链路数据能够在秒级别完成聚合计算,以供实时查询。而离线计算需求对计算效率要求就没那么高了,一般能在小时级别完成链路数据的聚合计算即可,一般用作数据汇总统计。针对这两类不同的数据处理需求,采用的计算方法和存储也不相同。


实时数据处理

针对实时数据处理,一般采用Storm或者Spark Streaming来对链路数据进行实时聚合加工,存储一般使用OLTP数据仓库,比如HBase,使用traceId作为RowKey,能天然地把一整条调用链聚合在一起,提高查询效率。

离线数据处理

针对离线数据处理,一般通过运行MapReduce或者Spark批处理程序来对链路数据进行离线计算,存储一般使用Hive。

3.3 数据展示层

数据展示层的作用就是将处理后的链路信息以图形化的方式展示给用户。

主要用到如下两种图形展示:

调用链路图

  • Zipkin的调用链路图
  • image.png
  • 通过该图可以看出:


服务整体情况

服务总耗时、服务调用的网络深度、每一层经过的系统,以及多少次调用。上图的一次调用总共耗时209.323ms,经过5个不同的系统模块,调用深度为7层,共发生了24次系统调用。

每一层的情况

每一层发生了几次调用,以及每一层调用的耗时。

调用链路图在实际项目中,主要是被用来做故障定位,比如某一次用户调用失败了,可以通过调用链路图查询这次用户调用经过了哪些环节,到底是哪一层的调用失败所导致。

调用拓扑图

  • Pinpoint的调用拓扑图,通过这张图可以看出系统内都包含哪些应用,它们之间是什么关系,以及依赖调用的QPS、平均耗时情况
  • image.png
  • 调用拓扑图是一种全局视野图,在实际项目中,主要用作全局监控,用于发现系统中异常的点,从而快速做出决策。比如,某一个服务突然出现异常,那么在调用链路拓扑图中可以看出对这个服务的调用耗时都变高了,可以用红色的图样标出来,用作监控报警。


参考

http://bigbully.github.io/Dapper-translation/

https://tech.meituan.com/2016/10/14/mt-mtrace.html


目录
相关文章
|
5月前
|
Dubbo Java 应用服务中间件
阿里新框架干掉微服务,换下Dubbo,Spring CloudAlibaba王者降临
tm快了,不知不觉中金九银十的秋招已经快结束了,不少同学现在已经拿到offer了吧~现在的面试可是越来越难了,动不动就是“互联网三高”。
阿里新框架干掉微服务,换下Dubbo,Spring CloudAlibaba王者降临
|
6月前
|
SpringCloudAlibaba Java 程序员
阿里最新产,SpringCloud微服务核心技术全解手册Github星标50k
SpringCloud想必每一位Java程序员都不会陌生,很多人一度把他称之为“微服务全家桶”,它通过简单的注解,就能快速地架构微服务,这也是SpringCloud的最大优势。但是最近有去面试过的朋友就会发现,现在面试你要是没有SpringCloud经验基本面试机会都不会有。
|
7月前
|
Java 持续交付 API
叹服!阿里自述SpringCloud微服务:入门+实战+案例
SpringCloud自述 微服务?Spring?SpringBoot?SpringCloud?......作为一名Java开发人员,对于这些字眼,是否有一种既熟悉又陌生的感觉。你见过,了解过,知道它们也是面试中很重要的一部分,但是不会运用,不会实践到项目中,这就是很尴尬的一种局面,那么你该如何对它们进行深层的剖析呢?
321 0
|
8月前
|
Java Docker 微服务
阿里P8携手腾讯T4谈微服务架构实战:深入浅出Cloud+boot+Docker
微服务”架构在这几年被广泛传播,变得非常火热,以至于关于微服务架构相关的开源框架和工具都变得越来越活跃,比如: Netflix OSS. Dubbo. Apache Thrift等。Spring Cloud也因为Spring社区在企业应用领域的广泛知名度和强大影响力,受到了广大架构师与开发者的高度关注。
|
4月前
|
Java 数据库 索引
最强阿里及大厂350道面试大全:框架+数据库+并发+开源+微服务
无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上,而忽略了人事部分,实际上人事面试也会影响到最终的结果,把每一个环节做好,最终的结果自然不会差。
|
4月前
|
Java Docker 微服务
阿里P8携手腾讯T4谈微服务架构实战:深入浅出Cloud+boot+Docker
微服务”架构在这几年被广泛传播,变得非常火热,以至于关于微服务架构相关的开源框架和工具都变得越来越活跃,比如: Netflix OSS. Dubbo. Apache Thrift等。Spring Cloud也因为Spring社区在企业应用领域的广泛知名度和强大影响力,受到了广大架构师与开发者的高度关注。
|
4月前
|
负载均衡 Dubbo 应用服务中间件
阿里微服务架构到底多牛逼:深入解析Apache Dubbo与实战
在Apache Dubbo (以下简称Dubbo)重新开源之前,Dubbo已经被很多公司广泛用于生产环境并获得了良好的反馈,很多公司内部也会建立私有分支自己维护,其中Dubbox 就是基于Dubbo分支进行扩展并二次维护的。重新开源后,社区维护的Dubbo版本进行了大量“bug fix" .和特性支持,收到了大量Dubbo用户的支持和参与。编写本书的想法是在开源后提出来的,因此本书取名《深入理解Apache Dubbo与实战》。
|
4月前
|
运维 应用服务中间件 nginx
绝!阿里专家总结643页Nginx实战文档,不只运维和微服务
在互联网与我们生活已密不可分的今天,大规模、高性能的网站架构技术已成为每个互联网技术人员的必备技能。Nginx作为款开源的Web服务器软件,因其具有性能稳定、高并发、低内存耗用、高性能的处理能力等特点,而被广泛应用到国内外各互联网厂商的实际生产架构中。
|
4月前
|
运维 Java 微服务
阿里技术专家,紧跟潮流,解读spring微服务架构技术的演进
Spring Cloud是企业进行微服务架构开发的极好选择,为了能帮助大家更好的学习,今天小编给大家推荐一本spring cloud最好的学习书籍。
|
5月前
|
Kubernetes 监控 Cloud Native
GitHub上惊现阿里大佬手记,这是真把微服务、容器和K8S讲清楚了
微服务经过了长足的发展,在每个阶段所产生的信息都很多。在信息爆炸的当今,如若找到一本将信息梳理得井井有条的好书,将是提升学习效率的最佳途径。