限流的作用
-
保护系统避免被瞬时流量冲垮;
-
预防恶意请求;
根据阈值控制流量
-
限流指标(可以容纳的流量、已容纳的流量、可以接受的流量);
-
限流过程(通过算法来实现);
-
限流结果(处理策略);
限流算法
-
计数器算法;
-
指定周期内累加访问次数,当访问次数达到设定的阈值时,触发限流策略,当进入下一个周期时进行访问次数的清零;
-
-
滑动窗口算法;
-
为了解决计数器算法带来的临界值问题,所以引入了滑动窗口算法;
-
-
令牌桶限流算法;
-
对于每一个请求,都需要从令牌桶中获得一个令牌,如果没有获得令牌,则需要出发限流策略;
-
以恒定的速度生成令牌;
-
设计
-
桶的大小;
-
令牌的标记;
-
定时任务生成令牌;
-
令牌获取的接口;
-
-
-
漏桶限流算法;
-
漏桶是一种恒定速度的限流算法;
-
缺点:无法处理短时间内突发的流量
-
水的流出速度是固定的;
-
桶的大小也是固定的
-
简介
Sentinel是面向分布式服务架构的轻量级限流控制组件,主要以流量为切入点,从限流,流量整形,服务降级,系统负载均衡保护等多个维度来帮助我们保障微服务的稳定性。
特性
-
丰富的应用场景:秒杀、消息削峰填谷、集群流量控制等;
-
实时监控:开发者可以在控制台中查看应用的数据;
-
开源生态支持:提供开箱即用与其他开源框架/库的整合,例如Spring Cloud、Dubbo、gRPC的整合,开发者只需要引入相应的依赖并进行简单的配置即可快速接入
使用步骤
-
定义资源
-
定义限流规则
-
检查规则是否生效
流量控制
Sentinel流量控制统计有两种类型,通过grade属性来控制:
-
并发线程数(FLOW_GRADE_THREAD)
-
QPS(FLOW_GRADE_QPS)