贴子详情接口偶发时延超过2s的问题

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,有概率出现慢的情况。具体原因待分析

1. 数量大的情况下(大于20),多次访问redis io,还不如连表从数据库获取数据

原文地址:https://www.cnblogs.com/Xjng/p/11663545.html

时间: 2024-11-09 00:26:18

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

tomcat接口调用时延开关

项目中有些页面时延不稳定,需要看每次接口调用时延,怎么看,有两种方法:一种是直接去catalina.out日志中看,一种是直接去localhost_access_log日志中看,第一种需要在代码中实现时延的计算,第二种方法只需在server.xml中加一个简单的配置.这里只说第二种: 1.打开tomcat下conf/server.xml,先看Host节点配置: <Host name="localhost" appBase="webapps" unpackWAR

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

通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 书籍详情分析 书籍详情页面如下: 从上图可以分析出详情页面大概有以下几个接口: 获取书籍详情信息 获取用户对书籍的喜欢状态接口 喜欢/不喜欢书籍接口 获取评论列表 写评论接口 以上的接口,有的数据可以直接从已存在的数据表中去获取,比如:书籍详情信息,而其他新接口就需要创建对应的model,然后根据model创建相应的数据表. 比如 用户对书籍的喜欢操作,可以创建li

企业微信应用发送消息接口调用次数超过限制

2019年12月19日应用发消息接口失败提醒: 应用:监控系统报警 调用接口:/cgi-bin/message/send(影响人数:17) 错误码: 45009:接口调用超过限制(错误次数:5164) 为避免影响正常使用,请你或相关的IT负责人尽快排查修复.如有疑问,可咨询企业微信客服团队. 垃圾告警信息多,导致接口调用次数耗光,需要修改触发器的阈值,或者修改表达式, 当前微信的应用发送告警数量的限制是 企业微信人数上限*30 原文地址:https://www.cnblogs.com/0916m

课程列表接口,课程详情接口()

先在models中建几张表结构: from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation # Create your models here. # class CourseType(models.Model): #

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

一.提出问题 由于公司是做医疗级智能可穿戴设备的,所以数据(二进制数据)的存储方面有点特殊,数据没有存储于数据库里面,而是存储于磁盘上.可能有同学质疑,mysql的Blob类型也可以存储二进制数据啊,是啊,的确可以.但是我们的数据太大了,用户可能连续测量30-40个小时,这时这个数据量有50M左右,而一般的接口传输的数据量也就5k左右,大数据在mysql里面的传输也要花大量的传输时间啊,而且数据量一大,就可能在传输中出现问题,比如传输中断.这种大流量接口对服务器.网络的冲击等等.所以就把这个数据

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

导读:近期有一个业务部门的同学反馈说他负责的C工程在小概率情况下SpringMvc会返回415,通过输出的日志可以确定是SpringMvc找不到content-type这个头了,具体为什么找不到了呢?请听我娓娓道来. 关键词:http 415,SpringMvc,nginx,lua,wireshark,jmeter 问题现象: 近期接到一个同学的反馈说,他负责的C工程在小概率的情况下SpringMvc会返回415,通过输出的日志发现请求头里面并没有content-type了,所以才导致Sprin

Jmeter Html 报告优化

转载自南风_real博客园:http://www.cnblogs.com/jaychang/p/5881525.html 但是最近在查阅相关资料时,发现基本都是重复一篇文章Jmeter使用笔记之html报告扩展(一),而且有很多看不明白的地方,于是根据自己需求,在报告中修改了一些,现在整理分享出来. 优化后效果图: 1. 邮件发送html报告有中文时,显示乱码: 修改encoding为"GBK" <xsl:output method="html" indent

免费物流快递单号查询接口快速对接指南

[场景需求描述] 电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开"我的订单"时调用此API显示物流信息详情,电商管理后台的物流系统,客服在对账前查询所有运单的签收状态,并追踪问题,电商平台对商家物流管控,要求必须在多久快递必须发出要看到揽件状态,多久必须收到货物看到签收状态,根据这些状态对商家管控从而提高用户的整体满意度.下图是电商平台.买家.商

淘宝API开发系列:淘宝api接口接入说明

为了进行淘宝API接口开发,正常会有以下几个步骤操作: 1)开发者注册一个账号. 2)然后为每个淘宝应用注册一个应用程序键(App Key) . 3)下载淘宝API的SDK并掌握基本的API基础知识和调用,具体可以参考博客的信息点击查看详细接口说明里面的技术分享区等.3)下载淘宝API的SDK并掌握基本的API基础知识和调用,具体可以参考博客的信息(淘宝商品详情介绍请添加链接描述)里面的技术分享区等. 4)利用SDK接口和对象,传入AppKey或者必要的时候获取并传入SessionKey来进行程