消峰限流有哪几种方式?

消峰限流的方式

  1. 业务视角

    1. 验证码
    2. 回答问题环节
  2. 技术视角

    1. 消息队列异步化用户请求

    2. 限流,对流量进行层层过滤

      1. nginx 层限流,

        1. 一是控制速率 limit_req 漏桶算法

          csharp 复制代码
          limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
          server { 
              location / { 
                  limit_req zone=mylimit;
              }
          }
          **-------------------------------------------------------------**
          **以上配置表示,限制每个 IP 访问的速度为 2r/s**
          limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
          server { 
              location / { 
                  limit_req zone=mylimit **burst**=4;
              }
          }
          
          burst=4 表示每个 IP 最多允许4个突发请求,如果单个 IP 在 10ms 内发送 6 次请求
          会有 1 个请求被立即处理了,4 个请求被放到 burst 队列里排队执行了,
          另外 1 个请求被拒绝了。
          **--------------------------------------------------------------**
          limit_req_zone $userId zone=mylimit:10m rate=2r/s;
          server { 
              location / { 
                  limit_req zone=mylimit;
              }
          }
          **基于用户ID的限流**
        2. 二是控制并发连接数 limit_conn_zone limit_conn

          csharp 复制代码
          limit_conn_zone $binary_remote_addr zone=perip:10m;
          limit_conn_zone $server_name zone=perserver:10m;
          server {
              ...
              limit_conn perip 10;
              limit_conn perserver 100;
          }
          其中 limit_conn perip 10 表示限制单个 IP 同时最多能持有 10 个连接;
          limit_conn perserver 100 表示 server 同时能处理并发连接的总数为 100 个
        3. ngx_http_upstream_module

      2. 服务端限流

        1. 常用的限流算法
          1. 时间窗口算法
          2. 漏桶算法
          3. 令牌算法
      3. 技术实现

        1. Nginx
        2. guava RateLimiter
        3. tomcat limitlatch
        4. Sentinel & Hystrix
      4. 方案

        1. 同一用户限流,根据UserID限流
        2. 某个IP进行限流
        3. 接口进行限流

      限流是一种有损的技术消峰;验证码、回答问题以及异步化消息队列是无损技术消峰


    延伸阅读

相关推荐
炫酷的大高个6 分钟前
98% 连跑 20 次只剩 67%,我算了大模型重试账
人工智能·架构·开源
用户66026761187926 分钟前
AI 代码上线前的第 24 道门禁:上线失败时,怎样在 10 分钟内退回?
后端·架构
科研邪修法1 小时前
培训PDF保护配置:把需求转换成可验收权限
linux·服务器·网络
humcomm1 小时前
设计与架构 · 01 sidecar 会消失吗:从 Istio ambient GA 到 AWS App Mesh 关停,一次服务网格数据面的重新洗牌
架构·istio·aws
分布式存储与RustFS2 小时前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Eyfcom2 小时前
〖物流低代码实战 01〗物流页面可视化搭建的底层架构:协议、引擎与产物的三重奏
低代码·架构·快递系统·物料体系·物流低代码实战
Lansonli3 小时前
大数据Spark(八十八):Spark任务资源之Standalone集群测试
java·服务器·spark
雪落漂泊4 小时前
Liunux进程(七):程序控制篇(中)
linux·运维·windows
分布式存储与RustFS4 小时前
工作流脚本和依赖 JAR 散在各节点本地盘:用 DolphinScheduler 资源中心接到 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
浪遏11 小时前
recruitment-cli:让 AI 接手求职招聘,从架构到一次发送超时
架构·typescript·node.js