令牌签发-从凭证到通行证
plus 版本专属
此章节是黑马点评 Plus 版本中专有的内容,而在整套文档中将普通版本和 Plus 版本都融合在了一起,让大家更方便的学习。
此章节将详细讲解在秒杀优惠券时,是如何申请请求以及验证令牌的
有的小伙伴到这里可能有点疑惑,因为在之前的限流功能中讲到了有使用动态令牌桶,这里又出现了访问令牌,是不是觉得重复了?
其实不是的,这里的访问令牌和限流中的动态令牌并不是一回事
一、概念区分:访问令牌 vs 令牌桶动态令牌
1.1 核心定义
- 访问令牌:面向“用户-活动”的一次性通行证,用来证明某用户在某次活动入口拥有有效访问权,并在使用时被核销。
- 令牌桶动态令牌:面向“流量控制”的配额机制,用来在时间维度平滑请求速率、吸收突发流量,避免系统被瞬时冲击。
1.2 功能定位
- 访问令牌:授权与幂等控制,确保“谁”在“哪次活动”可以进入,并且每张令牌只可用一次。
- 令牌桶:限流与节奏控制,确保“系统入口”在任何时刻都不会超出可承载的速率和峰值。
1.3 使用场景
- 访问令牌:秒杀抢购、抽签预约、一次性验证(例如短信口令、入口票据),强调“资格”和“核销”。
- 令牌桶:API网关、热点接口、秒杀入口前置流控,强调“整体流量平滑”和“突发吸收”。
1.4 生命周期与状态
- 访问令牌:短有效期、一次核销即失效;不具备“自动补充”,只要过期或被消费就不存在。
- 令牌桶:持续存在的配额模型;令牌随时间自动补充、随请求自动扣减,可长期运作。
1.5 粒度与绑定维度
- 访问令牌:强绑定到具体主体(例如用户)与具体活动(例如某券),具有明确的个体身份属性。
- 令牌桶:通常按入口维度(IP、用户或接口)进行配额控制,身份仅用于区分限流维度,而非授权本身。
1.6 风险控制与安全
- 访问令牌:防重、防刷、防绕过;一人一票、一次一用,能有效抵御重复提交和脚本重放。
- 令牌桶:抗洪峰能力强;限制单位时间可通过请求数,降低雪崩风险与资源争抢。
1.7 并发与一致性
- 访问令牌:强调一次性原子核销,避免并发场景下重复入场;核心目标是“不可复用”。
- 令牌桶:强调配额的精确递增与扣减,保证速率与容量的稳定性;核心目标是“控制节奏”。
1.8 返回语义与交互
- 访问令牌:发放得到“票据字符串”,校验时明确“通过或不通过”,通过即核销。
- 令牌桶:判定得到“允许或超限”的状态;允许则请求继续执行,不涉及“票据字符串”。
1.9 失败处理与用户感知
- 访问令牌:失败多为令牌失效、过期或已用;用户需重新获取授权或等待刷新。
- 令牌桶:失败表示当前流量过大;用户通常看到“稍后重试”提示或被临时阻断。
1.10 监控与运维
- 访问令牌:关注发放成功率、冲突率、消费成功率、过期比例,评估授权流程健康度。
- 令牌桶:关注通过率、拒绝率、平均速率、峰值吸收效果,评估入口流控效果。
1.11 性能与成本
- 访问令牌:存储与校验开销小,更多是业务可信度与一致性保障的成本。
- 令牌桶:在高并发入口具有良好的吞吐与可预期性,能显著降低下游系统负载成本。
1.12 组合策略与最佳实践
- 先限流后授权:优先用令牌桶削峰限流,减少恶意或无意义请求;对通过的请求再校验访问令牌,保证资格与幂等。
- 分层防护:令牌桶负责“交通信号灯”,访问令牌负责“门票验真”;两者结合能在高并发秒杀场景下兼顾稳定性与公平性。
二者常见协作方式:先以令牌桶限流决定是否允许进入秒杀逻辑,再要求请求方携带并通过“访问令牌”的一次性校验,形成“节流 + 授权”的双重保障。