| --- | --- | --- |
| 更新日期 | 2022年05月18日 | 作 者 | 张留杨 |
| 保密等级 | C | 开放范围 | 研发测试部 |
版本历史
版 本 | 更新日期 | 作 者 | 备注 |
---|---|---|---|
1.0.0 | 2022年05月18日 | 张留杨 | 新建文档 |
1. 背景介绍
随着微服务架构的流行,一次请求往往需要涉及到多个服务,需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
单体架构中可以使用 AOP
在调用具体的业务逻辑前后分别打印一下时间即可计算出整体的调用时间,使用 AOP
来 catch
住异常也可知道是哪里的调用导致的异常。而针对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:
2. 实现原理
- 一个完整请求链路的追踪
ID
(traceid
)用于查出本次请求调用的所有服务,每一次服务调用的跨度ID
(spanid
)用来记录调用顺序
- 上游服务
parenetid
用来记录调用的层级关系
- 调用时间
timestamp
,把请求发出、接收、处理的时间都记录下来,计算业务处理耗时和网络耗时,然后用可视化界面展示出来每个调用链路,性能,故障
- 还可以记录一些其他信息,比如发起调用服务名称、被调服务名称、返回结果、
IP
、调用服务的名称等,最后,我们再把相同spanid
的信息合成一个大的span
块,就完成了一个完整的调用链。
3. 方案比较
目前主流的链路追踪工具:Google
的Dapper
,阿里的鹰眼,大众点评的CAT
,Twitter
的Zipkin
,LINE
的pinpoint
,国产的skywalking
。
**Zipkin**
:Twitter
开源的调用链分析工具,目前基于springcloud sleuth
得到了广泛的使用,特点是轻量,使用部署简单。**Pinpoint**
:韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI
功能强大,接入端无代码侵入。**Skywalking**
:国产的优秀APM
组件,是一个基于字节码注入的调用链分析,对JAVA
分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。特点是支持多种插件,UI
功能较强,接入端无代码侵入。目前已加入Apache
孵化器。**CAT**
:大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
主要对比项 :
- 探针的性能
主要是agent
对服务的吞吐量、CPU
和内存的影响。微服务的规模和动态性使得数据收集的成本大幅度提高。 skywalking
的探针对吞吐量的影响最小,zipkin
的吞吐量居中。pinpoint
的探针对吞吐量的影响较为明显。
**collector**
的可扩展性
能够水平扩展以便支持大规模服务器集群。 zipkin
支持多个实例订阅MQ
,异步消费监控信息。skywalking
支持单机和集群模式,使用gRPC
通信。
- 全面的调用链路数据分析
提供代码级别的可见性以便轻松定位失败点和瓶颈。 zipkin的链路监控粒度到接口级别。skywalking
支持众多的中间件、框架、类库。pinpoint
数据分析最完备,提供代码级别的可见性以便轻松定位失败点和瓶颈。
- 对于开发透明,容易开关
添加新功能而无需修改代码,容易启用或者禁用。 Zipkin
它要求在需要时修改代码。skywalking
和pinpoint
基于字节码增强的方式,不需要修改代码,并且可以收集到字节码中的更多精确的信息 。
- 完整的调用链应用拓扑
自动检测应用拓扑,帮助你搞清楚应用的架构。 pinpoint
界面显示的更加丰富,具体到调用的DB
名,zipkin
的拓扑局限于服务于服务之间 。
4. 性能对比
图中蓝色代表未使用 SkyWalking
的表现,橙色代表使用了 SkyWalking
的表现,以上是在 TPS
为 5000
的情况下测出的数据,可以看出,不论是 CPU
,内存,还是响应时间,使用 SkyWalking
带来的性能损耗几乎可以忽略不计。
模拟了三种并发用户:500,750,1000。使用** **jmeter 测试,每个线程发送30个请求,设置等待响应时间为10ms。使用的采样率为1,即100%。pinpoint
默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin
默认也是1。组合起来,一共有12种。
从上表可以看出,在三种链路监控组件中,skywalking
的探针对吞吐量的影响最小,zipkin
的吞吐量居中。pinpoint
的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU
和memory
的影响,在内部服务器进行的压测,对CPU
和memory
的影响都差不多在10%之内。
5. SkyWalking 简介
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。通过加载探针以非侵入式的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。目前支持多种语言,其中包括Java,.Net Core,Node.js和Go语言。
6. Skywalking 主要功能特性
- 多种监控手段,可以通过语言探针和service mesh获得监控的数据;
- 支持多种语言自动探针,包括 Java,.NET Core 和 Node.JS;
- 轻量高效,无需大数据平台和大量的服务器资源;
- 模块化,UI、存储、集群管理都有多种机制可选;
- 支持告警;
- 优秀的可视化解决方案;
7. Skywalking 架构
Skywalking 逻辑上分为四部分: 探针、 平台后端、存储和用户界面。
- 探针:基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式。
- 平台后端:支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry, Zipkin 追踪格式化等。 甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统自定义聚合分析。
- 存储:通过开放的插件化的接口存放 SkyWalking 数据。可以选择一个既有的存储系统,ElasticSearch, H2 或 MySQL 集群。也可以选择自己实现一个存储系统。
- **UI:**一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。
评论区