#Java # 限流方案

104 阅读1分钟

容器限流

Tomcat 限流

  • 在 server.xml 文件设置最大线程数
<Connector port="80" protocol="HTTP/1.1"
          connectionTimeout="20000"
          maxThreads="110"
          redirectPort="443" />

Nginx 限流

  • 控制速率
    • 使用 limit_req_zone 限制单位时间内的请求数
  • 控制并发数
    • 使用 limit_conn_zonelimit_conn 控制并发数

服务端限流

时间窗口算法

  • 固定时间窗口
    • 使用Redis的有序集合实现
  • 滑动时间窗口

漏桶算法

  • 使用 Redis-Cell 实现

令牌算法

  • 使用 Google 的 guava 包来实现

已实现的限流方案

  • 分布式
    • Redis 实现分布式限流方案
  • 单机环境
    • Guava 实现单机服务限流