性能测试——Dubbo 基准测试

本文详细介绍了如何使用dubbo-benchmark对Dubbo进行性能测试,包括测试指标、工具、测试环境和步骤,展示了不同序列化方式下的性能对比,并探讨了默认选择Hessian Lite的原因。
摘要由CSDN通过智能技术生成
  • 1. 概述
  • 2. 性能指标
  • 3. 测试工具
  • 4. dubbo-benchmark
  • 666. 彩蛋

1. 概述

在 2019.05.21 号,在经历了 1 年多的孵化,Dubbo 终于迎来了 Apache 毕业。在这期间,Dubbo 做了比较多的功能迭代,提供了 NodeJS、Python、Go 等语言的支持,也举办了多次社区活动,在网上的“骂声”也少了。

作为一个长期使用,并且坚持使用 Dubbo 的开发者,还是比较愉快的。可能,又经历了一次技术正确的选择。当然,更愉快的是,Spring Cloud Alibaba 貌似,也孵化的差不多,双剑合并,biubiubiu 。

本文,我们就来对 Dubbo 做一次性能基准测试。当写下这句话,突然想到了徐大sao:“今天天气不错,所以来吃顿好的”。

2. 性能指标

在 Dubbo 官方团队提供的 《Dubbo 性能测试报告》 的文章里,我们比较明确的可以看到希望的性能指标:

场景名称对应指标名称期望值范围实际值是否满足期望(是/否)1k数据响应时间0.9ms0.79ms是1k数据TPS1000011994是

3. 测试工具

目前可用于 Dubbo 测试的工具如下:

  • dubbo-benchmark :Dubbo 官方,基于 JMH 实现的 Dubbo 性能基准测试工具。
对 JMH 不了解的胖友,可以看看 forever alone 的基友写的 《JAVA 拾遗 — JMH 与 8 个测试陷阱》
  • jmeter-plugins-for-apache-dubbo :社区贡献,压力测试工具 Jmeter 对 Dubbo 的插件拓展。

考虑到测试的简便性,以及学习成本(大多数人不会使用 JMeter),所以我们采用 dubbo-benchmark ,虽然说 JMH 也好多人不会。但是,因为 dubbo-benchmark 提供了开箱即用的脚本,即使不了解 JMH ,也能很方便的快速上手。当然,还是希望胖友能去了解下 JMH ,毕竟是 Java 微基准测试框架,可以用来测试我们编写的很多代码的性能。

4. dubbo-benchmark

4.1 项目结构

在开始正式测试之前,我们先来了解下 dubbo-benchmark 项目的大体结构。

项目结构

分了比较多的 Maven 模块,我们将它们的关系,重新梳理如下图:

项目层级

第一层 benchmark-base

提供 Dubbo Service 的实现,如下图:

benchmark-base

  • UserService 类中,定义了我们业务场景中常用的四种方法:
public interface UserService {
public boolean existUser(String email);
public boolean createUser(User user);
public User getUser(long id);
public Page<User> listUser(int pageNo);
}
  • UserServiceImpl 的实现,胖友自己看下,比较简单。
  • AbstractClient,理论来说,应该放到 client-base 中,可能迷路了。

第二层 client-base

实现 Dubbo 消费端的,基于 JMH ,实现 Benchmark 基类。重点在 benchmark.Client 类,代码如下:

private static final int CONCURRENCY = 32;
public static void main(String[] args) throws Exception {
 Options opt;
 ChainedOptionsBuilder optBuilder = new OptionsBuilder()
 // benchmark 所在的类名,此处就是 Client
 .include(Client.class.getSimpleName())
 // 预热 3 轮,每轮 10 秒
 .warmupIterations(3)
 .warmupTime(TimeValue.seconds(10))
 // 测量(测试)3 轮,每轮 10 秒
 .measurementIterations(3)
 .measurementTime(TimeValue.seconds(10))
 // 并发线程数为 32
 .threads(CONCURRENCY)
 // 进行 fork 的次数。如果 fork 数是 2 的话,则 JMH 会 fork 出两个进程来进行测试。
 .forks(1);
 // 设置报告结果
 opt = doOptions(optBuilder).build();
 new Runner(opt).run();
}
private static ChainedOption
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值