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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 阿里百度华为等大厂是如何追踪微服务调用的?

1 服务追踪系统的意义

1.1 快速定位请求失败原因

微服务架构下,服务众多,如果一次上游请求失败,想查清楚到底是哪个应用导致,简直是梦魇!

倘若有一系统,可跟踪记录一次用户请求都发起了哪些调用,经过哪些服务处理,并且记录每一次调用所涉及的服务的详细信息,调用失败,不就可通过日志快速定位问题环节!

1.2 优化系统瓶颈

通过记录调用经过的每一条链路上的耗时,能快速定位整个系统的瓶颈点。比如你访问xxx网站首页发现很慢,可能是运营商网络延迟、网关系统异常、某服务异常、缓存或DB异常。通过服务追踪,可在上帝视角观得整个系统的瓶颈点,再针对性优化。

1.3 优化链路调用

分析调用所经过的路径,评估是否合理,是否每个依赖都是必要,是否可通过业务优化减少服务依赖。


一般业务都会在多个数据中心都部署服务,以实现异地容灾,这时经常会出现服务A调用另外一个数据中心的服务B,而没有调用同处于一个数据中心的服务B。

跨数据中心的调用视距离远近都会有一定网络延迟,对于有些业务不可接受。通过分析调用链路,可找出跨数据中心的服务调用,从而优化。

1.4 生成网络拓扑

通过记录的链路信息,可以生成一张系统的网络调用拓扑图,它可以反映系统都依赖了哪些服务,以及服务之间的调用关系是什么样的,可以一目了然。

在网络拓扑图上还可把服务调用的详细信息也标出来,也能起到服务监控的作用。

1.5 透明传输数据

业务上经常有一种需求,期望能把一些用户数据,从调用的开始一直往下传递,以便系统中的各个服务都能获取到这个信息。比如业务想做一些A/B测试,就想通过服务追踪系统,把A/B测试的开关逻辑一直往下传递,经过的每层服务都能获取到这个开关值,就能统一A/B测试。

2 服务追踪系统原理

服务追踪系统鼻祖:Google的论文Dapper, a Large-Scale Distributed Systems Tracing Infrastructure详细讲解了服务追踪系统的实现原理。


核心理念

调用链,通过一个全局唯一ID串联分布在各个服务节点上的同一次请求,还原调用关系,可追踪系统问题、分析调用数据并统计各种系统指标。

之后诞生的各种服务追踪系统都是基于Dapper,比如Twitter的Zipkin、阿里的鹰眼、美团的MTrace等。

2.1 核心概念

image.png

traceId

一次分布式调用的链路踪迹。全局唯一,64位整数,用于标识某次具体请求ID。

在RPC调用的网络链路中不断传递,串联某一次请求在系统中经过的所有路径。

spanId

一个方法(局部或远程)调用踪迹。用于标识一次RPC调用在分布式请求中的位置,区分系统不同服务之间调用的先后关系。

当用户的请求进入系统后,处在RPC调用网络的第一层A时spanId初始值是0,进入下一层RPC调用B的时候spanId是0.1,继续进入下一层RPC调用C时spanId是0.1.1,而与B处在同一层的RPC调用E的spanId是0.2,这样的话通过spanId就可以定位某一次RPC请求在系统调用中所处的位置,以及它的上下游依赖分别是谁。这类似哈夫曼编码。

annotation

附着在 Span 上的日志信息。用于业务自定义埋点数据,可以是业务感兴趣的想上传到后端的数据,比如一次请求的用户UID。

业务自定义一些自己感兴趣的数据,在上传traceId和spanId这些基本信息之外,添加一些自己感兴趣的信息。

Sampling

采样率。

image.png

image.png

目录
相关文章
|
消息中间件 分布式计算 中间件
秀出天际!阿里甩出的988页分布式微服务架构进阶神仙手册我粉了
秀出天际!阿里甩出的988页分布式微服务架构进阶神仙手册我粉了
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
185 1
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
|
Java 数据库 索引
最强阿里及大厂350道面试大全:框架+数据库+并发+开源+微服务
无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上,而忽略了人事部分,实际上人事面试也会影响到最终的结果,把每一个环节做好,最终的结果自然不会差。
|
Java Docker 微服务
阿里P8携手腾讯T4谈微服务架构实战:深入浅出Cloud+boot+Docker
微服务”架构在这几年被广泛传播,变得非常火热,以至于关于微服务架构相关的开源框架和工具都变得越来越活跃,比如: Netflix OSS. Dubbo. Apache Thrift等。Spring Cloud也因为Spring社区在企业应用领域的广泛知名度和强大影响力,受到了广大架构师与开发者的高度关注。
|
存储 弹性计算 运维
傻掉!看华为技术专家的500页微服务架构笔记,感觉我格局太小
未来10年是各行各业数字化转型的关键10年。数字化转型将帮助企业打破原有IT系统的烟囱状布局,解决IT应用数据孤岛问题,实现数据集中管理共享,从而为企业降低成本、提高运营效率、加快产品创新提供平台和技术保证,使企业在市场竞争中获得优势。
|
运维 应用服务中间件 nginx
绝!阿里专家总结643页Nginx实战文档,不只运维和微服务
在互联网与我们生活已密不可分的今天,大规模、高性能的网站架构技术已成为每个互联网技术人员的必备技能。Nginx作为款开源的Web服务器软件,因其具有性能稳定、高并发、低内存耗用、高性能的处理能力等特点,而被广泛应用到国内外各互联网厂商的实际生产架构中。
|
Dubbo 应用服务中间件 Docker
阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud
什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。
|
消息中间件 前端开发 架构师
华为架构师复盘2024最全2340页面试题jvm+spring+redis+MQ+微服务
包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!
|
负载均衡 Dubbo 应用服务中间件
阿里微服务架构到底多牛逼:深入解析Apache Dubbo与实战
在Apache Dubbo (以下简称Dubbo)重新开源之前,Dubbo已经被很多公司广泛用于生产环境并获得了良好的反馈,很多公司内部也会建立私有分支自己维护,其中Dubbox 就是基于Dubbo分支进行扩展并二次维护的。重新开源后,社区维护的Dubbo版本进行了大量“bug fix" .和特性支持,收到了大量Dubbo用户的支持和参与。编写本书的想法是在开源后提出来的,因此本书取名《深入理解Apache Dubbo与实战》。

热门文章

最新文章