由于公司目前有200多微服务,微服务之间的调用关系错综复杂,调用关系人工维护基本不可能实现,需要调研一套全链路追踪方案,初步调研之后选取了skywalking和pinpoint进行对比;

选取skywalking和pinpoint对比的原因是:两者都使用探针(agent)技术进行信息采集,集成到项目内时不用修改业务代码,避免造成后期难以推进的问题;

以下是进行的一些维度的对比,主要从功能性需求和非功能性需求方面做参考:

功能性需求对比

支持协议语言有

Skywalking: Java、C#, PHP, Node

pinpoint:java,php

UI的对比比较

两种ui相类似,sw服务信息加载速度会快一些

定制化与扩展性比较

都可自定义plugin,使用探针,都可以进行扩展,据说sk扩展性更好

存储

Skywalking:支持各种类型存储,es,mysql,h2

pinpoint:只支持hbase

警告

Skywalking:config/alarm-settings.xml设置警告规则

pinpoint:需要额外引入mysql发送警告

jvm监控

都包含,pinpoint相对更全面一些,从页面查看比较类似   

跟踪粒度

需要使用对应的插件,可以到方法级,展示sql,每个方法调用的时间

服务监控

skywalking支持的维度有:CPU使用率,SLA,RT,CPM(Call Per Minutes)

Pinpoint支持的维度有:CPU使用率,Open File Descriptor,数据源,活动线程数,RT,TPS。pinpoint更多

过滤追踪

都是用ant风格,sw有对应的插件,更灵活

性能损耗

sw少于pinpoint所消耗的时间

支持中间件

Skywalking:  

1.支持开源web容器

2.RPC框架支持更多

3.mq,多支持rocketMQ

4.不支持mssql和mariadb

5.redis支持Jedis,Redisson,Lettuce

PinPoint:

1.支持几乎所有web容器,

2.少于sw

4.RDBMS/nosql,好于sw

5.不支持redisson

6.不支持log4j2

非功能性需求对比


                                skywalking                                                     pinpoint

是否需要修改代码          不需要                                                          不需要

相关文档                   官网文档比较全,支持中文,apache支持             英文文档

社区                            社区活跃,发起人是中国人                      韩国人开发,活跃程度类似

发布方式                   使用jar包,start.sh脚本启动                        使用war包,依赖web容器

github start 数     9.1k                   8.8k


总结

skywalking对国产软件的支持好于Pinpoint;

Pinpoint的优势在于:追踪数据粒度非常细、功能强大的用户界面,以及使用HBase作为存储带来的海量存储能力。

skywalking的优势在于:非常活跃的中文社区,支持多种语言的探针,对国产开源软件非常全面的支持,以及使用es作为底层存储带来的强大的检索能力,并且skywalking的扩展性以及定制化要更优于Pinpoint

  从整体上来讲,在进行演示和讨论的时候,大家普遍认为,skywalking的界面比较现代化一些,pinpoint的功能更为强大;其他一些方面提出的问题,待近期补充:后边需要继续调研的点:

1.对公司现有技术栈,两种方案的支持情况;

2.扩展性及如何进行扩展,扩展之后可以做哪些内容;

3.采样率如何配置

4.保存时间

5.采样的策略

6.agent开发方法

7.数据是否有遵循标准

8.nginx是否支持

  另外,再讨论的过程中,提到了一些问题,有同事提出是否可以用这个工具定位线上的具体都某一次请求的问题? 答案是否定的,因为全链路追踪的定位是展示整体服务调用的拓扑图,能够从宏观描述服务请求链路中哪个环节比较慢,给开发者提供优化程序的一个方向;

  对于性能消耗,大家也有一些不同的看法,有的业务方,对于20%的性能损耗是不敏感的,但是对于当前线上已经负载比较高,且经常有线上问题的系统,还需要性能消耗方面的调研;

5.zipkin

java by twitter,collector 收集器、storage 存储、api 查询api-ui 界面,jdk8 required

接入应用

1.引入zipkin maven dependency

2.java coding ,before after增强自动拦截,把config配置好即可。

public Brave brave(SpanCollector spanCollector){

  Builder builder = new Builder("service2");//指定serviceName

  builder.spanCollector(spanCollector);

  builder.traceSampler(Sampler.create(1));//采集率

  return builder.build();
}

6.TODO ONEAPM 优秀产品实现分析(insight全家桶)、腾讯bk-ci、   Prometheus

微服务-技术专区-监控专区(Skywalking与Pinpoint) - 监控对比分析的更多相关文章

  1. 微服务技术栈:API网关中心,落地实现方案

    本文源码:GitHub·点这里 || GitEE·点这里 一.服务网关简介 1.外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用 ...

  2. SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么

    从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...

  3. 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius

    前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特 ...

  4. 微服务技术栈简单介绍,Eureka和Ribbon的引入和使用

    一.了解微服务架构 1.微服务技术栈 整体框架 整体学习规划路线2.微服务与单体架构的区别 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优势 结构简单 部署成本低 缺点 耦合度高, ...

  5. NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统

    原文:NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统 前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的 ...

  6. 微服务之分布式跟踪系统(springboot+pinpoint)

    这篇文章介绍一下在微服务(springboot开发)的项目中使用pintpoint监控的过程及效果展示. 背景 随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越来越复杂,我们急切需要一个AP ...

  7. 微服务-技术专区-链路追踪(pinpoint)-部署使用

    https://naver.github.io/pinpoint/ https://github.com/naver/pinpoint 背景 随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越 ...

  8. 架构师成长之路也该了解的新一代微服务技术-ServiceMesh(上)

    架构演进 发展历程 我们再来回顾一下架构发展历程,从前往后的顺序依次为单机小型机->垂直拆分->集群化负载均衡->服务化改造架构->服务治理->微服务时代 单机小型机:采 ...

  9. Spring Cloud 微服务技术整合

    微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些 ...

随机推荐

  1. jar 启动脚本

    前段时间用springboot做项目后,每次重新发布都好麻烦, 所以写了个脚本来配合jenkins 发布: #!/bin/bash APP_NAME=application.jar function ...

  2. elasticsearch 基础 —— 分布式文档存储原理

    路由一个文档到一个分片中 当索引一个文档的时候,文档会被存储到一个主分片中. Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片  ...

  3. 解决chrome浏览器安装不上的问题

    1.  打开注册表:  windows键 + R --> 输入regedit -->  回车 (注:windows键在左ctrl附近微软图标的键) 2.  找到 32位:HKEY_LOCA ...

  4. Java 集合遍历

    在集合中使用Lambda表达式 Map集合中 forEach and Map 常规遍历-> 两种遍历: Map map = new HashMap(); map.put(102, "张 ...

  5. shell函数与位置参数举例

  6. Jumpserver安装过程

    Jumpserver 安装过程 可参照此官方文档搭建: http://docs.jumpserver.org/zh/docs/step_by_step.html 其中,需注意处: # docker   ...

  7. C# List和DataTable的相互转换

    1.List转DataTable /// <summary> /// list to datatable /// </summary> /// <typeparam na ...

  8. USACO2008 Jan 电话网络

    Time Limit: 10 Sec Memory Limit: 162 MB Description Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶 ...

  9. Java实现线程的两种方式?Thread类实现了Runnable接口吗?

    Thread类实现了Runnable接口吗? 我们看看源码中对与Thread类的部分声明 public class Thread implements Runnable { /* Make sure ...

  10. vue项目放在IE上页面空白的问题

    Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码 1.npm install babel-polyfill --save 2.main.js中引入 import 'babel-poly ...