首页 > 其他分享 >记录一次接口压测遇到的问题

记录一次接口压测遇到的问题

时间:2023-01-15 16:13:05浏览次数:46  
标签:记录 压测 Redis 接口 查询 命中 序列化 优化

前提条件 :

虚拟机 4G8核  单接口性能 tps2000 tp99 50ms

虚拟机 4G8核 批处理接口性能 tps1000 tp99 50ms

 

接口方法处理逻辑:多规则时间范围命中  拒绝营销命中  多规则任务命中 命中则响应结果不进行后续逻辑 未命中进行下一个规则

时间范围规则:通过开始时间结束时间进行判断命中。

拒绝营销规则: 查询Redis hset 判断是否命中。

任务多规则命中: 获取小时、天级别缓存 进行N天、N小时综合和配置规则总次数进行比较,均取Redis数据。

 

单接口优化策略:任务多规则配置时同步到Mysql和Redis  查询时获取Redis中缓存,并存入本地缓存caffeine,获取小时、天级别缓存时候Redis管道PipelineHelper进行一次性获取。

优点:规则配置同步到Redis ,减少Mysql查询压力,Redis存内存读写,性能远高于Mysql , Redis数据备份到本地缓存caffeine并进行查询,减少查询Redis交换的网络损耗,提升查询性能,但是cafferine有自己的策略,需要允许时间上的容错。

 

批量接口是在单接口的基础上允许接收多个关机入参userId -> userIdList ,业务需要限制在50以内。

批量接口优化策略:在单接口基础上进行代码优化,时间范围命中,命中一个全部返回,减少无必要的循环浪费资源。拒绝营销优化复杂封装 直接使用key filed  进行value提 ,结合PipelineHelper一次性获取多个value,内存中纯技术是否命中。

优点:由于批量接口都是调用者当前时间,所有时间相同,一个命中则可以判断都命中,否则进行下一个规则,减少了无效循环。拒绝营销进行了复杂封装考虑的是复用性,但是这里只有一个类型,所有规则直接提取。

 

接口压测遇到的问题并反思学习。

接口性能观察点: TPS  TP99  TP999 成功率/失败率

影响接口性能的指标:

1.SQL慢查询优化
2.代码内部逻辑优化
3.线程优化
4.锁优化
5.内存优化
6.网络消耗
7.CPU优化
8.json序列化
9.日志输出优化
10.性能监控插件


提升接口性能的方式:
1.SQL查询优化:    sql语句优、 索引优化、使用第三方缓存插件、读写分离、  分库分表 。
2.代码逻辑优化:判断逻辑优化、 读写流优化(流及时关闭)、   尽可能使用局部变量 、  避免方法过长 、   避免循环中使用try-catch、  无效循环优化(批查询 、PipelineHelper等技术)、  串行变并行(多线程)。

3.线程优化: 使用多线程、 异步线程、  修改线程数量、 修改队列大小。
4.锁优化: 减少锁的粒度、 重量级锁轻量级锁。

5.内存优化: 提升内存 减少GC次数 减少对象创建
6.网络消耗优化:  流入流出达到峰值会限制数据传输  减少每次网络传输数据 (无关字段优化,传输数据压缩)
7.CPU优化:增大运行内存、CPU达到峰值已是达到最大算力、会限制接口性能、  CPU标高原因(内部计算、上下文切换,磁盘交互,Json序列化,监控插件均会增大Cpu压力)。

8.json序列化:减少无关 json序列化次数,删除日志序列化。
9.日志输出优化:删除无关日志输出, 减少日志相关json序列化。

10.性能监控插件:监控插件会占用Cpu 且占用较大,考虑优化或替换。

11.增加服务器,提升整体算力。

 

 

接口性能指标:

tps 、 tp99

 

 

 

 成功率/失败率

 

 

 

CPU使用:

 

 

 内存使用率:

 

标签:记录,压测,Redis,接口,查询,命中,序列化,优化
From: https://www.cnblogs.com/sunnycc/p/17053636.html

相关文章

  • 和菜鸟一起学linux之upnp协议的学习记录
    UPnP全名是UniversalPlugandPlay,主要是微软在推行的一个标准。简单的来说,UPnP最大的愿景就是希望任何设备只要一接上网络,所有在网络上的设备马上就能知道有新设备加入,这......
  • 和菜鸟一起学linux之bluez学习记录1
    关于蓝牙协议栈体系结构 底层硬件模块 RF1、利用2400M~2483.5M频带2、采用调频方式传输数据,一共有79/EDR,40/BLE个hops,每秒3、采用GFSK(DQPSK和8DPSK)调制方式4、信道间隔(1......
  • 和菜鸟一起学linux之bluez学习记录2
    这里主要摘取对于hci,l2cap,sdp和rfcomm的一些应用编程。 关于hci 一、HCI层协议概述 1、HCICommandPackets详见bluez源码:lib/hci.h/*LinkControl*/#defineOGF_LINK_......
  • Web 开发人员日常工作的一天记录 All In One
    Web开发人员日常工作的一天记录AllInOneWeb开发人员每天做在什么?如果您要成为Web开发人员,您可能想知道会发生什么!你每天的生活会是什么样子?你会和谁一起工作?你......
  • Git新手使用记录
    Git官网有一个特别好的教材文档,还有中文翻译版,实际工作暂时也用不上git,所以都是按着上面先熟悉基本的流程,下面上链接https://git-scm.com/book/zh/v2Git首次安装好之后需......
  • 话费充值API接口
    ―、引言1.1 文档概述本文档提供话费充值接口规范说明,提供一整套的完整的接入示例(http接口)供商户参考,可以帮助商户开发人员快速完成接口开发与联调,实现与话费充值系......
  • 53逆向aes获取接口响应
    #coding=gbk#-*-coding:uft-8-*-fromCrypto.CipherimportAESimportbase64importbinasciiimportrequestsimportjson#数据类classMData():def_......
  • 记录一次github上传数据的过程
    首先登录github,密码忘记了就找回,重置一下。创建新的repository用pycharm自带的git工具上传数据首先会提示你未安装git,就安装一下。下来,授权pycharm和GitHub的访问。这......
  • 使用 NodeJS 更新 MySQL 中的记录
    在本文中,我们将看到如何使用NodeJS更新MySQL中的记录。我们将从Node.js服务器动态更新MySQL表值。您可以在更新后使用select语句来检查MySql记录是否已更新。在......
  • Java教程学习:揭秘什么是面向接口编程
    先用一个案例来给大家说明一下面向接口编程。案例:有一个电脑类(Computer),电脑除了有基本的开机关机功能外,还有连接任何外接设备的功能,比如能电脑能连接外置键盘(Keyboard),鼠标......