Skip to content

开篇词:从剖析SkyWalking源码到吃透APM核心知识


你好,我是你的 SkyWalking 老师徐郡明,网名吴小胖,你也可以叫我胖哥。进入互联网行业工作多年,主要从事基础组件开发相关的工作,曾任搜狗资深技术专家,目前就职于某知名短视频互联网公司,主要负责开发、运维全公司的 APM 系统,深入研究多个开源中间件,对 APM 系统有十分深入的研究。曾牵头改造过多个开源产品,在架构设计方面经验丰富。热衷于技术分享,著有畅销书《Apache Kafka 源码剖析》《MyBatis 技术内幕》《etcd 技术内幕》《OpenTSDB 技术内幕》《Promethus 技术秘籍》等。


为什么你必须精通一款 APM

最近十年,互联网经历了移动互联网的爆发,大数据的飞速发展,云计算、IoT 以及工业 4.0 的百花齐放,互联网产品之间的竞争愈演愈烈的同时,支撑这些产品的后端服务架构也进行了一次次革新,从单层架构到多层架构,从单机服务到微服务架构,再到现在兴起的中台架构。混合、复杂的 IT 环境使故障定位、数据统计、性能优化等问题越来越复杂,运维人员与开发人员压力持续增大。


于是 APM 系统(Application Performance Management,即应用性能管理)应运而生,它是 IT 运维管理市场最大的子领域之一,可以很好地解决这一难题。

  • 最早期的 APM 以监控 CPU 使用率、I/O、内存资源、网速等网络基础设施为主;

  • 随着中间件技术的不断发展,APM 也开始监控缓存、数据库、MQ 等各种基础组件的性能;

  • 为了快速响应业务变化,微服务兴起之后,系统功能被模块化,部署方式以服务集群为主,运维管理的复杂度也随之出现爆炸性的增长,需要一些手段了解系统行为、分析系统的性能来及时发现或定位问题、预判系统负载能力等,于是,APM 又肩负起了监控整个微服务架构下所有服务性能的重担。

所以,精通至少一款 APM 系统也已经是运维工程师、开发工程师以及架构师的一项必备技能。


APM 那么多,学哪个呢?

答案当然是:企业用哪个就学哪个!那么,企业用哪个呢?


几乎所有的互联网公司都有 APM 系统,力求及时发现故障,并为优化系统提供性能数据支持。

  • 有的会直接用开源产品,国内比较常用的是美团开源的 CAT、Twitter 开源的 Zipkin、韩国开源的 Pinpoint 和本专栏要讲的 SkyWalking 等;

  • 有的则选择基于开源产品进行改造和自研以满足企业需求;

  • 还有的会选购一些商业化的 APM 产品;

  • 当然一线大厂多数会自研,如淘宝鹰眼、Google Dapper 等。

以上提到的都是经过市场验证的优秀的 APM,但如果要选择一款学透的话,我建议你选 SkyWalking。为什么呢?

  • 第一,它是一个基于 OpenTracing 规范,专门为微服务架构以及云原生架构而设计的,2019 年从 Apache 基金会孵化器毕业成为顶级项目;

  • 第二,你青睐的大厂很多都使用 SkyWalking ,包括腾讯、阿里云、华为、滴滴、中国电信、中国联通等;

  • 第三,相比于其他几个,SkyWalking 没有企业束缚,社区活跃,增长势头强劲;

  • 第四,它是国人开源的,中文文档齐全,学起来没有语言障碍;

  • 第五,SkyWalking 支持 Java、.Net、Node.js 等多款语言的探针,还提供了多种开源框架的插件,例如 Dubbo、gRPC、SOFARPC 等;

  • 第六,有很多开发者持续不断地向社区提供更多插件以支持更多组件无缝接入 SkyWalking;

  • ......

学到什么程度?怎么学?

如果你想进入的是中小型企业,那你至少要学会 SkyWalking 如何使用。如果你想进入有自研 APM 的大中型企业那你必须剖析 SkyWalking 最顶层的架构设计和核心实现原理才行:只有深入代码,才能学以致用。


如果真的搜过学习资料,你一定发现了网络上很多关于 SkyWalking 的博客和文章都有这些小问题。

  • 第一,只讲 SkyWalking 的概述,教你 SkyWalking 一些简单的使用方式或是简单比较 SkyWalking 与其他 APM 系统。如果你想学如何用好 SkyWalking,显然这种浅尝辄止的介绍是不够的。

  • 第二,没有展开顶层的设计,只是简单介绍了部分代码的实现含义,让你一知半解,根本无法解决实际问题。

  • 第三,不少文章对应的 SkyWalking 版本略微陈旧,只能作为参考,直接拿来用的话会出现一些意想不到的问题。

当然,还有其他学习方法,常见的有以下两种:

  • 第一,找身边前辈给你介绍一下系统的原理和架构。那么,你的学习效果便会受限于前辈讲解时的状态,以及你当时的学习状态,能吸收多少,全看缘分。

  • 第二,阅读源码。既然能够拿到全部的代码,直接阅读代码就可以了解系统的工作原理了。没错,但如果你尝试过就会知道,这是一个非常艰辛的过程。

  1. 很多遗留系统和开源系统,虽然功能强大,但文档不全、需要搭建外部依赖环境等,这些对新手来说都是非常不友好的,在入手把玩一个开源项目的时候,有 90% 的人在源码环境搭建过程中打了退堂鼓。

  2. 另外,自己看源码需要搜集很多资料,而很多资料是过时或错误的,这非常干扰你的学习、浪费你的时间。

  3. 最要命的是,因为视野有限,在自己从头开始阅读源码时,经常会迷失在代码迷宫中,出现"不识庐山真面目,只缘身在此山中"的情况。这会导致你花了很大力气阅读源码,付出了大量时间去 Debug 源码,却在关上 IDEA 之后,依然觉得雾里看花。

为什么要跟着我学?

学习本专栏的过程就像是在修习武侠小说中的一门掌法。课程中的每一个知识点都像是一个招式;整个分析 SkyWalking 实现的过程,就是将所有招式整合起来,形成完整掌法的过程。我会根据自己丰富的开源项目学习经验:

  • 从基础知识开始,通过丰富的 Demo 演示,手把手教你 SkyWalking 的落地实现和技巧;

  • 作为路人,带你自底向上剖析优秀源码,深入理解 SkyWalking 设计理念、工作原理及核心实现;

  • 通过实例,带你感受利用 SkyWalking 的设计思想解决工作中的实际问题,提升你的 Coding 能力。

相信通过本课程,除了彻底搞懂 SkyWalking,你还会:

  • 获得剖析其他开源项目代码的能力;

  • 获得在实际工作中遇到类似问题沉着应对的能力,这比学会任何一个知识点都要重要;

  • 获得面试优势,正如前面看到的那样,Skywalking 应用非常广泛,探讨 SkyWalking 的实现原理也可能会成为你和面试官的共同话题;

  • 触类旁通,Skywalking 实现了 OpenTracing 规范,理解 SkyWalking 的原理之后,在使用或是理解其他 APM 系统会非常轻松。

寻找更优秀的自己

架构设计以及编程是需要想象力和创造力的,但是有意义的想象和创造不是凭空来的,而是需要站在巨人的肩膀上。多多研究开源产品或前辈给出的解决方案和最佳实践,才会在实际工作中迸发出更多更好的"灵感"。欢迎订阅我的专栏,让我们一起探寻更优秀的自己,下节课见!