如何自测接口的QPS、最大吞吐量

如何自测接口的QPS、最大吞吐量

什么是QPS

QPS = req/sec = 请求数/秒
原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数>(QPS)
机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

上面是QPS精准的理解,当然我们也可以简单的理解为:
QPS(Query Per Second):每秒请求数,就是说服务器在一秒的时间内处理了多少个请求。

想对这些概念有进一步了解的可以参看这篇博客
吞吐量(TPS)、QPS、并发数、响应时间(RT)概念.

为什么要知道接口QPS

当我们在做B端产品时,可能并发不多,不会过多的考虑接口的性能问题,更注重的是系统的稳定性,而像面向C端的产品时,面对的流量无法预估,所以处于对系统进行保护,nginx需要设置限流策略,包括分布式系统中的接口也要有熔断降级策略,这样才能保证系统的安全性,不会在高并发的情况下崩溃。
那么问题来了,有了熔断降级、限流策略,为什么还要知道接口的QPS?
当上级要求接口的超时降级时间要求是200毫秒时,且你写的接口需要支持 100QPS,你要知道该怎么处理,计算出单个机器下接口的QPS,才能知道上线后,需要几台机器部署,而计算QPS我们可以通过jmeter等压测工具来实现。

实操

下面是自己进行压测的接口代码 内联代码片

	@GetMapping("jmeter")
    public String jmeter() {
    
    
        Long begin = System.currentTimeMillis();
        ReentrantLock lock = new ReentrantLock();
        Map<String, Object> map = new HashMap<>();
        map.put("status", 1);
        try {
    
    
            lock.lock();
            // 执行插入操作
            MsgLogV2DO msgLogV2DO = new MsgLogV2DO();
            msgLogV2DO.setExchange(Thread.currentThread().getName());
            msgLogV2Service.save(msgLogV2DO);

            // 休眠100毫秒
            TimeUnit.MILLISECONDS.sleep(100);
            // 查询操作
            List<MsgLogV2DO> list = msgLogV2Service.list(map);
            log.error(JSON.toJSONString(list));
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            lock.unlock();
        }
        Long end = System.currentTimeMillis();
        if (end - begin > 200) {
    
    
            throw new RuntimeException("接口超时抛出异常");
        }
        return msg;
    }

接口比较简单,大家应该都能看懂,具体逻辑没有实际意义,目的就是保证接口有一定的耗时,这里我没有集成hystrix,通过代码来实现超过200毫秒就抛出异常。

接下来进行Jmeter压测

**关于如何使用Jemter进行压测,及设置,大家可以参考这篇文章,讲解还是挺清晰的:jmeter测试网站QPS.

通过调整jmeter压测的属性,一点点增大吞吐量,当出现异常%开始出现时,就说明此时接口已经处于不健康状态了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过多次测试,可以知道这个接口的吞吐量应该在10/sec左右。这是本人第一篇文章,有不对的地方欢迎指正。下篇考虑写下String为什么要重写equals方法,这里面涉及的点还是很多的,有了解的朋友可以讨论下。

猜你喜欢

转载自blog.csdn.net/kolbjbe/article/details/114208557