百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

Bug复盘:接口异步返回的重要性

qiyuwang 2024-11-26 08:03 8 浏览 0 评论

前言

最近接收了一个老项目,突然甲方 QA 报了一个 bug,连续请求 60 次,成功 8 次,后面的 52 次全部失败,而且成功的 case 返回时间普遍较长。看了日志,并非业务上的异常。这让刚毕业没什么经验的我,顿时陷入了沉思。但回过神来考虑了一下,大胆才猜测,可能是网络问题或者是并发请求上的问题。

但其实业务异常相对容易排查,而网络或者并发的问题会相对难一些,刚好自己对于服务器服务器请求处理的流程也不太清楚,所以就花了时间看了下,最后基本断定是接口是实现方式出现了问题,重新改写成异步接口后问题基本解决。

所以今天就打算复盘一下,聊聊 tomcat 处理请求的流程,心里好有个数,以及对于某些场合下接口异步返回的重要性。

Tomcat 请求流程

项目是 Spring Boot 开发的,默认用 jar 包部署,实际上就是运行在一个内嵌的 tomcat 中,所以下面就简单理一下 tomcat 处理并发请求的基本流程。这里不具体涉及到相关的组件以及源码,仅仅是梳理过程。

基本的 HTTP 请求处理的过程如下图,其中 Connector 和 Engine 是 tomcat 内置的组件。



  1. Connector 会监听响应的端口,例如 80 或 443,新的 HTTP 请求过来后会做响应的处理。
  2. Connector 接受请求后,将其封装成 Request 对象,并创建线程来处理。tomcat 默认可以处理的并发数为 200 个(通过 maxThreads 参数设置),实际的处理速度取决于我们自己实现的服务程序;超出 maxThreads 部分,tomcat 仍然不断接收,但最多不能超过 maxConnector 设置的数,默认 1w 个;超过 maxConnector 的部分,tomcat 仍然不断接收,但不做处理,放入 Connector 创建的一个队列中,但最多不能超过 acceptCount,超过则拒绝(也就是我们所说的,服务器卡死、挂了)。
  3. 配置时 Connector 会与 Engine 进行绑定,新创建的线程会在 pipeline 中有序等待 Engine 进行处理,其中就包含了 servlet 和 Spring MVC 的处理流程。
  4. Engine 处理完成后会将结果返回给对应的 Connector,再做进一步封装后返回给 HTTP 请求的一方。

清楚了上述流程之后,基本上对于服务器如何处理并发请求有了一个基本的概念,当并发量大的时候,可以对上述参数进行改动,以适应自己的项目。

接口异步返回的重要性

在回到之前讲的项目上来,可以看到 tomcat 默认配置就已经具有不小的并发量了,并且在 Spring Boot 中 Controller 是单例的,且每个请求的处理互不相关,但是为什么接口返回的速度仍然不似预期呢?这其实和这个项目的业务时有关的。

这个接口是对算法的集成,发起请求后需要通过 HTTP 调用算法处理返回结果,请求调用的速度远大于接口处理的速度,再者算法依赖于独占的 GPU,也就意味着一个请求在处理时,其他请求必须等待。而之前实现的接口是同步的,且设置的算法接口返回的 timeout 为 15s,因此当请求积累到一定数量时,后续等待时间超过 15s,直接返回了异常的结果,导致后续请求全部失败。

显然,在处理速度低于请求速度的接口,并且依赖资源是独占或者很紧张的场景下,通过同步的形式返回接口是不可取的。由于接口占用的资源有限,可以理解成将此接口加上了一个 synchronized,后续请求过来都会无限制等待,或者设置了 timeout,无限制拒绝服务,这两种情况都不是我们想要的。

异步就是一种更优雅的形式,请求发送后,接口的调用者可以继续干别的事,请求处理完后会自动通知给调用者。并且在 Java 中的实现也是比较简单的,直接创建一个线程池来接收请求就可以了,线程池自带阻塞队列已经很好地帮我们处理排队这个场景,分布式场景则需要考虑用 redis 或者成熟的 mq 框架来进行调度了。调用者额外需要实现一个 callback 接口来接收处理完后的结果。这样再多的请求都能够有序的获取到处理的结果,无非是耗时的长短问题罢了。

@RequestMapping(value = "handleTask", method = RequestMethod.POST)
public RestResult handleTask(HttpServletRequest request,String callbackUrl) {
    mServerPool.submit((Runnable) SpringUtil.getBean("imageTask", callbackUrl));
    return new RestResult();
}

其实,用过支付宝支付 API 的开发者应该很熟悉这个套路,因为阿里也是这么在做的,发起支付后,用户有一段时间可以确认支付,因此这个过程并非事实返回的,所有会有一个 callback 接口,用于实现用户支付完成的后的业务逻辑,当用户完成支付后,支付宝服务器会回调到这个接口,完成最终的一个业务。

