高并发利器之限流

本文介绍了高并发系统中的限流实践,包括限流的重要性、业务场景、限流方式和算法,以及具体的落地方案。限流算法涉及计数器、时间窗口、漏桶和令牌桶等,文中推荐了Guava的RateLimiter、nginx模块以及Sentinel等解决方案。最后,文章讨论了实际部署中遇到的问题,提出限流应尽早介入,如使用nginx进行前端限流以提高系统稳定性。
摘要由CSDN通过智能技术生成

限流实践

高并发系统三把利器:缓存、降级和限流
限流大家多少都有所了解,就是限制当前请求流量、数量,避免系统被蜂拥而至的流量瞬间击垮,刚好最近手上业务系统做了限流,顺便整理出来。


我们的业务场景

  • 云变量和云列表,用户在线使用的程序变量和数组,一些作品运行人数过多或者作者滥用(for循环中修改变量或数组),大量请求消息落到kafka,而我们消费机器能力有限,造成消息堵塞。直接的影响就是业务不能正常使用,频繁fullgc。
  • 无论什么系统,业务上的优化往往更能立竿见影,且成本较低。这里不做详述,比较偏业务,主要思路是尽量减少落入kafka中的无效消息,合并重复消息。

限流方式

  • 限制总并发数(比如数据库连接池、线程池)
  • 限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)
  • 限制时间窗口内的平均速率(如Guava的RateLimiter、nginx的limit_req模块,限制每秒的平均速率)
  • 限制远程接口调用速率
  • 限制MQ的消费速率。
  • 可以根据网络连接数、网络流量、CPU或内存负载等来限流

限流算法

Google大法了相关资料,总结常用的限流算法如下:

  • 计数器
    • 通过一个计数器来记录一定时间内某个接口的访问数量,超过阈值则不允许继续访问,或者后续的请求放入队列,计数器到下一个时间段清零,这里缺点是&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值