java流量控制_Java架构师:高并发下的流量控制

这个时候如果不做任何保护措施,服务器就会承受很大的处理压力,请求量很高,服务器负载也很高,并且当请求超过服务器承载极限的时候,系统就会崩溃,导致所有人都不能访问。

5eeeaf514cb08555e44846870ea0ef42.png

为了应用服务的高可用,一个常用的办法是对大流量的请求(秒杀/抢购)进行限流,拦截掉大部分请求,只允许一部分请求真正进入后端服务器,这样就可以防止大量请求造成系统压力过大导致的系统崩溃,从而保护服务正常可用。

令牌桶(Token Bucket) 、 漏桶(leaky bucket) 和 计数器 算法是最常用的三种限流的算法。

限流算法

计数器

计数器限流算法也是比较常用的,主要用来限制总并发数。比如限流 qps 为 100,算法的实现思路就是从第一个请求进来开始计时,在接下去的 1s 内,每来一个请求,就把计数加 1 ,如果累加的数字达到了 100 ,那么后续的请求就会被全部拒绝。等到 1s 结束后,把计数恢复成 0 ,重新开始计数。

这种实现方式有一个弊端:如果我在单位时间 1s 内的前 10ms ,已经通过了 100个请求,那后面的 990ms ,只能眼巴巴的把请求拒绝,这种现象称为 突刺现象。

漏桶

为了消除 突刺现象,可以采用漏桶算法实现限流,漏桶算法这个名字就很形象,算法内部有一个容器

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值