1. 发现问题
    1. 查询慢access日志,发现偶尔有接口时延超过2s,发送概率1%左右
2. 排查
    1. 写单元测试,多次测试后,不能重现问题
    2. 接口代码里加日志,每隔一行代码加一次日志,等待重现
    3. 不断往上游接口加日志后,发现耗时在获取榜单top10的接口
    4. top10接口是从数据库获取top50的用户,然后通过多协程到redis里面获取用户信息
    5. 发现从数据库获取数据时,没索引,加上索引后,问题依然存在
    6. 再次加日志后发现耗时在多协程到redis里面获取用户信息
    7. 耗时细节:
        1. 接口共用时2.1s(正常只用0.2s)
        2. 获取日榜,10个用户,0.01s
        3. 获取周榜,50个用户,0.8s
        4. 获取总榜,50个用户,0.6s
        5. 再次获取总榜,50个用户(缓存不能命中,不知道为什么。不能命中是偶发),0.6s
    8. 原因分析:
        1. 只需要获取前10,但是获取了前50
        2. 上层业务只需要id,但是下层获取了用户信息,无谓操作,同时加剧了第一点
3. 优化方案:
    1. 从数据库获取前10
    2. 只获取id,不获取用户信息
    3. 获取id后,加一层缓存
    4. 原来的接口改为连表获取用户数据
4. 学习
    1. 多协程下,任务量较大情况下(大于20),访问redis,有概率出现慢的情况。具体原因待分析。(最后定位到是rediscluster库的问题,在redis服务端超时断口连接后,客户端会进行初始化,而且多协程下没有锁)
    1. 数量大的情况下(大于20),多次访问redis io,还不如连表从数据库获取数据
 
 
 
 

贴子详情接口偶发时延超过2s的问题的更多相关文章

  1. tomcat接口调用时延开关

    项目中有些页面时延不稳定,需要看每次接口调用时延,怎么看,有两种方法:一种是直接去catalina.out日志中看,一种是直接去localhost_access_log日志中看,第一种需要在代码中实现 ...

  2. 为什么JDK动态代理中要求目标类实现的接口数量不能超过65535个

    先明确几个概念: Class文件是一组以8字节为基础单位的二进制流 各个数据项目严格按照顺序紧凑排列在class文件中 中间没有任何分隔符,这使得class文件中存储的内容几乎是全部程序运行的程序 J ...

  3. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现书籍详情接口

    通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 书籍详情分析 书籍详情页面如下: 从上图可以分析出详情页面大概有以下 ...

  4. Android中一个类实现的接口数不能超过七个

    近期一段时间,在开发Android应用程序的过程中,发现Android中一个类实现的接口数超过七个的时候,常常会出现超过第7个之后的接口不能正常使用.

  5. 我是如何将一个加载90s的接口优化到不足2s的

    一.提出问题 由于公司是做医疗级智能可穿戴设备的,所以数据(二进制数据)的存储方面有点特殊,数据没有存储于数据库里面,而是存储于磁盘上.可能有同学质疑,mysql的Blob类型也可以存储二进制数据啊, ...

  6. tp5 商城模型id详情接口

    1:创建模型 2:定义关联模型 <?php namespace app\common\model; use think\Model; use traits\model\SoftDelete; c ...

  7. 推荐几个我近期排查线上http接口偶发415时用到的工具

    导读:近期有一个业务部门的同学反馈说他负责的C工程在小概率情况下SpringMvc会返回415,通过输出的日志可以确定是SpringMvc找不到content-type这个头了,具体为什么找不到了呢? ...

  8. Jmeter Html 报告优化

    转载自南风_real博客园:http://www.cnblogs.com/jaychang/p/5881525.html 但是最近在查阅相关资料时,发现基本都是重复一篇文章Jmeter使用笔记之htm ...

  9. jmeter+ant+jenkins+mac报告优化(二):添加90% Line和QPS

    一.优化内容 1.Summary中只标红Failures数 2.Pages页面按Average Time倒序排序 3.Average Time超过2s标黄显示 4.Pagelist 模块中针对错误和超 ...

随机推荐

  1. vsftp部署

    安装 yum install -y vsftpd systemctl enable vsftpd.service systemctl start vsftpd.service systemctl st ...

  2. 云打印 对 追光的人 的Beta产品测试报告

    云打印 对追光的人的Beta产品测试报告 课程名称:软件工程1916|W(福州大学) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标:作业集合 团队队员 队员学号 队员姓名 个人博 ...

  3. CodeForces - 1207G :Indie Album(AC自动机 fail树上DFS)

    题意:有N个串,给出的形式是拼接给出,对于第i行:  (1,c)表示字符串i是单个字母c: (2,p,c)表示字符串i=在字符串p后面接上一个字母c. 然后给出M个提问,形式是(i,string).问 ...

  4. 跑起来JEE论坛、商城和网站的经验总结

    前言:昨天我们老大给我分配了几个任务,让我把几个公司的项目运行起来跑一下,几个项目都是JEE上开源的,三个项目,一个网站内容系统.一个BBS论坛.一个jspgou商城,这三个都是开源的,倒腾了两天,今 ...

  5. reduce要素与适用总结

    要素: 1.高阶函数:reduce: 2.处理函数:reducer: 3.数据:可以是具体数据.签名相同的普通函数.签名相同的高阶函数: reduce(reducer, datas(data or f ...

  6. 在jsp中获取SpringSecurity中已登录的用户的用户名

    1.先引入secrity的标签库 <%@ taglib prefix="security" uri="http://www.springframework.org/ ...

  7. 20-2 树莓派搭建服务器 Tornado Web服务器

    Drive.google.com/drive/folders/1ahbeoEHkjxoo4NV1wReOmpoRWbl448z- 1.Tornado简介 Tornado一款使用 Python 编写的, ...

  8. 解决window.location.href参数太长 post提交数据

    前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个 ...

  9. (1)IdentityServer4 V3.0.2-安装模板

    控制台运行命令: dotnet new -i IdentityServer4.Templates

  10. Cortex Architecture

    内容来自github 官方文档,参考连接:https://github.com/cortexproject/cortex/blob/master/docs/architecture.md Cortex ...