首页 > 编程知识 正文

SkyWalking和Zipkin:哪个更好用?

时间:2023-11-22 00:40:43 阅读:288982 作者:YGNY

在比较SkyWalking和Zipkin哪个更好用之前,我们需要了解它们的基本信息和功能。

一、SkyWalking和Zipkin的基本介绍

SkyWalking和Zipkin都是分布式应用跟踪系统,它们的主要功能是收集、处理和展示应用的链路追踪数据,以帮助开发人员快速发现应用中的问题和瓶颈。

SkyWalking是一个由Apache软件基金会赞助的开源项目,支持Java、.NET、Node.js等多种语言平台,提供了丰富的功能和插件。而Zipkin是由Twitter发起的开源项目,最初只支持Java平台,后来逐渐扩展到其他平台。

二、SkyWalking和Zipkin的功能比较

1、性能

SkyWalking在性能方面更优秀一些,它使用了字节码增强技术,对业务代码的侵入性较小,跟踪数据的收集和展示都比较快速。

Zipkin性能也不错,但它的依赖比较多,需要依赖外部组件来进行数据存储和展示,对性能会有一定影响。

2、功能覆盖

在功能覆盖方面,SkyWalking更加全面一些,它提供了不少于20多种的插件,可以支持数据库、缓存、消息中间件等多种应用场景的跟踪。

Zipkin虽然也提供了比较丰富的插件,但功能覆盖面不如SkyWalking广,而且一些插件的支持情况也不如SkyWalking稳定。

3、使用友好度

在使用友好度方面,Zipkin稍微占优一些,它的安装、配置和使用都比较简单,也相对灵活,适合小型项目或者对性能要求不高的场景。而SkyWalking的安装和配置相对繁琐一些,但它的扩展和二次开发能力比较强,适合大型项目或者对性能有要求的场景。

三、SkyWalking和Zipkin的应用场景

SkyWalking和Zipkin都可以应用于分布式系统调用链监控、问题定位和性能优化等领域。

对于大型分布式系统,SkyWalking更适合,因为它的扩展和二次开发能力比较强,适合复杂的业务场景;而对于小型的项目,或者对性能要求不高的场景,Zipkin更适合,因为它的使用比较简单,性能也比较轻量级。

四、示例代码

1、使用SkyWalking进行链路追踪

public class UserServiceImpl implements UserService {
    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);

    @Override
    public User getUserById(int id) {
        try (Scope scope = TracerHelper.buildSpan("getUserById")) {
            LOGGER.info("getUserById start");
            // do some business logic here
            LOGGER.info("getUserById end");
            return new User(id, "John Doe", new Date());
        } catch (Exception e) {
            LOGGER.error("getUserById error", e);
            throw e;
        }
    }
}

2、使用Zipkin进行链路追踪

@Bean
public Sampler defaultSampler() {
    return Sampler.ALWAYS_SAMPLE;
}

@Bean
public Brave brave() {
    return new Brave.Builder("myService")
            .spanCollector(HttpSpanCollector.create("http://localhost:9411/api/v1/spans"))
            .build();
}

@Bean
public Tracing tracing() {
    return Tracing.newBuilder()
            .localServiceName("myService")
            .spanReporter(zipkinSpanReporter())
            .traceId128Bit(true)
            .build();
}

@Bean
public Reporter zipkinSpanReporter() {
    return AsyncReporter.builder(okHttpClient())
            .compressionEnabled(false)
            .endpoint("http://localhost:9411/api/v1/spans")
            .build();
}

@Bean
public OkHttpClient okHttpClient() {
    return new OkHttpClient.Builder().build();
}

以上是两个示例的部分代码,它们均展示了如何使用SkyWalking和Zipkin进行链路追踪。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。