秒杀服务限流策略

合法性限流:拦截非法请求;负载限流:使用集群实现负载均衡;服务限流:配置服务器&限流算法&MQ等中间件&缓存&监控等

一、请求抵达服务器前:

  • 合法性限流
    1. IP限制:若同一IP短时间内(如毫秒级)下单,或重新购买同一件商品,可认定为机器人刷单或不合法用户,可通过NGINX的IP黑名单做限制;
    2. 隐藏入口:秒杀活动开始时,才开放真正的秒杀入口地址;
    3. 验证码:通过要求输入验证码,可以拉长用户请求时间,降低峰值。
  • (软)负载限流
    1. 集群:Nginx(& LVS)
    2. 网络七层模型:第七层「应用层」——Nginx做负载;第二层「数据链路层」——通过虚拟MAC映射多台服务器;第三层「网络层」——IP负载;第四层「传输层」——端口号负载(LVS)。
    3. 建议使用Nginx,或Nginx+LVS做两层负载即可。(过多级联负载,增加转发路径,有网络延迟风险)
    4. 注,硬件负载:F5, Array

二、请求到达服务器:

  • 服务限流
    1. web服务器限流:如tomcat设置最大请求数,超过的请求会被无条件拒绝;
    2. 算法限流:令牌桶算法、漏桶算法(如Google Guava类库)
    3. 消息队列:不同子系统根据自身处理能力从消息队列中获取适量请求做处理;
    4. 缓存限流:静态缓存——Nginx对静态文件做定向缓存转发(OSS,CDN);动态缓存——优先使用本地缓存(如 Guava Cache),其次使用远程缓存(如 Redis集群);注:缓存层级不宜过多,建议静态缓存+二级动态缓存即可。
    5. 监控限流:监控服务资源,若资源不足时,降级处理。如使用专门线程监控CPU,若CPU资源不足时,可以降级部分请求,像关闭”三个月之前的订单查询”等非核心服务,待CPU资源缓解时再开启。