导航
导航

分布式链路选型对比

背景

项目微服务化后,应用服务依赖越来越多,不同于以往单体架构的简单直连,一个请求往往需要多个模块共同协作处理,不同模块可能还依赖于不同的外部存储,各个模块的实现技术还不尽相同,一个请求是如何在整个系统不同模块间进行流转,整个调用链上的各个模块之间的调用关系如何,每个微服务处理的时间长短,处理的结果是否正确,很难去进行追踪,而这些信息对于整个系统运维、性能分析、故障追踪都特别有帮助,也正因为此,才有了各种分布式链路追踪的技术。

常见开源产品

cat, zipkin, pinpoint , skywalking

比较:(摘自网络)

cat zipkin pinpoint skywalking
依赖 Java 6,7,8Maven 3.2.3+mysql5.6Linux 2.6以及之上(2.6内核才可以支持epoll) Java 6,7,8Maven3.2+rabbitMQ Java 6,7,8maven3+Hbase0.94+ Java 6,7,8maven3.0+nodejs zookeeper/nacos+elasticsearch
实现方式 代码埋点(拦截器,注解,过滤器等) 拦截请求,发送(HTTP,mq)数据至zipkin服务 java探针,字节码增强 java探针,字节码增强
存储选择 mysql , hdfs in-memory , mysql , Cassandra , Elasticsearch HBase elasticsearch , H2
通信方式 http , MQ thrift GRPC
MQ监控 不支持 不支持 不支持 支持(RocketMQ,kafka)
全局调用统计 支持 不支持 支持 支持
trace查询 不支持 支持 不支持 支持
报警 支持 不支持 支持 支持
JVM监控 不支持 不支持 支持 支持
star数 4.5K 7.9K 5.6K 2.8K
优点 功能完善。 spring-cloud-sleuth可以很好的集成zipkin , 代码无侵入,集成非常简单 , 社区更加活跃。对外提供有query接口,更加容易二次开发 完全无侵入, 仅需修改启动方式,界面完善,功能细致。 完全无侵入,界面完善,支持应用拓扑图及单个调用链查询。功能比较完善(zipkin + pinpoint)
缺点 代码侵入性较强,需要埋点文档比较混乱,文档与发布版本的符合性较低,需要依赖点评私服 (或者需要把他私服上的jar手动下载下来,然后上传到我们的私服上去)。 默认使用的是http请求向zipkin上报信息,耗性能。跟sleuth结合可以使用rabbitMQ的方式异步来做,增加了复杂度,需要引入rabbitMQ 。数据分析比较简单。 不支持查询单个调用链, 对外表现的是整个应用的调用生态。二次开发难度较高 3.2版本之前BUG较多 ,网上反映兼容性较差 . 3.2新版本的反映情况较少依赖较多。
文档 网上资料较少,仅官网提供的文档,比较乱 文档完善 文档完善 文档完善
开发者 大众点评 twitter naver 吴晟(华为开发者) ,目前已经加入Apache孵化器
使用公司 大众点评, 携程, 陆金所,同程旅游,猎聘网 twitter naver 华为软件开发云、天源迪科、当当网、京东金融

性能测试报告(摘自网络)

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%