知识卡片

防刷的边界认知:抢购业务层能做的有限,需要联合支付方且依赖前置账号体系

普通读书笔记卡

内容

面对”恶意刷号导致真实用户抢不到名额”这个质疑,作者给出的回答很坦诚地划清了业务层防刷能力的边界:这个系统本身负责的只是商品展示和购买权的发放,真正的消费行为发生在第三方支付页面,所以要防的”刷”必须依靠自己系统和第三方支付页面联合起来才能生效——具体做法是用户排队获得购买名额后,跳转去第三方时携带按双方约定的方式加密、且具有生命周期的凭证,第三方解密验证通过后才允许用户进入支付流程;这样即使有人试图脱离正常的排队流程直接高频请求获取商品,实际上也只有第一次拿到的加密凭证才可能真正有效,后续重复尝试大概率无法通过验证。但作者同时坦率承认这套机制的局限:它能保证第三方不因为被刷而受损,却无法完全避免”业务层展示商品已经没有库存、真正想买的用户因此失去机会”这个结果——脱离本系统去彻底解决恶意刷号问题,本质上已经是一个通用的防SPAM/防刷问题,超出了这套抢购业务本身该负责的范畴。另一条被反复强调的原则是:抢购业务因为请求压力大、并发极高,系统设计上要切忌为了防刷而堆砌过多判断逻辑和过多后端依赖,越简单效果反而越好;真正有效的防刷手段应当依托前置已经构建好的基础能力——账号体系和用户消费记录,通过记录每个用户的历史购买行为、限制单人购买数量来控制,而不是在抢购这个高并发临界点上现场增加复杂的规则判断。这个案例提醒了一条现实的架构设计原则:不要假设某一个系统能够独立、完美地解决它职责范围之外的问题(比如指望抢购系统自己彻底防住恶意刷号),诚实地识别出问题解决需要依赖哪些跨系统协作(联合支付方)和前置基础设施(账号体系),比在单个系统内部堆砌复杂逻辑更现实、更有效。

参考来源

- 位置:《高可用架构(第1卷)》第3章《电商架构热点专题》"3.3 秒杀系统架构解密与防刷设计"节,"3.3.7 疑问与解惑"(源文件:_epub-src/OEBPS/Text/Chapter3_3_8.xhtml) - 结论依据:原文说明"用户刷的问题就需要我们和第三方支付页面一起来控制……第三方按照约定的解密方式解密成功后才允许用户支付……恶意刷的确会使我们的业务层面展示商品没量了……这就是一个通用的防SPAM的问题了",以及"切忌增加过多逻辑,切忌过多后端依赖,越是简单效果越好……建议构建账号体系、用户消费记录这2部分",共同支撑本卡片结论。 - 原始内容:用户刷的问题就需要我们和第三方支付页面一起来控制……恶意刷的确会使我们的业务层面展示商品没量了。导致想买的用户没了机会,但可以保证第三方不受损……对的,抢购业务因为请求压力大、热门商品抢购并发高,切忌增加过多逻辑,切忌过多后端依赖,越是简单效果越好……建议构建账号体系、用户消费记录这2部分。