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

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 老板,明年我来落地链路追踪-实现降本增效 | 上篇

一、为什么需要链路追踪

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架构设计、性能调优感兴趣可以查看作者的文章:

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


相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
可观测性简史-可观测性价值精讲ppt-业务系统的护城河
可观测性价值精讲,文末随附可观测性简史,可以快速注册体验可观测性平台,构建业务系统的护城河,指标体系和价值体系
213 1
|
数据采集 供应链 数据管理
实时数据中心建设思路与企业实践|青训营笔记
本篇文章主要分为四个方面介绍实时数据中心建设思路与企业实践:1. 企业数据架构;2. 数据中心案例;3. 实时数据生产;4. 数据服务
154 0
实时数据中心建设思路与企业实践|青训营笔记
|
数据采集 监控 安全
谈谈华为数据治理的五点启示
华为数据治理为华为数字化转型的成功提供了重要基础和保障,华为数据治理的成功也成为了业界学习的标杆。
谈谈华为数据治理的五点启示
|
缓存 监控 Cloud Native
618大促来袭,谈一谈如何做好大促备战 | 学习笔记
快速学习618大促来袭,谈一谈如何做好大促备战
618大促来袭,谈一谈如何做好大促备战 | 学习笔记
|
测试技术
热饭的测开成果盘点第二十一期:埋点自动化测试平台
本期介绍的是一款由旧移动测试平台改造的新测试平台。具体样式其实都和之前差不多,唯一不同的是增加了自动抓包和判断请求体。
热饭的测开成果盘点第二十一期:埋点自动化测试平台
|
SQL 运维 监控
线上高并发应用重构(写)填坑经验分享(一)
今年在公司重构(写)了一个老项目,踩了无数的坑。 中间好几次遇到问题,甚至感觉项目可能要失败了,好在最后终于成功上线了。 虽然被坑的不要不要的,但也从中领悟到了不少东西,在这里记录一下,顺便分享给大家乐呵乐呵。 先简单介绍下项目,一个面向C端用户的服务,主要提供包括动态、评论、圈子、好友、关注、Feed等常见的社区功能,另外还有其他一些个性化的功能。 日活比较高,整个服务QPS上万。高频业务,单个接口QPS上千。单项业务数据量过亿,比如评论。
线上高并发应用重构(写)填坑经验分享(一)
|
SQL 移动开发 监控
一文看懂:互联网产品分析,该如何做?
总有同学们在抱怨:“说的是做产品分析,可实际上每天都在埋点,建表,写SQL,对口径,找bug,我分析啥了?到底啥是产品分析?”今天简单分享一下。 所谓产品分析,特指对互联网产品:APP/小程序/H5一类的分析。不是传统企业口中的“产品”哦(传统企业的,参见之前分享的《商品分析》)。 传送门:一文看懂:商品分析如何做?
537 0
一文看懂:互联网产品分析,该如何做?
第一期:复盘 回顾总结
第一期:复盘 回顾总结
139 0
|
运维 Cloud Native 安全
|
运维 Devops 持续交付