以下文章来源于阿里云开发者 ,作者非有 mp.weixin.qq.com/s/A5VYjstID…
本人思考
消息中间件就采用的漏桶限流的思想。能看出作者有深入思考与沉淀👍
令牌桶算法、消息队列,业务使用
消息队列与漏桶算法的主要区别:
1.容量资源:消息队列,存储容量足够大;漏桶算法,桶的容量有限;
2.时效:消息队列,异步处理;漏桶算法,同步处理;
3.灵活性:与漏桶算法相比,消息队列提供了更大的灵活性。例如,可以动态地调整消费数量。
一、限流
为什么要进行限流?
1.瞬时流量过高,服务被压垮?
2.恶意用户高频光顾,导致服务器宕机?
3.消息消费过快,导致数据库压力过大,性能下降甚至崩溃? ……
什么是限流?
限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。
在高并发系统中,出于系统保护角度考虑,通常会对流量进行限流。
在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。
二、限流算法
三、应用实践
四、总结
本文介绍的实现方式属于应用级限制,应用级限流方式只是单应用内的请求限流,不能进行全局限流。假设将应用部署到多台机器,我们需要分布式限流和接入层限流来解决这个问题。
总的来说,要保证系统的抗压能力,限流是一个必不可少的环节,虽然可能会造成某些用户的请求被丢弃,但相比于突发流量造成的系统宕机来说,这些损失一般都在可以接受的范围之内。前面也说过,限流可以结合熔断、降级一起使用,多管齐下,保证服务的可用性与健壮性。