冰河技术
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
  • 专栏介绍

    • 我要手把手教你搭建并研发一套抗瞬时百万流量的秒杀系统
  • 研发背景

    • 第01章:从多个角度聊聊为何要学习秒杀系统
  • 目标与挑战

    • 第02章:秒杀系统的目标与挑战
    • 第03章:秒杀系统高并发大流量的应对之道
  • 用户故事

    • 第04章:秒杀系统需求与流程梳理
    • 第05章:秒杀系统技术流程梳理
  • 架构设计

    • 第06章:秒杀系统总体方案目标与架构设计
    • 第09章:秒杀系统数据模型设计
  • 环境搭建

    • 第07章:秒杀系统基础环境搭建
    • 第08章:秒杀系统研发环境搭建
    • 第10章:基于DDD快速搭建秒杀系统项目并测试
  • 用户服务设计与实现

    • 第11章:用户登录授权认证流程的设计与实现
    • 第12章:访问登录授权限制接口的流程设计与实现
  • 秒杀活动设计与实现

    • 第13章:秒杀活动业务流程与接口设计
    • 第14章:秒杀活动后端业务与接口开发
    • 第15章:秒杀活动运营端业务开发
    • 第16章:秒杀活动用户端业务开发
  • 秒杀商品设计与实现

    • 第17章:秒杀商品业务流程与接口设计
    • 第18章:秒杀商品后端业务与接口开发
    • 第19章:秒杀商品运营端业务开发
    • 第20章:秒杀商品用户端业务开发
  • 秒杀订单设计与实现

    • 第21章:秒杀订单业务流程与接口设计
    • 第22章:秒杀订单后端业务与接口开发
    • 第23章:秒杀订单用户端业务开发
    • 第24章:秒杀订单运营端业务开发
  • 经典问题重现

    • 第25章:重现刷单流量问题
    • 第26章:重现库存超卖问题
  • 极致缓存设计

    • 第27章:混合型缓存设计场景与原则
    • 第28章:混合型缓存架构设计与技术选型
    • 第29章:混合型缓存通用代码设计与实现
    • 第30章:分布式锁通用代码设计与实现
    • 第31章:混合型缓存通用模型设计与实现
  • 整合极致缓存

    • 第32章:秒杀活动列表混合型缓存设计与实现
    • 第33章:秒杀活动详情混合型缓存设计与实现
    • 第34章:秒杀商品列表混合型缓存设计与实现
    • 第35章:秒杀商品详情混合型缓存设计与实现
  • 缓存领域事件

    • 第36章:领域事件通用缓存模型设计
    • 第37章:秒杀活动监听缓存领域事件的设计与实现
    • 第38章:秒杀活动发送缓存领域事件的设计与实现
    • 第39章:秒杀商品监听缓存领域事件的设计与实现
    • 第40章:秒杀商品发送缓存领域事件的设计与实现
  • 订单领域事件

    • 第41章:秒杀订单监听领域事件的设计与实现
    • 第42章:秒杀订单发送领域事件的设计与实现
  • 库存扣减防超卖设计

    • 第43章:秒杀扣减库存设计
    • 第44章:基于数据库设计并实现库存防超卖
    • 第45章:基于分布式锁设计并实现库存防超卖
    • 第46章:基于Lua脚本设计并实现库存防超卖
  • 单体到微服务

    • 第47章:从单体到微服务重构项目
    • 第48章:重现分布式事务问题
    • 第49章:基于TCC模型解决分布式事务问题
    • 第50章:基于AT模型解决分布式事务问题
    • 第51章:基于可靠消息最终一致性模型解决分布式事务问题
  • 缓存数据一致性

    • 第52章:零侵入重构秒杀活动异步事件后置处理器
    • 第53章:零侵入重构秒杀商品异步事件后置处理器
    • 第54章:零侵入重构秒杀订单异步事件后置处理器
  • 异步化设计

    • 第55章:异步化下单流程设计
    • 第56章:异步化下单编码实现
    • 第57章:异步化扣减商品库存流程设计
    • 第58章:异步化扣减商品库存编码实现
  • 库存分库分表与分桶设计

    • 第59章:商品库存分库分表与分桶设计
    • 第60章:商品库存分库分表与分桶编码实现
    • 第61章:下单流程整合商品库存分桶
  • 订单分库分表设计

    • 第62章:订单分库分表设计
    • 第63章:订单分库分表编码实现
    • 第64章:下单流程整合订单分库分表
  • 隔离与限制策略

    • 第65章:秒杀系统流量隔离策略
    • 第66章:秒杀系统规模限制策略
  • 预约系统设计与实现(含缓存)

    • 第67章:预约系统需求梳理与架构设计
    • 第68章:预约系统数据模型设计
    • 第69章:预约系统业务流程与接口设计
    • 第70章:预约系统运营端业务与接口开发
    • 第71章:预约系统用户端业务与接口开发
    • 第72章:下单流程整合预约系统
  • 预约系统优化

    • 第73章:预约系统分库分表设计
    • 第74章:预约系统分库分表编码实现
    • 第75章:预约系统整合分库分表
  • 秒杀系统削峰策略

    • 第76章:秒杀系统削峰总体概述
    • 第77章:打散客户端流量削峰
    • 第78章:消息队列削峰
    • 第79章:限流削峰
  • 分布式流控

    • 第80章:Sentinel概述与本地搭建环境
    • 第81章:秒杀系统整合Sentinel实现流控
    • 第82章:Sentinel核心技术与配置规则(加餐)
  • 单机限流

    • 第83章:基于QPS实现单机API限流
    • 第84章:基于线程池实现单机并发数限流
  • 业务网关

    • 第85章:业务网关概述与核心架构
    • 第86章:秒杀系统整合业务网关
    • 第87章:业务网关整合Nacos配置
    • 第88章:业务网关整合Sentinel流控
    • 第89章:业务网关整合Guava流控
    • 第90章:业务网关使用自带流控
  • 流量网关

    • 第91章:流量网关环境初步搭建
    • 第92章:流量网关项目搭建
    • 第93章:流量网关实现限流
  • 服务容错

    • 第94章:服务雪崩与容错方案
    • 第95章:服务降级核心原理与落地方案
    • 第96章:热点数据问题与解决方案
    • 第97章:秒杀系统实现服务容错
  • 服务配置

    • 第98章:凌乱的服务配置与解决方案
    • 第99章:秒杀系统整合Nacos配置中心
    • 第100章:实现配置动态刷新
    • 第101章:实现配置动态共享
  • 链路追踪

    • 第102章:链路追踪核心原理与解决方案
    • 第103章:秒杀系统实现链路追踪
    • 第104章:扩展Dubbo源码实现链路追踪
    • 第105章:秒杀系统链路追踪可视化
  • 日志治理

    • 第106章:日志治理概述、原则与架构
    • 第107章:快速搭建ELK环境并导入配置
    • 第108章:秒杀系统整合日志治理
  • 防刷方案

    • 第109章:实现基于条件限流机制防刷
    • 第110章:实现基于Token编排机制防刷
    • 第111章:实现基于黑名单机制防刷
  • 风控模型

    • 第112章:黑灰产与风控基础知识介绍
    • 第113章:风控模型架构与落地方案
    • 第114章:秒杀系统风控模型设计
    • 第115章:秒杀系统风控模型实现
  • 容器化集群部署

    • 第116章:容器化集群部署架构设计
    • 第117章:容器化集群部署落地实现
    • 第118章:容灾架构设计与落地方案
  • 全链路压测

    • 第119章:全链路压测场景与核心流程
    • 第120章:全链路压测核心原则与策略
    • 第121章:全链路压测落地方案实施
  • 极致优化

    • 第122章:服务器物理机极致优化
    • 第123章:单机服务性能极致优化
    • 第124章:秒杀系统流程极致优化
  • 专栏总结

    • 结尾:秒杀系统整体专栏总结
  • 番外篇

    • 第01章:互联网大厂是如何设计和使用缓存的

