限流的认识

2020-06-30  本文已影响0人  剑道_7ffc

基本认识

场景分析

当流量超过阈值时,回导致cpu和内存的报表,部分服务开始不可用,从而导致整个系统的崩溃。

引入限流

通过设置最大的流量限制,当超过时就拒绝访问,好处是可以保护系统,坏处是被限流的用户体验不好,所以,限流是有损的解决方案。

限流的作用

1 保护不因为瞬间流量而崩溃 2 防止恶意请求流量,恶意攻击。

常见的限流算法

滑动窗口

发送方窗口大小由接收方决定,目的是为了控制发送速度,以免接收方缓存不够大,导致内存溢出。

image.png
演示地址:
https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/selective-repeat-protocol/index.html

漏桶(控制传输速率Leaky bucket)

基本原理

1,以恒定速率往下漏水
2 加水的速率可快可慢

桶满的处理方式

1 不允许继续往桶里加水,等桶里一部分水放走后,在允许加水
2 溢出的水直接抛弃掉。


image.png

令牌桶(能够解决突发流量)

组成元素

1 令牌桶:以恒定速度往桶里加令牌,若桶满后则丢弃令牌
2 令牌流:存放令牌的速度
3 数据流:取令牌的速度

情境分析
image.png

数据流的速率 等于 令牌流的速率,数据流的速率 小于 令牌流的速率, 数据流的速率 大于 令牌流的速率

实现方式

恒定速率

guava包中有RateLimiter类,可以用来实现恒定速率,进而可以实现漏桶算法和令牌桶算法

最大并发个数

可以通过Semaphore来实现,可以实现滑动窗口的算法。

上一篇 下一篇

猜你喜欢

热点阅读