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的优缺点的主要内容,如果未能解决你的问题,请参考以下文章

SkyWalking 分布式追踪系统

zipkin,pinpoint和skywalking对比

SkyWalking--使用/教程/实例

SkyWalking--整合dubbo--使用/教程/实例

第二十二篇商城系统-Skywalking链路追踪商城系统完结篇

第二十二篇商城系统-Skywalking链路追踪商城系统完结篇