Skip to content

流量控制是怎么实现的

流量控制通过限制请求速率或资源使用,避免系统过载,保证稳定性和可靠性。常见实现方式包括 限流(如令牌桶、漏桶算法)队列缓冲拒绝策略动态调整,具体依赖工具(如 Nginx、Redis)或框架(如 Sentinel、Hystrix)。

关键事实

  1. 目标
    • 防止流量突增压垮系统(如 DDoS 攻击)。
    • 保护下游服务,确保资源合理分配。
  2. 实现方式
    • 限流算法
      • 令牌桶:按固定速率生成令牌,请求需获取令牌才能通过。
      • 漏桶:请求以固定速率流出,超量排队或丢弃。
    • 队列:缓冲请求,平滑流量。
    • 拒绝:超限请求直接返回错误(如 429 Too Many Requests)。
    • 动态调整:根据负载(如 CPU、QPS)调整阈值。
  3. 常见工具
    • Nginx:配置请求速率限制。
    • Redis:分布式计数器实现限流。
    • Sentinel:微服务流量控制,支持多种策略。

延伸与面试角度

  • 网络流量控制
    • TCP 滑动窗口:根据接收方容量调整发送速率。
    • HTTP/2 流控制:每个流有窗口大小。
  • 微服务场景
    • Sentinel:支持 QPS、线程数限流,动态规则。
    • Hystrix:熔断 + 限流,防止级联失败。
  • 动态调整
    • 根据 CPU/内存使用率调整阈值(如 Netflix 的自适应限流)。
  • 优缺点
    • 令牌桶:支持突发流量,灵活。
    • 漏桶:流量平滑,但不适应突增。
  • 实际应用
    • 电商秒杀:Redis 令牌桶限流。
    • API 网关:Nginx 控制访问速率。