首页 > 其他分享 >系统设计:消灭慢接口

系统设计:消灭慢接口

时间:2024-08-04 15:17:10浏览次数:8  
标签:异步 缓存 接口 需要 更新 JVM 消灭 设计

1. 引子

某些接口的响应时间明显变慢,甚至响应超时。这部分接口对整个系统对整体吞吐率和可用性都会带来影响,当然也会影响用户体验。

对核心接口与流量访问高的接口需要做定向优化,例如:

  1. 异步处理,或者加入并发处理,避免同步阻塞

  2. 如果频繁对数据库进行访问考虑,加入缓存

  3. 批量访问,避免for循环调用数据库带来的网络开销

  4. 避免接口一次返回过多的数据

错误接口部分这种没什么可说的,属于硬性规定,消灭它,如果有接口的错误率高于0.1%或者频繁错误日志打印那一定属于程序层面的问题。

2. 通用

观察接口吞吐量、耗时、错误率。获取方式可以通过各种中间件、埋点。

3. 慢接口优化

3.1 下游问题/网络抖动

下游慢接口导致。

3.2 编码问题

  • 是否存在无效的字段填充?即,某些字段是流程不需要的,查询时有额外开销
  • 是否存在放大调用?
  • 是否可以优化成批量查询、批量填充?
  • 是否存在慢SQL?

3.3 异步处理常见方式

首先看需要考虑使用的场景:

  • 编程接口易用性
  • 执行环境:单JVM还是集群?
  • 性能和稳定性,是否持久化:如果机器突然故障/重启可能会丢失处理进度。如果希望能恢复或重做,需要支持幂等
  • 如何取得异步执行的结果。

列举一些常见的异步化方式

类型 接口 执行环境 是否持久化 性能和稳定性 备注
Java线程模型 原生支持 单JVM 自行控制 单机
Java并发工具类(JUC) 原生支持 单JVM 自行控制 单机
Spring线程池 API简单,可用注解 单JVM 自行控制 单机 使用注解不指定线程池可能会混用
Eventbus(Guava) API简单,事件模型 单JVM 中断无法恢复,不支持集群调度 单机 需要注意事件类跨bundle依赖的问题
redis队列 需要接入Redis,产生外部依赖,并且要编写事件投递和消费的接入代码 单JVM 中断无法恢复,不支持集群调度 高性能 可能单点故障,需要进行高可用设计
mircotask 功能丰富,包括监控等,有一定接入成本 集群 待补充 待补充
使用MQ实现异步事件模型 事件模型,需要接入MQ中间件,产生外部依赖,需要自行编写事件处理框架 可集群部署,可跨应用处理 可能需要持久化 待补充
使用定时任务中间件实现异步事件模型 事件模型,需要接入定时任务中间件,产生外部依赖,需要自行编写事件处理框架 可集群部署,可跨应用处理 需要持久化 执行速度可控

3.4 缓存

”所见一切皆缓存。“

解释:对于任意一个事物,当观察者去观察它时,因为信号传播需要时间,观察者接收到的信号永远是它过去发出的。而在这个信号在传播的过程中,被观察的事物可能发生了变化。观察者接收到的信号可以看做它过去的快照,观察者依据这个信号做出的一切判断,都可以认为是将快照缓存了下来。

3.4.1 缓存选型

  • 近端缓存
  • 远端缓存
缓存选型 实例 应用场景 接入成本 限制
JVM缓存 HashMap、BloomFilter、WeakReference、SoftReference 广泛 容易实现 单机需要预热,JVM内存上限制约
分布式缓存 Redis、Memcache 广泛 引入额外依赖 需要考虑可靠性和降级策略
浏览器缓存 使用客户端资源,节约服务器资源 有限制 只能解决部分体验问题,对后端开发者不可控
CDN缓存 - 有限制 对于大对象访问速度优化明显,有额外云基建花费

3.4.2 缓存常见问题

(by chatgpt)

一致性问题:缓存与数据库中数据不一致的问题,特别是高并发情况下数据频繁更新的场景。需要采用合适的缓存更新策略和缓存失效机制来保证数据一致性。
穿透问题:指大量请求直接访问数据库,导致缓存无法起到应有的作用。缓存穿透的原因可能是缓存中不存在需要访问的数据,需要采用布隆过滤器等机制来防止缓存穿透。
雪崩问题:缓存中大量的数据同时失效,导致请求直接访问数据库,从而造成数据库压力过大。需要采用分布式锁、限流等机制来防止缓存雪崩。
内存泄漏问题:如果缓存中的数据一直不被访问或者缓存没有被清理,可能会导致内存泄漏问题。需要采用合适的缓存淘汰策略来避免内存泄漏问题。
容量问题:需要根据实际业务需求和硬件资源来设置合适的缓存容量。

3.4.3 不适合缓存的场景

