老板,明年我来落地链路追踪-实现降本增效 | 上篇

简介: 老板,明年我来落地链路追踪-实现降本增效 | 上篇

一、为什么需要链路追踪

1.1 问题

随着微服务架构的演进,单体应用按照服务维度进行拆分,组织架构也随之演进以横向、纵向维度拆分

  • 一个业务请求的执行轨迹,也从单体应用时期一个应用实例内一个接口,变成多个服务实例的多个接口
  • 对应到组织架构,可能跨越多个BU、多个Owner

2Zmh5D.gif在日常工作中,一旦遇到问题,跨部门沟通、联调、排障的开销是不可控的,通常一个本身很简单的问题因为缺少直观有效的线索,可能会导致一群人花费大量的时间,朝着跟问题完全不相干方向探求真相。结果是工时用掉了,问题没解决,专注技术、不擅长博弈谈判的同学还可能被安利担责;若造成了劣币驱逐良币,可就损害了公司、老板的利益。

之前笔者有一些偏见认为只有当分布式应用的规模达到一定量级的情况下,才需要全链路追踪。最近跟一个朋友聊天时被上了一课,“有链路追踪总是要好于没有的,有就提高了可观测性,没有的话几乎全凭盲猜;遇到的问题是都能猜出来的嘛?谁又知道要猜多久嘞?猜问题不领薪水嘛?到底是在猜问题还是在带薪摸鱼呢? ”。好家伙,这一番话使我不得不坚信链路追踪降本增效的功效没用之前你是想不到的,谁用谁才知道。

1.2 诉求

系统上下游相关的如运营、客服、技术支持、开发者、管理者,都特别需要异常出现时,拥有一个轻便、高效的工具,帮助直击问题的命门。

多数人都会希望缩减沟通协作方面的精力和时间耗费,精准判断故障影响范围,做出快速响应、及时止损。另外在日常的架构调整、回归时快速的梳理服务依赖并判断依赖的合理性,在性能检测、评估场景下,分析链路性能并实施容量规划。

那到底能否高效排障呢?笔者这里有个案例不妨一看(若有雷同实属巧合):

在后续的文章《通过SkyWalking洞察Seata分布式事务处理的每个细节》里也能让大家感受到链路追踪的魅力

二、链路追踪的产品与选型

2.1 溯源

网络资料显示,谷歌的 Dapper系统,算是链路追踪领域的始祖,其论文中给出了链路追踪的设计雏形,以时序和关联依赖两个维度抽象出系统的执行轨迹,展示出系统间、组件间的依赖关系和执行耗时。

2Zmh5D.gif

受谷歌公开Dapper论文中提出的概念和理念的影响,一些优秀的企业、个人先后做出不少非常nice的产品,有些还在社区开源共建,对这些产品进行评比的文章很多,在笔者的实践中,这几个系统是这么考量的。

  • Uber的Jaeger: go语言,不在此的语言栈的慎重
  • Twitter的Zipkin:侵入式的,强耦合项目,推动升级麻烦
  • 韩国的Pinpoint:Hbase存储,对按多样化的业务属性查询不友好
  • 中国的SkyWalking:主打非侵入式,apache顶级项目

2.2 SkyWalking的优势

2.2.1 能力强
  • 提供多种语言的自动探针,支持 Java、JS、C#、GO 等多种语言

2Zmh5D.gif

  • 观测能力覆盖了基础设施如K8S、Istio、envoy;提供多个开源项目、组件的插件,如 Java 栈的 Spring、 HttpClient、Dubbo、RocketMQ、MySQL 等
  • 功能丰富,可视化效果优秀

2Zmh5D.gif

采用先进的流拓扑分析(STAM)

2Zmh5D.gif

2Zmh5D.gif

2.2.2 生态好
  • 社区活跃,迭代迅速

2Zmh5D.gif

  • 大厂实践,系统健壮

2Zmh5D.gif

2.2.3 架构轻便

通过常规的Kafka、ES、Prometheus、ZK等中间件组合即可搭建系统,容器\非容器环境都可稳定工作。

2Zmh5D.gif

三、SkyWalking 中 Trace的采集与上报

2Zmh5D.gif

3.1 采集

目前编者已知的构建Trace的方法有5种:

1)通过SkyWalking Agent 自动构建,用户无感知

2)开发人员在方法上添加 @Trace 注解构建 Trace

  • 添加pom依赖
<dependency>
  <groupId>org.apache.skywalking</groupId>
  <artifactId>apm-toolkit-trace</artifactId>
  <version>${skywalking.version}</version>
</dependency>
复制代码
  • @Trace注解标注在方法上,SkyWalking会给该方法生成一个对应的LocalSpan,记录此方法的耗时信息,也可通过@Tags注解添加标签信息,可记录入参和返回值信息。
@Trace(operationName = "myTrace")
@Tags({@Tag(key = "input", value = "arg[0]"), @Tag(key = "output", value = "returnedObj")})
private String trace(String plaintext) {
    return "@Trace";
}
复制代码
  • 《通过注解方式构建 SkyWalking 的Trace》(写作中)

3)配置文件方式指定待追踪的类方法,效果同@Trace

  • 方法 2 介绍了了一种轻量级的侵入式实现,对指定的方法配置注解。但在某些场景下,可能不方便修改项目源码,这个时候可选择非侵入式方式来实现方法级的链路追踪。通过apm-customize-enhance-plugin插件,其工作机制是按既定格式通过配置的方式自定义增强程序中的什么类的什么方法,指定什么OprationName,如何构建Tag;能力还是构建类里方法的 trace 信息,详情可查看官网文档。
  • 《通过配置文件方式构建SkyWalking 的Trace》(写作中)

