当前位置: 首页 > news >正文

后分布式追踪时代的性能问题定位——方法级性能剖析[文末彩蛋】

在云原生时代,通过容器技术、Kubernetes 编排、微服务以及服务网格(Service Mesh)等技术构建的业务,运维效率提升,新功能发布效率和频率都有显著提升,但也因为采用云原生技术给业务系统带来了更多的复杂性,比如分布式拓扑结构更为复杂,问题定位难度也更高,往往需要借助分布式追踪技术来提升问题定位效率。因此,在云原生时代,分布式追踪的地位愈发重要。

 

本文首先介绍经典的追踪模型,介绍不同的技术路线并比较它们的优缺点,而后在8月13日(周四)20:00的直播分享中,吴晟将详细的介绍分布式追踪的理论,以及其优势、实现方法和不足,演示如何使用 Apache Skywalking 的性能剖析功能快速发现系统瓶颈。幸运观众可获得吴晟领衔撰写的《Apache SkyWalking实战》新书一本。

 

现代互联网服务通常被实现为复杂的大规模分布式系统。这些应用程序可能由不同团队开发的软件模块集合构成,可能使用不同的编程语言,并且可以跨越多个物理设备甚至数千台计算机。在这样的环境中,有助于理解系统行为和有关性能问题的监控诊断工具是非常宝贵的。

 

01

Dapper与追踪模型

Dapper是谷歌的生产分布式系统追踪基础设施,其设计目标是满足超大规模系统的追踪监控需求,具有低开销、应用级透明度和多环境的部署等特点。能够在谷歌内部被使用超过10年,Dapper的成功因素包括采样和严格限制外部组件。但最重要的成果还是来自开发者和运营团队,他们均认为Dapper是非常有帮助的。

 

Dapper最初是一个独立的追踪工具,后来发展成为监控平台。同时它衍生出许多不同的工具,其中一些工具连它的设计者也没有预见到。谷歌曾经在论文中描述了一些使用Dapper构建的分析工具,分享了内部使用情况的统计数据及意外状况,并总结了迄今为止的经验教训。谷歌构建了Dapper,为开发人员提供分析复杂分布式系统行为的方案,并证明了这种系统对谷歌这种量级的企业是非常有帮助的。

 

简单介绍Dapper相关背景后,我们看一下Dapper所解决的主要问题。如下图所示是一个典型的分布式系统。

 

分布式系统拓扑图

在Dapper论文写作的时候,存在以下两类解决复杂分布式系统问题定位的思路。

黑盒法


黑盒法认为目标系统应被看作一个“黑盒”,我们应该只关注系统之间的消息。细线表示真实获取的数据,而粗线表示服务节点内部的调用,是系统推测出来的数据。当细线部分数据搜集完成,使用回归分析等统计学算法将这些片段再重新组合成为一条完整的链路。

黑盒法

 

标记法

标记法需要给消息打标。这种方法是使用一个全局的追踪ID,并结合一些其他的标记,如父ID、子ID等,让消息在数据层面产生关联关系,从而串联出整条追踪链路。

 

标记法

 

黑盒法相比于标记法,优点是对于消息体没有侵入性,比较方便部署,但是它需要更多的数据进行分析,以获得更为精准的结果。而标记法的一个明显缺点是需要侵入到目标系统之中,从而增加相关的附加标记。

 

Dapper正是采用了后一种,也就是标记法。因为谷歌内部的各种RPC调用使用了通用的库,可在只改动部分代码的情况下,增加附加标记。通常Dapper的追踪目标是一个RPC嵌套树,但是在实践中,它也经常被用在非RPC场景,如STMP邮件发送、外部进入的HTTP请求和数据库的SQL访问等。所以Dapper只关心调用树、Span和消息标记,而不单纯限制这些数据必须来源于RPC。

 

02

典型的追踪模型

我们来介绍一种典型的追踪模型,它来源于Dapper,并被Zipkin、SkyWalking等广泛使用。当然SkyWalking对该模型进行了一些改进,但由于典型模型比较易于理解,它是学习SkyWalking模型的一个很好的入门手段。

 

下图所示为一个典型的追踪树模型,它是由一组相互关联的节点组成的,这些节点我们一般称作Span。Span两端的连线表示了它和它的父Span之间的关系。一个Span通常包含时间戳、Span的开始和结束时间、整个追踪树的traceId、当前Span的ID、父Span的ID,最后是一些额外的信息,用来存储当前Span的应用相关信息。

 

经典追踪树模型

 

Span中的SpanId和ParentId是用来串联起整个追踪树的关键,没有ParentId的Span被认为是Root Span。在一棵追踪树内的所有Span均包含一个相同的traceId。所有ID均应该是唯一的。每个Span代表了一次调用,每增加一层调用服务,就会导致追踪树层次的增加。

 

RPC调用中的Span

上图展示了一个典型RPC调用的Span,Span的开始和结束时间是被追踪探针从目标RPC调用库中获取的。“foo”是一个用户自定义的标记,这个标记同其他Span内部标记一起被存储到后台。

 

这里需要注意的是,一个Span可以包含多个节点的数据。在这个例子中,Span就同时包含客户端和服务端的数据。由于这两份数据一般来源于两台主机,所以保持多台主机时间一致就变得非常重要了。

 

那么,在云原生时代,分布式追踪技术又有哪些挑战?传统分布式追踪又有哪些不足?如何快速对分布式业务系统做性能剖析?

 

本次分享,分享嘉宾吴晟将详细的介绍分布式追踪的理论,以及其优势、实现方法和不足,演示如何使用 Apache Skywalking 的性能剖析功能快速发现系统瓶颈。

 

分享嘉宾

吴晟

Apache 基金会会员,ApacheSkyWalking 创始人、项目 VP 和 PMC 成员,Apache 孵化器 PMC 成员,ApacheShardingSphere PMC成员,Apache APISIX (incubating) PPMC 成员,Apache ECharts (incubating) 和ApacheDolphinScheduler (incubating) 孵化器导师,Zipkin 成员和贡献者,CNCF OpenTracing 核心维护者。

分享大纲

  • 分布式追踪兴起的背景

  • SkyWalking和其他分布式追踪的异同

  • 定位问题的流程和方法

  • 性能剖析的由来、用途和优势

 

直播福利

观看直播参与互动,可获得机械工业出版社华章公司赞助、吴晟领衔撰写的《Apache SkyWalking实战》新书一本。

等不及的小伙伴可以点击链接购买奥~ 

用户收获

听众能够全面的了解分布式追踪的技术背景,和技术原理。以及为什么这些年,分布式追踪和基于分布式追踪的APM系统,Apache SkyWalking,得到了广泛的使用、集成,甚至云厂商的支持。同时,除了针对追踪数据,我们应该关注更多的是,如何利用其产生的监控数据,定位系统的性能问题。以及它有哪些短板,应该如何弥补。

更多精彩回顾

书讯 |华章计算机拍了拍你,并送来了8月书单(下)

书讯 | 华章计算机拍了拍你,并送来了8月书单(上)

上新 | 迁移学习:迈向真正的人工智能
书单 | “ABCD”,未来颇具潜力的四大信息技术方向

干货 | 周志华新作《机器学习理论导引》阅读攻略

收藏 | DB-Engines 8 月数据库排名:Redis悄悄拔高,猛超Elasticsearch

点击阅读全文观看直播

相关文章:

  • 三个男人一台戏,为云原生应用和OpenShift写了一本书
  • 机器人干活,我坐一边喝茶——聊聊最近爆火的RPA
  • 大咖发声 | 没有开发团队,如何做数字化转型?
  • JavaScript vs TypeScript哪家强?
  • 首本深入讲解Linux内核观测技术BPF的书上市!
  • AI不止能美颜,美妆迁移这样做
  • 【第17期】云原生应用:任何企业都是软件公司
  • 如何从0到1搭建大数据平台
  • 策略产品经理实践:主观评估的方法论
  • 一条SQL引发的“血案”:与SQL优化相关的4个案例
  • AI移动端算法优化之盒子滤波
  • 研究股票?我们偷偷告诉你一个算法
  • 用Spark进行实时流计算的那些技巧
  • 数字人民币要来了!试点全面展开,一文看懂央行数字货币背后逻辑
  • 模型独立学习:多任务学习与迁移学习
  • 自己简单写的 事件订阅机制
  • #Java异常处理
  • Cookie 在前端中的实践
  • css属性的继承、初识值、计算值、当前值、应用值
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • JavaScript DOM 10 - 滚动
  • javascript 总结(常用工具类的封装)
  • java多线程
  • maya建模与骨骼动画快速实现人工鱼
  • OSS Web直传 (文件图片)
  • spring学习第二天
  • ViewService——一种保证客户端与服务端同步的方法
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 程序员该如何有效的找工作?
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 微信开放平台全网发布【失败】的几点排查方法
  • 一道面试题引发的“血案”
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​Spring Boot 分片上传文件
  • # .NET Framework中使用命名管道进行进程间通信
  • (4.10~4.16)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C#)一个最简单的链表类
  • (C语言)球球大作战
  • (k8s中)docker netty OOM问题记录
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)JAVA使用POI操作excel
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ./configure,make,make install的作用(转)
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .Net MVC + EF搭建学生管理系统
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net专家(高海东的专栏)
  • @EnableAsync和@Async开始异步任务支持
  • [ C++ ] 继承
  • [BZOJ3223]文艺平衡树
  • [C#][DevPress]事件委托的使用
  • [flask]http请求//获取请求体数据