CAT、Zipkin和SkyWalking的优缺点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAT、Zipkin和SkyWalking的优缺点相关的知识,希望对你有一定的参考价值。
参考技术A 微服务离不开调用链监控,我们可以利用调用链监控快速排障。CAT、Zipkin和SkyWalking是3大主流的开源产品。
据大牛介绍,Google发表的Dapper论文成为很多调用链的鼻祖。
对于这三者的选型,大佬说的挺好,我表示赞同:
1.Zipkin欠缺APM报表能力,不建议;2.企业生产级,推荐CAT;3.关注和试点SkyWalking,产品升级完善快,社区活跃,埋点无侵入也失去了一些灵活性;4.用好调用链监控,需要自研能力。
总的来说,自研还是有一定必要的,根据场景需要。
2018-05-27 Spring拦截器和Skywalking冲突
参考技术A skywalking-5.0.0-alpha
已经修复的版本
skywalking-5.0.0-beta
在观察项目中的日志时,发现
有一个拦截全部Controller方法的日志切面WebRequestInterceptor类
该方法会拦截skywalking的某个方法。
导致每次Web请求,Controller虽然被执行一次,但是doAround会被执行两次。
如果在doAround中做了某些身份认证,Token校验之类的,则产生了不必要的重复请求。
在doAround中打印:
会发现调用了getSkyWalkingDynamicField。
这个方法由skywalking-agent的InstMethodsInter 生成的:
SkyWalkingAgent通过
找到一个具体实现类
然后调用define
然后生成了InstMethodsInter
这个类intercept的方法中:
interceptor.afterMethod对应
GetBeanInterceptor 的 afterMethod, 这里会调用getSkyWalkingDynamicField ,但是 这里会被WebRequestInterceptor拦截!!! 。
getSkyWalkingDynamicField出自EnhancedInstance
在InstMethodsInter.afterMethod调用getSkyWalkingDynamicField的时候,不小心会被Spring的Aspect拦截。
导致重复调用了一次WebRequestInterceptor的doAround。
改写JoinPoint,并排除getSkyWalkingDynamicField方法 :
果然一个月之前官方已经修复了这个BUG
修复的原理就是把Spring的org.springframework.aop.support.MethodMatchers 的matches 静态方法给增强了,那就是让Spring忽略EnhancedInstance接口的所有方法!
这方法既粗暴,又优雅,非常值得学习。
相关链接
issue #1114
pull #1118
以上是关于CAT、Zipkin和SkyWalking的优缺点的主要内容,如果未能解决你的问题,请参考以下文章