(chatgpt生成)

  • 数据实时性要求高:如果数据实时性要求高,需要及时更新,那么就不能使用缓存。例如在线支付系统、股票交易系统等。
  • 缓存更新成本高:有一些数据的更新频率非常高,而且每次更新都需要付出较高的代价,这种情况下使用缓存反而会降低性能,因为缓存需要及时更新,更新成本高会导致缓存命中率降低。例如视频直播系统、游戏排名系统等。
  • 业务复杂度高:有一些业务涉及到多个系统之间的交互,业务复杂度很高,加上缓存还需要考虑缓存的一致性和更新策略,这样反而会增加系统复杂度。例如分布式事务系统、复杂的金融交易系统等。
  • 访问量低:对于访问量不大的应用,使用缓存并不能显著提升性能,反而增加了额外的系统复杂度和开发成本。例如内部管理系统、小型门户网站等。

在设计阶段,一定要提前考虑如何使用缓存。

3.5 避免一次性返回过多的数据

不良影响:

构造返回请求时JVM内存占用升高
接口响应时间过长导致RT升高
网络带宽占用
可能会超出浏览器、服务器配置的限制(HTTP协议本身没有限制大小)

4. 消灭错误接口

错误率统计口径:接口返回值不是2XX。

因此只需要在应用内部处理好异常,对外返回HttpStatus=200即可,Result类里的code、suceess按照实际情况返回,不计入错误率。

特殊情况:某些SEO规范下,查不到数据接口要处理成返回404。

标签:异步,缓存,接口,需要,更新,JVM,消灭,设计
From: https://www.cnblogs.com/wuyuegb2312/p/18341659

相关文章

  • springboot+vue景区共享电车管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,景区游客数量持续增长,传统交通方式已难以满足游客便捷、环保的出行需求。在此背景下,景区共享电车作为一种新兴的绿色出行方式,凭借其灵活便捷、低碳环保的特点,逐渐成为景区管理与游客出行的优选方案。然而,随着共享......
  • springboot+vue精品课程网站的设计与实现【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和教育理念的不断革新,精品课程网站作为现代教育资源的重要载体,正逐步成为推动高等教育质量提升的关键力量。当前,高校课程资源的数字化、网络化已成为不可逆转的趋势,学生与教师对于便捷、高效、互动性强的学习平......
  • springboot+vue精点味道蛋糕房管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,烘焙食品以其独特的口感与精美的外观,成为了人们日常生活中不可或缺的甜蜜伴侣。精点味道蛋糕房作为本地知名的烘焙品牌,凭借其精湛的技艺和丰富的产品线赢得了广大消费者的喜爱。然而,随着业务的不断扩展和顾客需求......
  • 自动化测试平台设计与实现(一)
    主要想通过实现一个简约但功能详细,能有效提升“自动化”这个关键能力的项目,来巩固自己的测试理论。以下分为几块内容去解决。其次,一个平台,要考虑可扩展性,当前只能用来测试自动化、后面是否可以满足mock服务的管理与部署,满足可靠性测试的自动化实现等。一、项目简介:后端基于pytho......
  • 1386、STM32单片机心率(脉搏)体温检测阈值设置报警无线蓝牙远程设计(程序+原理图+PCB
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图六、proteus仿真程序流程图:原理图文字讲解:参考论文:资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩......
  • 设计模式图汇
    模板模式简单工厂模式工厂模式原型模式建造者模式策略模式观察者模式装饰模式单件模式外观模式命令模式组合模式状态模式享元模式代理模式/适配器模式桥接模式中介模式......
  • 手机三要素接口怎么对接呢?(一)
    一、什么是手机三要素?手机三要素又叫运营商三要素,运营商实名认证,运营商实名核验,手机三要素实名验证,手机三要素实名核验,每个人的称呼都不同,但是入参和出参是一样的。输入姓名、身份证号码、手机号码,验证三要素信息是否一致,返回验证结果。二、手机三要素适用于哪些场景?1.金融......
  • 小鸟影视苹果cms整站源码带采集规则+支付接口+搭建教程
    小鸟影视苹果cms整站源码带采集规则+支付接口+搭建教程###小鸟影视苹果CMS整站源码带采集规则+支付接口+搭建教程在数字化时代,视频内容的需求日益增长,搭建一个功能齐全的视频网站成为了许多创业者的选择。小鸟影视苹果CMS整站源码是一个集成了采集规则和支付接口的解决方案,......
  • 基于深度学习的电子邮件分类系统的设计与实现(开题报告)
    毕业论文(设计)开题报告学院:计算机科学与通信工程学院专业:计算机科学与技术学号:年级:学生姓名指导教师论文(设计)题目基于深度学习的电子邮件分类系统的设计与实现与本课题有关的国内外研究情况:垃圾邮件没有一个统一的定义,一般被理解为“不请自到的邮件”还有......
  • 基于深度学习的电子邮件分类系统的设计与实现
    目录引言1第一章绪论21.1课题研究背景和意义21.1.1研究背景21.1.2研究意义21.2国内外研究现状及发展趋势31.2.1国外研究现状31.2.2国内研究现状31.2.3发展趋势41.3论文的主要工作51.4论文的组织安排5第二章相关理论概述72.1开发语言......