总结

以前一直觉得异步、并发很抽象,学习的时候也总是那么几个 demo(交叉输出、生产者消费者 etc.),但是真正遇到这么一个场景的时候,发现一切都是水到渠成的。只有在不断的实践中,才能调整对某一编程思想的认识,有新的体会。

相关推荐

微软宣布将于10月份关闭OneDrive组功能

【巴士数码】微软已经宣布将在今年10月关闭OneDrive的组功能。一年多之前,微软已经关闭了用户在OneDrive当中创建组的功能。大大多数用户会发现共享文件夹是一种合适的替代品,而且由于这一点,O...

玩转Win10任务栏:从基础设置到效率神器的全攻略

一、基础操作:解锁任务栏的「隐藏布局」...

文档以只读模式打开的原因及解决方法

当文档以只读模式打开时,可能由多种原因导致。以下是详细的原因分析与对应解决方法,您可根据实际情况灵活选择操作。一、文件属性设置问题(一)Windows系统在Windows系统中,若文件属性被标记...

Windows系统的优化(windows优化设置)

今天给大家讲一讲系统的图标和一些基本的优化。安装了原版系统之后有很多地方需要优化比如桌面图标小箭头,盾牌,休眠占用内存,关闭通知栏。首先我们打开软件这款软件以前就讲到过就是dism++软件,他可以清理...

Win 10偷偷传送用户隐私至微软(win10设备隐私)

自推出以来Win10不断被揭发盗取用户带宽、泄漏WiFi密码等各式各样的私隐问题,令不少网络专家开始留意Win10还隐藏了多少类似的私隐漏洞。最近再有人发现Win10部分功能静静...

OneDrive逆势下调存储空间,不限量存储被取消

日前,微软在周一晚发布的博客文章中表示,由于部分用户存滥用储存功能,所以该公司将取消不限量OneDrive存储服务。不限量用户的最大存储空间将被下调至1TB,定价为6.99美元,对于已存储较多文件和内...

Win10中那些被微软取消的功能(微软公司从9日起停止对windows8的主流服务支持)

很多用户在使用Win10的时候,都会发现一些在Win7系统中的功能被取消了,有的时候想找也找不到。那么到底是那些过去的功能在Win10中被取消了呢?下面我们就简单梳理一下,并且告诉大家解决的办法。Wi...

微软推Win11 Dev 26200.5570预览版:语音打字上线脏话过滤选项

IT之家4月26日消息,微软公司昨日(4月25日)发布博文,邀请Dev频道的WindowsInsider项目成员,测试适用于Windows1124H2的KB50556...

微软VSCode商店发现9款挖矿恶意插件,已安装超30万次

IT之家4月8日消息,科技媒体bleepingcomputer昨日(4月7日)发布博文,报道称安全专家在微软VSCode扩展商店中,发现了9款伪装成开发工具的恶意插件。这些插...

微软Windows 11开始菜单大改版!(windows 11 开始菜单)

根据最新消息,微软正在对Windows11的开始菜单进行重大改版,这一更新将彻底改变其布局和功能。Windows11的开始菜单将从现有的多栏布局改为单栏可滚动视图,所有固定图标和已安装应用都将集中...

OneDrive无限存储空间取消 免费降至5GB

2015-11-0313:35:06作者:徐鹏北京时间11月3日消息,微软在一篇博客文章中称,将取消OneDrive存储服务的不限量空间,原因是部分用户有滥用问题。OneDrive无限存储空间取消...

省出电脑C盘空间!微软悄悄更新:OneDrive终于能卸载了

快科技3月12日消息,近日,微软悄悄地在官方更新了关闭、禁用、卸载Windows自带软件OneDrive的方法。微软Windows系统自带了很多软件和功能,其中有很多我们可能永远都用不上。但这些软件还...

微软关闭OneDrive新建组群功能(windows关闭onedrive)

微软的OneDrive云端储存服务能够让你创建组群(Group),这样当你和团队成员共同从事一个项目的时候能够通过云端协作提升效率,并且组群的文档储存空间还将同你标准的OneDrive分割独立开来。不...

微软为何取消OneDrive无限制容量存储?被75TB占用吓坏

那么为什么微软会取消Office365的无限OneDrive存储呢?“自推出Office365订阅无限制存储服务以来,一小部分用户开始备份多台PC设备,存储众多电影收藏合集和DVR录像。在某些情况下...

Win11必关的5个设置!关闭后电脑流畅到起飞,操作简单不藏私!

Windows11虽然界面炫酷,但默认设置中隐藏了不少“拖慢电脑”的坑!尤其是老电脑用户,用久了卡顿、开机慢、反应迟钝……其实只需关闭几个鸡肋功能,就能让电脑提速50%以上!...

取消回复欢迎 发表评论: