限流的作用

  • 保护系统避免被瞬时流量冲垮;

  • 预防恶意请求;

根据阈值控制流量

  • 限流指标(可以容纳的流量、已容纳的流量、可以接受的流量);

  • 限流过程(通过算法来实现);

  • 限流结果(处理策略);

限流算法

  • 计数器算法;

    • 指定周期内累加访问次数,当访问次数达到设定的阈值时,触发限流策略,当进入下一个周期时进行访问次数的清零;

  • 滑动窗口算法;

    • 为了解决计数器算法带来的临界值问题,所以引入了滑动窗口算法;

    • Alibaba-Sentinel_流量控制

  • 令牌桶限流算法;

    • 对于每一个请求,都需要从令牌桶中获得一个令牌,如果没有获得令牌,则需要出发限流策略;

    • 以恒定的速度生成令牌;

    • 设计

      • 桶的大小;

      • 令牌的标记;

      • 定时任务生成令牌;

      • 令牌获取的接口;

  • 漏桶限流算法;

    • 漏桶是一种恒定速度的限流算法;

    • 缺点:无法处理短时间内突发的流量

    • 水的流出速度是固定的;

    • 桶的大小也是固定的

    • Alibaba-Sentinel_限流_02

 

简介

Sentinel是面向分布式服务架构的轻量级限流控制组件,主要以流量为切入点,从限流,流量整形,服务降级,系统负载均衡保护等多个维度来帮助我们保障微服务的稳定性。

特性

  • 丰富的应用场景:秒杀、消息削峰填谷、集群流量控制等;

  • 实时监控:开发者可以在控制台中查看应用的数据;

  • 开源生态支持:提供开箱即用与其他开源框架/库的整合,例如Spring Cloud、Dubbo、gRPC的整合,开发者只需要引入相应的依赖并进行简单的配置即可快速接入

使用步骤

  1. 定义资源

  2. 定义限流规则

  3. 检查规则是否生效

流量控制

Sentinel流量控制统计有两种类型,通过grade属性来控制:

  • 并发线程数(FLOW_GRADE_THREAD)

  • QPS(FLOW_GRADE_QPS)