前言

在 开发和维护 API 接口时候会存在部分接口存在性能问题,会影响服务稳定性, 本文希望可以可以朝着:“有效预防”, “快速止损” 有推进作用;

有效预防:针对自己的编写 API 有一份担当,规避常见雷区,从而引发灾难;
快速止损:当大家解决接口卡顿问题时候, 认清问题、解决方案上存在认知和效率等问题,基于这类场景我们撰写该文档,提供相关解决思路和处理方案,希望可以给大家一些帮助和指导作用;

知识库

常见雷区

  1. 批次性质的业务逻辑代码放在数据库进行处理

90分位、95分位接口响应耗时

90分位:采集了100个接口响应数据从小到大排序,然后取排在第90个接口的数据做为统计数据,95分位,同理。

90分位、95分位设计初心是为了避免长尾效应, 即避免少部分的过大值从平摊的维度上影响到平均响应这个值的变化,从而无法精准的定位问题,下方给出四种场景问题供大家思考下, 可以把每条数据视为 10%的数据去观察,若我们的报警是基于平均时间处理会分别出现什么问题?



XHProf 性能分析工具 (PHP)

相关安装指南:https://zhuanlan.zhihu.com/p/195106163
下载拓展入口: https://pecl.php.net/package/xhprof

windows 系统需要使用 wsl 或者 docker 进行部署项目, xhprof 不支持 windows 环境。

相关字段含义
Function Name 方法名称。
Calls 方法被调用的次数。
Calls% 方法调用次数在同级方法总数调用次数中所占的百分比。
Incl.Wall Time(microsec) 方法执行花费的时间,包括子方法的执行时间。(单位微秒)
IWall% 方法执行花费的时间百分比。
Excl. Wall Time(microsec) 方法本身执行花费的时间,不包括子方法的执行时间。(单位微秒)
EWall% 方法本身执行花费的时间百分比。
Incl. CPU(microsecs) 方法执行花费的CPU时间,包括子方法的执行时间。(单位微秒)
ICpu% 方法执行花费的CPU时间百分比。
Excl. CPU(microsec) 方法本身执行花费的CPU时间,不包括子方法的执行时间。(单位微秒)
ECPU% 方法本身执行花费的CPU时间百分比。
Incl.MemUse(bytes) 方法执行占用的内存,包括子方法执行占用的内存。(单位字节)
IMemUse% 方法执行占用的内存百分比。
Excl.MemUse(bytes) 方法本身执行占用的内存,不包括子方法执行占用的内存。(单位字节)
EMemUse% 方法本身执行占用的内存百分比。
Incl.PeakMemUse(bytes) Incl.MemUse峰值。(单位字节)
IPeakMemUse% Incl.MemUse峰值百分比。
Excl.PeakMemUse(bytes) Excl.MemUse峰值。单位字节
EPeakMemUse% Excl.MemUse峰值百分比。

Mysql Explain 对应介绍

Mysql 学习笔记: https://zhuanlan.zhihu.com/p/71232689
Explain 参数概念:https://juejin.cn/post/6847902221183483917

mysql> explain select * from event;
+—-+————-+——-+——+—————+——+———+——+——+——-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——-+——+—————+——+———+——+——+——-+
| 1 | SIMPLE | event | ALL | NULL | NULL | NULL | NULL | 13 | |
+—-+————-+——-+——+—————+——+———+——+——+——-+
1 row in set (0.00 sec)

Binlog 同步
名词解释:Mysql binlog是二进制日志文件,用于记录mysql的数据更新或者潜在更新(比如 DELETE 语句执行删除而实际并没有符合条件的数据),在 mysql 主从复制中就是依靠的binlog。可以通过语句“show binlog events in ‘binlogfile’”来查看binlog的具体事件类型;

使用场景:做缓存、做报表归纳、做事件驱动等;

使用说明:我们把 binlog 信息进行封装, 可以投递到 Kafka、rabbitMQ 这类的队列服务中,用于快捷的完成业务任务或者快速优化数据库造成卡顿的 API。

优化思路

第一步:确定问题(分析接口卡顿的组成条件), 当我们被反馈1个接口响应慢的时候,此时我们需要先确定好导致该接口慢的组成条件以及使用场景,以便于复现场景和后续有效针对问题, 当下组成条件可从 “平均响应时间”、“90分位响应时间 ”、“95分位响应时间” 进行观看, 可以使用 Kibana 或者 Grafana 等查看数据看板进行分析。

第二步: 复现场景(构造请求条件数据), 当我们确定接口卡顿组成条件后,调用线上日志获取对应参数在 预发布环境进行执行, 若存在非幂等操作,则需要自己构造数据;

第三步: 工具定位(使用产品化的工具帮助有效定位问题),例如使用 XHProf 性能分析工具分析相关接口, 点击 [View Full Callgraph] 进行下钻分析, 初始阶段建议处理 红色 / 黄色 , 而非一次性把所有卡顿的都进行解决,另外可以看到我们这次没有执行红色,因为这个是pdo操作,导致慢的是因为上面的sql查询(换句话来讲是可以确定是 sql 导致的卡顿),部分情况也可以自己打断点、自己记录log来分析;

第四步:代码分析, 发现是 SQL 导致的,则取出该 sql , 在对应环境中 执行 explain 进行分析, 对应优化可由 dba 提供建议,若发现是递归函数则进行精简,若发现是请求 sql 次数过多,可以批量获取、批量插入, 若可以添加缓存则添加缓存(缓存需注意需不改变原逻辑同时 规避 缓存雪崩以及缓存穿透的问题),又或者进行异步处理;

