1、SkyWalking技术理论之全链路监控系统分析
(Zipkin,Pinpoint,Sk。。。
1、SkyWalking技术理论⽂档之全链路监控系统分析(Zipkin,Pinpoint,SkyWalking,CAT)
⽂件状态:[ ] 草稿[√] 正在修改当前版本 1.0
历史修订版本 1.0;
作 者杜有龙
完成⽇期2019-01-23
⼀、全链路监控背景
1、调⽤链路的产⽣背景
1.1背景描述
随着微服务架构的流⾏,服务按照不同的维度进⾏拆分,⼀次请求往往需要涉及到多个服务。
互联⽹应⽤构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使⽤不同的编程语⾔来实现、有可能布在了⼏千台服务器,横跨多个不同的数据中⼼。
因此,就需要⼀些可以帮助理解系统⾏为、⽤于分析性能问题的⼯具,以便发⽣故障的时候,能够快速定位和解决问题。
全链路监控组件就在这样的问题背景下产⽣了。
分布式和微服务的关系最出名的是⾕歌公开的论⽂提到的 。
想要在这个上下⽂中理解分布式系统的⾏为,就需要监控那些横跨了不同的应⽤、不同的服务器之间的关联动作。
所以,在复杂的微服务架构系统中,⼏乎每⼀个前端请求都会形成⼀个复杂的分布式服务调⽤链路。⼀个请求完整调⽤链可能如下图所⽰:
1.2案例
在google的⾸页页⾯,提交⼀个查询请求后,会经历什么?
可能对上百台查询服务器发起了⼀个Web查询,每⼀个查询都有⾃⼰的Index
这个查询可能会被发送到多个的⼦系统,这些⼦系统分别⽤来处理⼴告、进⾏拼写检查或是查⼀些像图⽚、视频或新闻这样的特殊结果
根据每个⼦系统的查询结果进⾏筛选,得到最终结果,最后汇总到页⾯上
总结如下:
⼀次全局搜索有可能调⽤上千台服务器,涉及各种服务
⽤户对搜索的耗时是很敏感的,⽽任何⼀个⼦系统的低效都导致最终的搜索耗时
如果⼀次查询耗时不正常,⼯程师怎么来排查到底是由哪个服务调⽤造成的?
⾸先,这个⼯程师可能⽆法准确的定位到这次全局搜索是调⽤了哪些服务,因为新的服务、乃⾄服务上的某个⽚段,都有可能在任何时间上过线或修改过,有可能是⾯向⽤户功能,也有可能是⼀些例如针对性能或安全认证⽅⾯的功能改进
其次,你不能苛求这个⼯程师对所有参与这次全局搜索的服务都了如指掌,每⼀个服务都有可能是由不同的团队开发或维护的再次,这些暴露出来的服务或服务器有可能同时还被其他客户端使⽤着,所以这次全局搜索的性能问题甚⾄有可能是由其他应⽤造成的从上⾯可以看出调⽤链系统的需要:
⽆所不在的部署,⽆所不在的重要性不⾔⽽喻,因为在使⽤跟踪系统的进⾏监控时,即便只有⼀⼩部分没被监控到,那么⼈们对这个系统是不是值得信任都会产⽣巨⼤的质疑
持续的监控
2、调⽤链路带来的问题
在业务规模不断增⼤、服务不断增多以及频繁变更的情况下,⾯对复杂的调⽤链路就带来⼀系列问题:
如何快速发现问题?
如何判断故障影响范围?
如何梳理服务依赖以及依赖的合理性?
如何分析链路性能问题以及实时容量规划?
3、请求调⽤的关注点
我们会关注在请求处理期间各个调⽤的各项性能指标,⽐如:吞吐量(TPS)、响应时间及错误记录等。
吞吐量,根据拓扑可计算相应组件、平台、物理设备的实时吞吐量。
响应时间,包括整体调⽤的响应时间和各个服务的响应时间等。
错误记录,根据服务返回统计单位时间异常次数。
4、全链路监控⽬的
全链路性能监控从整体维度到局部维度展⽰各项指标,将跨应⽤的所有调⽤链性能信息集中展现,可⽅便度量整体和局部性能,并且⽅便到故障产⽣的源头,⽣产上可极⼤缩短故障排除时间。
有了全链路监控⼯具,我们能够达到:
请求链路追踪,故障快速定位:可以通过调⽤链结合业务⽇志快速定位错误信息。
可视化: 各个阶段耗时,进⾏性能分析。
依赖优化:各个调⽤环节的可⽤性、梳理服务依赖关系以及优化。
数据分析,优化链路:可以得到⽤户的⾏为路径,汇总分析应⽤在很多业务场景。
5、调⽤链监控好处
准确掌握⽣产⼀线应⽤部署情况;
从调⽤链全流程性能⾓度,识别对关键调⽤链,并进⾏优化;
提供可追溯的性能数据,量化 IT 运维部门业务价值;
快速定位代码性能问题,协助开发⼈员持续性的优化代码;
协助开发⼈员进⾏⽩盒测试,缩短系统上线稳定期;
⼆、调⽤链监控技术对⽐
1、常见技术
市场常见调⽤链技术:Zipkin,Pinpoint,SkyWalking,CAT。
2、技术特点
2.1、Zipkin
是Twitter开源的调⽤链分析⼯具,⽬前基于springcloud sleuth得到了⼴泛的使⽤。特点是轻量,使⽤部署简单。
但是功能较简单。⽀持技术栈spring-cloud。
2.2、Pinpoint
是韩国⼈开源的基于字节码注⼊的调⽤链分析,以及应⽤监控分析⼯具,使⽤java编写。
特点是⽀持多种插件,UI功能强⼤,接⼊端⽆代码侵⼊。
使⽤java探针字节码增加技术,实现对整个应⽤的监控。对应⽤零侵⼊。
2.3、SkyWalking
是本⼟开源的基于字节码注⼊的调⽤链分析,以及应⽤监控分析⼯具。
2015年由个⼈吴晟(华为开发者)开源 , 2017年加⼊Apache孵化器。
特点是⽀持多种插件,UI功能较强,接⼊端⽆代码侵⼊。⽬前已加⼊Apache孵化器。
其核⼼是个分布式追踪系统。使⽤java探针字节码增加技术,实现对整个应⽤的监控。对应⽤零侵⼊。
2.4、CAT
是⼤众点评开源的基于编码和配置的调⽤链分析,应⽤监控分析,⽇志采集,监控报警等⼀系列的监控平台⼯具。
集成⽅案是通过代码埋点的⽅式来实现监控,⽐如: ,注解,过滤器等。 对代码的侵⼊性很⼤,集成成本较⾼。风险较⼤。
3、特性对⽐
3.1实现⽅式
类别Zipkin Pinpoint SkyWalking CAT
实现⽅式拦截请求,发送(HTTP,mq)数据⾄
zipkin服务
java探针,字节码
增强
java探针,字节码
增强
代码埋点(,注解,过滤器
等)
3.2接⼊⽅式
类别Zipkin Pinpoint SkyWalking CAT
接⼊⽅式基于linkerd或者sleuth⽅式,引⼊配置即可javaagent字节码javaagent字节码代码侵⼊OpenTracing√×√×
3.3通信⽅式
类别Zipkin Pinpoint SkyWalking CAT
agent到collector通信http,MQ thrift gRPC http/tcp
3.4常见特性
类别Zipkin Pinpoint SkyWalking CAT
颗粒度接⼝级⽅法级⽅法级代码级
全局调⽤统计×√√√
traceid查询√×√×报警×√√√JVM监控××√√3.5数据存储
类别Zipkin Pinpoint SkyWalking CAT
数据存储ES,mysql,
Cassandra,内存
Hbase ES,H2mysql,hdfs
3.6页⾯UI展⽰
类别Zipkin Pinpoint SkyWalking CAT
健壮度**************** 3.7 PinPoint和skyWalking⽀持的插件对⽐
类别Pinpoint SkyWalking
web容器Tomcat6/7/8,Resin,Jetty,JBoss,Websphere Tomcat7/8/9,Resin,Jetty
JDBC Oracle,mysql Oracle,mysql,Sharding-JDBC
消息中间件ActiveMQ, RabbitMQ RocketMQ 4.x,Kafka
⽇志log4j, Logback log4j,log4j2, Logback
HTTP库ApacheHTTPClient,GoogleHttpClient, OkHttpClient ApacheHTTPClient, OkHttpClient,Feign Spring体系spring,springboot spring,springboot,eureka,hystrix
RPC框架Dubbo,Thrift Dubbo,Motan,gRPC,ServiceComb NOSQL Memcached, Redis, CASSANDRA Memcached, Redis
3.8社区活跃度
类别Zipkin Pinpoint SkyWalking CAT STAR8.4k 5.9k 3.3k 4.9k 3.9缺点
类
别
Zipkin Pinpoint SkyWalking CAT
缺点默认使⽤的http请求向zipkin上报信息,耗性
能;
跟sleuth结合可以使⽤rabbitMQ的⽅式异步
来做,增加了复杂度,需要引⼊rabbitMQ ;
数据分析⽐较简单。
不⽀持查询单个调⽤链, 对外
表现的是整个应⽤的调⽤⽣
态;
⼆次开发难度较⾼。
3.2版本之前BUG较多
,⽹上反映兼容性较
差;
依赖较多。
代码侵⼊性较强,需要
埋点;
⽂档⽐较混乱,⽂档与
发布版本的符合性较
低;
需要依赖⼤众点评私
服。
三、SkyWalking
1、背景
1.1描述
在⽬前的微服务或者分布式架构下,分布式追踪变得很重要,在开发测试中可以帮助我们更快发现架构或者⼀些设计有问题的地⽅,在⽣产上可以帮我们统计和分析服务器性能和⼀些部署相关的问题,还可以帮助我们解决或者分析⼀些未知的问题。
skywalking的定位是apm,不仅提供了⾃动分布式追踪,还可以通过⼿动埋探针的⽅式去处理我们的⼀些特殊问题。同时它还⽀持了很多中间件和jvm监控,这是⽬前⼀些分布式追踪技术未能解决的问题。
⽐如spring cloud sleuth zipkin技术,不能解决kafka等⼀些中间件和jvm的监控功能,也不⽀持⾃定义去追踪⾃⼰想要了解的链路信息。在这些⽅⾯skywalking做的还是⽐较好,通过探针的⽅式来进⾏监控做到代码0侵⼊性,⽽开销也不是很⼤。
1.2案例
随着微服务架构的流⾏,⼀些微服务架构下的问题也会越来越突出。
⽐如⼀个请求会涉及多个服务,⽽服务本⾝可能也会依赖其他服务,整个请求路径就构成了⼀个⽹状的调⽤链,⽽在整个调⽤链中⼀旦某个节点发⽣异常,整个调⽤链的稳定性就会受到影响。
所以会深深的感受到 "银弹" 这个词是不存在的,每种架构都有其优缺点 。
⾯对以上情况, 我们就需要⼀些可以帮助理解系统⾏为、⽤于分析性能问题的⼯具,以便发⽣故障的时候,能够快速定位和解决问题,这就是所谓的APM(应⽤性能管理)。
2、是什么
1.1、解释
Skywalking是⼀款APM(应⽤程序性能监视器),尤其适⽤于微服务,Cloud Native和基于容器的架构系统。也称为分布式跟踪系统。它提供了⼀种⾃动检测应⽤程序的⽅法:⽆需更改⽬标应⽤程序的任何源代码; 以及具有⾼效流媒体模块的收集器。
针对分布式系统的APM(应⽤性能监控)系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构, 其核⼼是个分布式追踪系统。
该项⽬由国⼈吴晟基于OpenTracking实现的开源项⽬skywalking(码云、github)。
2017年12⽉8⽇,Apache软件基⾦会孵化器项⽬管理委员会 ASF IPMC宣布"SkyWalking全票通过,进⼊Apache孵化器"。
1.2、github官⽹
使⽤Skywalking实现全链路监控。
Zipkin与Apache SkyWalking共舞—SkyWalking分析 Zipkin 追踪数据。
SkyWalking的发展之路—从⽆名⼩卒到拥抱全球。
1.3、apache官⽹
3、有何⽤
为微服务架构和云原⽣架构系统⽽设计,并且⽀持分布式链路追踪的APM系统(即应⽤性能监控系统)。它通过探针⾃动收集所需的指标,并进⾏分布式追踪。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论