4)开发人员使用显式的编程 API 来构建 Trace

5)其他产品的 agent采集后,导入到SkyWalking 中

  • 比如导入zipkin采集的数据,但笔者没有这方面的实践,所以需要读者朋友自己查阅资料,做进一步的了解。

3.2 数据上报

目前编者已知的上报Trace的通道有3种:

1)通过HTTP

  • 如H5中JS agent采集的数据是通过HTTP方式上报。

2)通过GRPC

  • SkyWalking Agent(JAVA)默认采用GRPC方式上报数据,GRPC + Protocol Buffer,GRPC采用了Http2协议其多路复用和二进制分帧的优势大大改进传输性能,实现低延迟和高吞吐量;但当数据量特别大的情况下,可能会遇到性能瓶颈(笔者没有 GRPC 通道方面的实践,所以需要读者朋友自己查阅资料,做进一步的了解)。
  1. 通过MQ
  • 对于数据量很大的情况下,MQ具有很好的削谷填峰的功效,目前已支持的MQ类型有Kafka 和 RocketMQ。笔者使用的是Kafka。
  • 《SkyWalking 的数据上报机制》(写作中)

四、总结与下篇预告

本篇介绍了为什么需要链路追踪系统、链路追踪系统的产品有哪些,为什么选择Skywalking,SkyWalking中Trace的采集与上报能力。 下一篇内容大纲:

  • 介绍SkyWalking的Trace
  • 4.1 trace组件介绍
  • 4.2 Trace组件的设计介绍
  • 介绍Trace跨进程传播
  • Trace数据模型的设计
  • 跨进程传播头部协议的设计

五、最后说一句(请关注,莫错过)

对skywalking架构设计、性能调优感兴趣可以查看作者的文章:

如果这篇文章对您有帮助,或者有所启发的话,欢迎关注笔者的微信公众号【 架构染色 】进行交流和学习。您的支持是我坚持写作最大的动力。


相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
15天前
|
安全 虚拟化
【专栏】在数字化时代,成功实施网络项目至关重要,如何写一个优质高效的网络项目实施方案?这篇文章值得收藏!
【4月更文挑战第28天】在数字化时代,成功实施网络项目至关重要。本文从前期准备(明确目标、了解背景、组建团队)、方案内容(项目概述、技术方案、实施计划、风险评估、预算、验收标准)和注意事项(简洁明了、数据准确性、灵活性、沟通协调)三个方面解析如何撰写优质高效的网络项目实施方案。通过具体案例展示实施步骤,强调方案应具备的特点和要素,以确保项目顺利进行并达成目标。
|
11月前
|
搜索推荐
游戏直播系统软件源码搭建平台,经营突破困境的思路和看法
借助“东莞梦幻网络科技”所提供的游戏直播平台源码搭建属于自己的游戏直播平台,在经营游戏直播平台过程中,正面临一些困境可以突破。下面我们就讨论在经营游戏直播平台中会遇到的困境,并推荐一些突破困境的思路和看法。
|
12月前
|
前端开发 JavaScript 小程序
新来个技术总监,给公司项目引入了全新的业务架构,堪称最佳实践!
新来个技术总监,给公司项目引入了全新的业务架构,堪称最佳实践!
|
机器学习/深度学习 缓存 SpringCloudAlibaba
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
五一假期过的可真快,今天开始,又要搬砖了。在五一假期当中,冰河做了一项调研,感觉结果还是挺合乎情理的。
314 0
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
|
搜索推荐 Java 程序员
只有一个程序员开发和运营,BuiltWith网站年入1400万美元是怎么做到的?
国外有一位程序员叫 Gary Brewer,他一人撑起了一个公司,这个公司还年入 1400 万美元,约人民币 1 亿元。对此,你是啥想法?
121 0
|
数据采集 监控 安全
谈谈华为数据治理的五点启示
华为数据治理为华为数字化转型的成功提供了重要基础和保障,华为数据治理的成功也成为了业界学习的标杆。
谈谈华为数据治理的五点启示
|
测试技术
如何保障研发质量不踩坑?阿里技术专家教你几招
面对自动化测试成本高、测试不稳定、测试无法严控发布质量等常见研发过程中的测试问题时,企业如何避免?如何保障研发质量?阿里巴巴研发效能事业部-研发协同平台高级技术专家李帅(花名焦霸),通过阿里巴巴实践经验总结,为大家支招,并提供详细可落地的解决方案。
6858 0
|
人工智能 Cloud Native 大数据
学习笔记功能上线,边学边记助力自我提升!
阿里云开发者学堂上线新功能——学习笔记功能,自己记录知识点印象更深刻!
2848 4
学习笔记功能上线,边学边记助力自我提升!
|
算法 前端开发 搜索推荐
【直播预告】算法技术:在企业工作,如何同时get科研成果与业务结果?
【直播预告】算法技术:在企业工作,如何同时get科研成果与业务结果?
【直播预告】算法技术:在企业工作,如何同时get科研成果与业务结果?
|
存储 缓存 中间件
阿里如何做好双11技术保障?大队长霜波分享4点经验
为什么说双11是阿里每年技术保障稳定性最困难的一次?50多个BU一起加入双11,怎么组织和运营?为了保障双11的顺利进行,又有哪些备战方案以及创新技术?在由阿里云CIO学院主办的【2020中国企业数字创新峰会】上,阿里巴巴双11技术大队长、技术安全生产负责人、CTO线技术风险部资深总监陈琴(霜波)从组织和运作、备战方案和技术、当天保障以及复盘总结四个方面分享了阿里巴巴在双11技术保障上的实践经验。
阿里如何做好双11技术保障?大队长霜波分享4点经验