第五步:制定方案,需要注意若无法直接解决可以去想解决80%的问题,而不是100%解决这个问题,选择性价比最高的而不是成本最大的方案才是我们优化的追求;

第六步:技术评审, 由 2- 3人研发一起确认该优化方案和结果过关,确定无风险,需要留下会议记录;

第七步:回归验收,对比结果集正常,以及对比效果提升效果,记录归纳;

第八步:上线检测,持续1 ~ 2个周的时间进行寻回检查确保没有问题后,完毕;

优化 API 的处理说明以及思路相关推荐

  1. [vue] 使用vue渲染大量数据时应该怎么优化?说下你的思路!

    [vue] 使用vue渲染大量数据时应该怎么优化?说下你的思路! 1.如果需要响应式,考虑使用虚表(只渲染要显示的数据): 2.如果不考虑响应式,变量在beforeCreated或created中声明 ...

  2. Web Api 内部数据思考 和 利用http缓存优化 Api

    在上篇<Web Api 端点设计 与 Oauth>后,接着我们思考Web Api 的内部数据: 其他文章:<API接口安全加强设计方法> 第一  实际使用应该返回怎样的数据 ? ...

  3. 张鸿洋 视频 android,PageStateManager 在张鸿洋的 LoadingAndRetryManager 的基础上改写,优化 api,封装 @codeKK Android开源站...

    页面状态管理 在张鸿洋的LoadingAndRetryManager的基础上改写,修正一些 bug,优化 api,并提供使用时封装的例子 特性 api 超级简单 可以在 xml 中使用 Statefu ...

  4. 直播系统开发中如何优化API接口的并发

    概述 在直播系统中,API接口并发的优化是非常重要的,因为它可以提高系统的稳定性和性能.本文将介绍一些优化API接口并发的方法. 理解API接口并发 在直播系统中,API接口是用于处理客户端请求的关键 ...

  5. 如何优化API工作流程

    API是业务和战略计划的驱动力,并且许多团队现在已经开始在API战略上进行大量投资. 在开发API策略上进行大量投资的团队超出了传统技术的领导者范围.从金融服务到医疗保健.教育再到制造业等行业,API ...

  6. 手机号码归属地 API 实现个性化推荐的思路分析

    前言 随着移动互联网和智能手机的普及,越来越多的人使用手机上网和购物,移动营销已成为企业获取用户和提升品牌知名度的重要手段.手机号码归属地 API 作为移动营销的关键工具,具有广阔的应用前景. 本文将 ...

  7. 对RESTful Web API的理解与设计思路

    距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很 ...

  8. Android性能优化常见问题,与详细解决思路方法!

    以下是本人在工作中对经历过的性能优化的一些总结,依据故事的发展路线,将其分为了5个部分,分别是:常见的性能问题:产生性能问题的一些可能原因:解决性能问题的套路:代码建议及潜在性能问题排查项. 另外感谢 ...

  9. 一文读懂HBase(安装,架构原理,优化,API,es二级索引,phoenix)

    1.HBase简介 HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE的目标是存储并处理大型的数据 ...

  10. 31 | 套路篇:磁盘 I/O 性能优化的几个思路

    上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路. 虽然 I/O 的性能指标很多,相应的性能分析工具也有好 ...

最新文章

  1. IT牛人往事如烟之七大“先烈”
  2. Jamie and Tree[CF916E]
  3. Ubuntu系统手动安装英伟达驱动程序
  4. SI4432射频芯片方案物联网无线通信模块数传的典型应用
  5. java通用分页条件查询_通用分页查询
  6. ie compatibility
  7. 双十一有“后悔药”了?淘宝88VIP将推出退货秒退款服务
  8. 突击计划——两种温度格式的转换
  9. linux 删除中文文件夹,Linux删除文件夹命令是什么
  10. rancher 权限 添加用户_Kubernetes身份认证和授权操作全攻略:访问控制之Service Account...
  11. 机器学习 高维数据可视化
  12. Ubuntu 解锁被锁定的账号
  13. 小四哥的故事——访中联绿盟陈庆
  14. 云计算被指变相占土地 专家称去伪存真
  15. java.sql.SQLException: Incorrect string value: ‘\xE4\xB8\x8A\xE6\xB5\xB7‘ for column ‘xxx‘
  16. android 标题字体大小,如何修改android studio标题字体大小
  17. 3D测量| 主动模式投影提高AOI三维测量精度
  18. python+opencv摄像头人脸检测+代码注释
  19. 【TCAX相关】TCC文件详细说明
  20. NextCloud 23.02 安装后提示内部服务器错误的解决方法

热门文章

  1. windows批处理for循环的坑
  2. 符合 Qi 规范的移动设备无线充电解决方案
  3. 从WAVE头文件里获取压缩方式
  4. 还在浪费时间创建工程图?6分钟教你自定义SOLIDWORKS工程图模板
  5. LinkPdf转换器-批量PDF转Word|PDF合并|压缩|拆分
  6. 菜鸟也疯狂,易语言自绘控件__按钮篇,用所有者自绘方式实现
  7. roseha 11 用VM虚拟机创建集群测试
  8. 230页10万字智慧城管系统整体建设方案
  9. 【实用技巧】下载音乐到本地电脑
  10. 小米note位置服务器,小米Note