面试:知道你的接口QPS是多少么?

QPS是什么

我们先回忆一下,QPS的概念如下所示:

QPS(Query Per Second):每秒请求数,就是说服务器在一秒的时间内处理了多少个请求

那我们怎么估出每秒钟能处理多少请求呢?

OK,用日志来估计!那日志怎么记录呢,细分下来,有两种方式。

自己在接口里记录

这种方式指的是在接口里,日志记录了能体现该接口特性的,并具有唯一性的字符串!

@RestController
@RequestMapping("/home")
public class IndexController {
    //省略
    @RequestMapping("/index")
    String index() {
        logger.info("AppBlog.CN");
        return "index";
    }
}

假设现在我要统计index这个接口的QPS!

OK,什么叫能体现该接口特性的字符串呢!就像上面的AppBlog.CN这个字符串,只在index这个接口里出现过,没在其他其他接口里出现过!因此,只要统计出AppBlog.CN这个字符串在日志里的出现次数,就能知道该接口的请求次数!

什么叫具有唯一性的字符串呢!所谓唯一性,指的是AppBlog.CN这个字符串,在这个接口的一次调用流程中,只出现一次!如果出现两次,就会导致到时候统计出来的次数会多一倍,所以尽量选择具有唯一性的字段!

利用tomcat的access log

如果日志里没有上面提到的字段。OK,那就使用tomcat自带的access log功能吧!

Tomcat指定下面两个属性即可

server.tomcat.accesslog.directory  #设定log的目录,默认: logs

server.tomcat.accesslog.enabled  #是否开启access log,默认: false

此时,访问一次/home/index地址,会有下面这样日志

127.0.0.1 - - [19/Aug/2019:23:55:27 +0800] "POST /home/index HTTP/1.1" 200 138

那么,就可以根据日志中,该记录的出现次数,统计index接口的QPS

实战

假设,日志已经拿到手了,名字为xxx.log。日志内容如下

//省略,都长差不多,贴其中一条就行
0:0:0:0:0:0:0:1 - - [27/Dec/2018:20:41:57 +0800] "GET /appblog/upload.do HTTP/1.1" 404 949 http-bio-8080-exec-5 43

这个时候,执行一串命令长下面这样的,进行统计即可

cat xx.log |grep 'GET /appblog'|cut -d ' ' -f4|uniq -c|sort -n -r

出来等结果就是

2 [27/Dec/2018:20:40:22
1 [27/Dec/2018:20:47:58
1 [27/Dec/2018:20:47:42
1 [27/Dec/2018:20:41:57

然后就知道,原来在20:40:22,这个接口的QPS最高,达到了惊人的2QPS!

  • cat xxx.log:读文件内容
  • grep 'GET /appblog':将文件内容按照GET /appblog进行过滤
  • cut -d ' ' -f4:过滤出来的内容按照空格进行分割,取第四列内容
  • uniq -c:每列旁边显示该行重复出现的次数
  • sort -n -r:依照数值的大小排序

那么,如果是其他日志格式,无外乎cut语句的处理不同而已,道理类似!此法可以估算出单机的某接口的QPS是多少!

估算

我们现在估计出了单机的QPS。接下来,估算集群的QPS。这就要根据负载均衡的策略来估计!
比如,部署了32台机器,负载均衡的策略恰巧为轮询,那集群的QPS就是单机的QPS乘32即可。
所以,根据具体的策略,来估计整个集群的QPS多大!

上一篇 【面试必备】快速理解数据库事务隔离级别
下一篇 Android如何加载100M的图片却不撑爆内存
目录
文章列表
1 Spring Boot使用RestTemplate批量下载文件
Spring Boot使用RestTemplate批量下载文件
2
React Native学习之RN与iOS原生通信
React Native学习之RN与iOS原生通信
3
Android PtrFrameLayout实现下拉刷新与上拉加载更多
Android PtrFrameLayout实现下拉刷新与上拉加载更多
4
React Native学习之运行官方项目UIExplorer (Android & iOS)
React Native学习之运行官方项目UIExplorer (Android & iOS)
5
国内值得关注的API集合
国内值得关注的API集合
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。