精品文章

sharding-jdbc源码分析

Eureka源码解析

rocketMq源码深度解析

xxl-job分布式定时任务

构建sleuth+zipkin全链路监控系统

深入理解dubbo实现原理

方案选择

本文最终选择了zipkin+sleuth做二次开发,这样做灵活性比较大一点。 有兴趣的可以进我博客看一下,我会将我二次开发过程当中遇到的问题发出来。

搭建环境

sleuth+zipkin+kafka+elasticsearch搭建分布式链路追踪系统

二次开发方案

sleuth+zipkin+kafka+logstash链路追踪二次开发方案

常见开源产品

cat, zipkin, pinpoint , skywalking 

cat 

由大众点评开源,基于Java开发的实时应用监控平台,包括实时应用监控,业务监控 。 集成方案是通过

代码埋点的方式来实现监控,比如: 拦截器,注解,过滤器等。   对代码的侵入性很大,集成成本较高。

风险较大。 

支持技术栈: 

  • dubbo

  • spring mvc ,spring aop ,springmvc-url

  • spring boot

  • mybatis

  • log4j , logback

  • playframework

  • http请求

zipkin

由Twitter团队开源, Zipkin是一个分布式的跟踪系统。它有助于收集数据需要解决潜在的问题在市微服架构的时机。它管理数据的收集和查找 . 

该产品结合spring-cloud-sleuth使用较为简单, 集成很方便。  但是功能较简单。 

支持技术栈: 

  • spring cloud

      以上是结合spring-cloud-sleuth支持的技术栈

pinpoint

由韩国团队naver团队开源,针对大规模分布式系统用链路监控,使用java写的工具。灵感来自短小精悍,帮助分析系统的

体结构和内部组件如何被调用在分布式应用提供了一个很好的解决方案。

使用java探针字节码增加技术,实现对整个应用的监控 。 对应用零侵入

支持技术栈: 

  • Tomcat 6+, Jetty 8/9, JBoss 6, Resin 4, Websphere 6+, Vertx 3.3+

  • Spring, Spring Boot (Embedded Tomcat, Jetty)

  • HTTP Client 3.x/4.x, HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient

  • Thrift, Dubbo

  • mysql, oracle, mssql, cubrid,PostgreSQL, maria

  • arcus, memcached, redis, cassandra

  • MyBatis

  • DBCP, DBCP2, HIKARICP

  • gson, Jackson, Json Lib

  • log4j, Logback

skywalking 

2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。 

针对分布式系统的应用性能监控系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构, 其核心是个分布式追踪系统。

使用java探针字节码增加技术,实现对整个应用的监控 。 对应用零侵入

支持技术栈

  • Tomcat7+ , resin3+, jetty

  • spring boot ,spring mvc

  • strtuts2

  • spring RestTemplete  ,spring-cloud-feign

  • okhttp , httpClient

  • msyql ,oracle , H2 , sharding-jdbc,PostgreSQL

  • dubbo,dubbox ,motan, gRpc ,

  • rocketMq , kafla

  • redis, mongoDB,memcached ,

  • elastic-job , Netflix Eureka , Hystric

性能分析

摘自:https://juejin.im/post/5a7a9e0af265da4e914b46f1

根据其他博客提供的性能测试报告如下

模拟了三种并发用户: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%之内。

比较

catzipkinpinpointskywalking 
依赖
  • Java 6,7,8

  • Maven 3.2.3+

  • mysql5.6

  • Linux 2.6以及之上(2.6内核才可以支持epoll)

  • Java 6,7,8

  • Maven3.2+

  • rabbitMQ

  • Java 6,7,8

  • maven3+

  • Hbase0.94+

  • Java 6,7,8

  • maven3.0+

  • nodejs

  • zookeeper

  • elasticsearch

实现方式代码埋点(拦截器,注解,过滤器等)拦截请求,发送(HTTP,mq)数据至zipkin服务java探针,字节码增强java探针,字节码增强
存储选择mysql , hdfsin-memory , mysql , Cassandra , ElasticsearchHBaseelasticsearch , H2
通信方式http , MQthriftGRPC
MQ监控不支持不支持不支持支持(RocketMQ,kafka)
全局调用统计支持不支持支持支持
trace查询不支持支持不支持支持
报警支持不支持支持支持
JVM监控不支持不支持支持支持
star数4.5K7.9K5.6K2.8K
优点功能完善。

spring-cloud-sleuth可以很好的集成zipkin , 代码无侵入,集成非常简单 , 社区更加活跃。

对外提供有query接口,更加容易二次开发

完全无侵入, 仅需修改启动方式,界面完善,功能细致。

完全无侵入,界面完善,支持应用拓扑图及单个调用链查询。

功能比较完善(zipkin + pinpoint)

缺点
  • 代码侵入性较强,需要埋点

  • 文档比较混乱,文档与发布版本的符合性较低,需要依赖点评私服 (或者需要把他私服上的jar手动下载下来,然后上传到我们的私服上去)。

  • 默认使用的是http请求向zipkin上报信息,耗性能。

  • 跟sleuth结合可以使用rabbitMQ的方式异步来做,增加了复杂度,需要引入rabbitMQ 。

  • 数据分析比较简单。

  • 不支持查询单个调用链, 对外表现的是整个应用的调用生态。

  • 二次开发难度较高

  • 3.2版本之前BUG较多 ,网上反映兼容性较差 . 3.2新版本的反映情况较少

  • 依赖较多。

文档网上资料较少,仅官网提供的文档,比较乱文档完善文档完善文档完善
开发者大众点评twitternaver吴晟(华为开发者) ,目前已经加入Apache孵化器
使用公司大众点评, 携程, 陆金所,同程旅游,猎聘网twitternaver华为软件开发云、天源迪科、当当网、京东金融

sharedCode源码交流群,欢迎喜欢阅读源码的朋友加群,添加下面的微信, 备注”加群“ 。 

Logo

更多推荐