信号量限流,高并发场景不得不说的秘密
限流可以认为是信号一种降级,一般是量限流高根据后台的负载提前预估的一个阈值(也可以动态调整)。超过了这个值,并发不得不说就要进行一些旁路处理。场景根据业务形态,信号会有直接拒绝、量限流高延迟处理、并发不得不说保持等待、场景部分穿透、信号默认返回等响应方式。量限流高
concurrent包中的并发不得不说信号量,由于使用简单,场景易于理解,信号被广泛应用。量限流高但是并发不得不说,你要是直接用了网友们分享的简单代码而不经过认真测试,那可以送你一部电影观赏一下:《当故障来敲门》。

看下面简单的代码,acquire和release是一对同命鸳鸯,我们把release贴心的放在了finally块中,一切显得非常和谐。
1)模拟的业务请求,网站模板耗时大约是100毫秒
2)acquire的参数5代表同一时间允许5个线程进行处理
3)每次执行完毕,输出一下本次执行的具体耗时,加上等待时间

我们启动1000个线程去执行req方法。
SemaphoreLimiterBadChecker limiter = new SemaphoreLimiterBadChecker(); ExecutorService executor = Executors.newCachedThreadPool(); for (int i = 0; i < 1000; i++) { executor.submit(() -> { while (true) { System.out.println(limiter.req()); } }); }下面是执行结果。

可以看到,虽然我们的接口耗时只有100ms,实际的执行时间,却长的多,而且并没有出现fail的情况。运行稍长一点时间,能够发现有大量的线程处于饿死的状态。改为公平锁并不能改善这一情况。

这就是故障。
原因就在于。web端(如tomcat)的资源也是有限的。当我们的限流器产生了作用,而实际并发请求比处理能力高的时候,源码下载这种线程阻塞情况就会逐级传递。服务器的响应可能会有以下过程:
1)压力普通,正常服务,耗时正常 。
2)压力上升,服务开始出现大面积超时,由于使用不公平锁竞争,偶尔会有正常耗时的请求。
3)压力继续增大,服务器开始进入假死状态,几乎不能再接受新的请求。

表现在用户端,既不能出现服务不能处理的提示,也无法中断请求,所有的请求都在转圈。继续加大tomcat的连接数和线程数,并不会起到多大的作用。
把acquire改成tryAcquire?依然不能解决问题。tryAcquire返回的是bool类型,失败的时候依然能够往下执行,包括finally块。有个毛用?
if(!tryAcquire()){ return TOO_MANY_REQUESTS; }上面多加了一个判断,这个才是免费信息发布网正途。tryAcquire还可以加超时参数,不至于立马返回失败,也不至于让调用者无限等待,而是将成功的请求控制在一个合理的响应时间。
响应时间=超时时间+业务处理时间

具体做法,拿spring来说,你可以在preHandle中获取这个许可,然后在postHandle中释放它;也可以使用定时器以一定的频率去重制信号量。
当然你也要区别对待。
1、像上面提到的web服务,可以直接拒绝服务。快速响应才是重要的
2、像一些秒杀、下单等,可以通过排队或者等待解决(部分的)
3、像消息消费等,如果没有顺序需求,我觉得,无限等待还可能是个好的方式
4、对于大多数可有可无的业务结果,使用一些默认值直接返回,效果会好的多。虽然是限流,但干的是熔断的活
使用者一定要注意区分。
End
非常让人奇怪的是,java抽象了使用场景并不是很高(相对)的CyclicBarrier,但是并没有一个通用的限流方法。信号量虽然可以模拟实现这个过程,但它不太友好,太容易出错。限流还是使用guava的组件进行控制比较好(非分布式),我们会在后面的文章来探讨它。
相关文章
- 摘要:随着互联网的发展,越来越多的用户对网络速度有了更高的要求。而千兆以太网已经成为了当前网络中最常见的标准之一。本文将详细介绍如何在电脑上安装千兆端口,帮助用户快速提升网络速度。...2025-11-05
如何使用苹果电脑连接华硕电脑进行系统重装(以苹果AirDrop技术为基础,教你一步步完成华硕电脑系统重装)
摘要:随着科技的进步,越来越多的人开始使用多台设备来满足不同的需求。然而,在使用不同品牌的电脑时,可能会遇到一些问题,例如在华硕电脑上进行系统重装。本文将以苹果电脑和华硕电脑为例,介绍如...2025-11-05二合一系统制作教程(利用技巧与工具,快速搭建一体化工作平台)
摘要:随着科技的不断进步,二合一系统越来越受欢迎,它将笔记本电脑和平板电脑的功能融合在一起,为用户提供了更加便捷高效的工作环境。本文将分享制作二合一系统的教程,帮助读者打造自己的一体化工...2025-11-05P2P爱钱进的发展及影响力分析(以透明度和风险控制为的P2P平台)
摘要:作为国内领先的P2P网贷平台之一,爱钱进以其透明度高、风险控制严格的特点而备受关注。本文将分析爱钱进的发展历程以及其对国内P2P行业的影响力,并重点探讨透明度和风险控制在P2P平台...2025-11-05- 摘要:近年来,手机市场竞争激烈,各大品牌纷纷推出旗舰机型。OPPO作为中国手机厂商的代表之一,凭借其出色的拍照技术和稳定性能赢得了广大用户的青睐。而OPPOR9.11手机则是该品牌旗下一...2025-11-05
- 摘要:在日常生活中,我们常常会遇到各种各样的数字,这些数字似乎只是简单的符号,但实际上它们背后可能隐藏着无限的奥秘。本文将以353.54为主题,深入探索它所代表的意义和蕴含的多重含义。通...2025-11-05

最新评论