《Seckill秒杀系统》第109章:实现基于条件限流机制防刷

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.site
文章汇总:https://binghe.site/md/all/all.html
源码获取地址:https://t.zsxq.com/0dhvFs5oR

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:实现秒杀系统基于Nginx条件限流的防刷方案,掌握秒杀系统基于条件限流防刷的原理,并能够将基于条件限流防刷的落地方案和实现方式灵活应用到自身实际项目中。

大家好,我是冰河~~

秒杀系统的流程之所以非常高,是因为参与秒杀活动的商品一般都是非常稀缺的商品,这些商品本身的价值又比较高,这无形当中就会吸引很多黄牛党和刷单用户来参与秒杀活动。

一、前言

刷单用户和黄牛党会利用非正常手段来向秒杀系统发起大量的请求,这些请求对正常用户来说是非常不公平的,不仅会挤占正常用户抢购秒杀商品的通道,还会大量占用服务器的带宽,消耗大量服务器的资源,如果对这类请求不做限制,可能会引起秒杀系统崩溃宕机,进而引发一系列严重的事故。

二、本章诉求

实现接口防刷有多种方案,本章,我们就一起实现接口防刷的第一种方案:基于条件限流防刷。主要基于条件来实现接口的访问频率,以此来达到接口防刷的目的,重点掌握基于条件防刷的实现原理与落地实现方案,并能够将其灵活应用到自身实际项目中。

三、实现基于条件限流

这里,我们主要是基于流量网关实现条件限流,尽量将限流方案前置化,将大部分刷单流量挡在整个秒杀系统的入口之外,提升秒杀系统的稳定性和可靠性。

注意:这里我们以获取秒杀活动详情为例,来实现基于用户条件限流的防刷功能。小伙伴们如果想实现基于其他接口的条件限流防刷功能,另外,在之前的演示的基于用户实现限流时,我们是在Lua脚本中写死了用户的标识,这里,我们通过Lua脚本从请求的Header中获取用户Token作为用户的标识,这样就可以在真实环境中实现基于用户的限流。

秒杀系统基于条件限流防刷的具体步骤如下所示。

(1)set_common_var.lua文件

set_common_var.lua文件是一个Lua脚本文件,表示设置一些通用的变量。

源码详见:seckill-nginx工程下的lua/set_common_var.lua。

--获取请求头里的参数
local headers = ngx.req.get_headers()
--获取access_token
local user_access_token = headers["access-token"]
if not user_access_token then
    user_access_token = ""
end
return user_access_token

可以看到,set_common_var.lua脚本中的主要逻辑就是获取请求头信息,从请求头信息中获取到用户的access-token并返回。

(2)修改domain.com文件

在domain.com文件中引入set_common_var.lua脚本文件,并将返回的user_access_token赋值给$user_access_token变量,如下所示。

#用户token,可作为标识用户的唯一id
set_by_lua_file $user_access_token D:/Workspaces/myself/seckill/myself/seckill/seckill/seckill-nginx/lua/set_common_var.lua;

(3)修改common.conf文件

查看完整文章

加入冰河技术知识星球,解锁完整技术文章与完整代码

在 GitHub 上编辑此页
上次更新: 2026/4/29 16:18
Contributors: binghe001
Next
第110章:实现基于Token编排机制防刷
阅读全文
×

扫码或搜索:冰河技术
发送:290992
即可立即永久解锁本站全部文章

星球会员
跳转链接