双11秒杀的风控与防刷怎么做

前言

一年一度的“双11”结束了,截止11月12日零点,天猫GMV定格在5403亿元,再次位居榜首。

其实像这种购物场景,本质上叫秒杀。秒杀什么特点?量少、折扣大、稀缺,因此这种价值势必会吸引一群大聪明来用特殊手段抢购:

比如借助这种物理外挂抢购:

我肯定单身20多年的人手速都比不过它。(别问我为什么知道,我一个朋友说的,他说中国人不骗中国人)

比如通过第三方外挂,按时准点帮忙触发App内的抢购按钮的。

还有抓取并分析抢购接口,通过程序来模拟抢购过程的。

不光是双11,比如你过年抢火车票啊,抢周杰伦演唱会的票,还有去年抢茅台,肯定也有一些人这么就是干的,低买高卖,你不要有人要。

那这种行为有什么影响呢?

首先,这会破坏公平的抢购环境,让正常买家觉得不爽:明明我是手点的,你给我搞这些花里胡哨的不讲武德是吧?

其次,如果他们频繁尝试还会让整个后台系统受到不同程度的性能损耗,此时这就属于一种黑客行为了。

接下来我就说一下程序员应该如何"反击",包含两部分:

  • 如何防止他们利用非法途径比别人快,此时我们一般利用风控去做。
  • 如何防止他们一直频繁请求,此时我们会有很多防刷措施。

风控

刚才说了,有些人他是在活动后再搞那些小聪明的,但其实进来的流量我们都无法将其定义为非法流量,这个只能借助像风控这种多维度校验,才能将其识别出来,除非它跳步骤。

什么是风控?其实就是针对某个用户,在不同的业务场景下,检查用户画像中的某些数据,是否触碰了红线。

一个用户画像的基础要素包括手机号、设备号、身份、IP、地址等。一些延展的信息还包括信贷记录、购物记录、履信记录、工作信息、社保信息等等。

这些数据的收集,仅仅依靠单平台是无法做到的,这也是为什么风控的建立需要多平台、广业务、深覆盖,因为只有这样,才能够尽可能多地拿到用户数据。

像阿里腾讯这种大厂,其涵盖非常多的业务线与业务场景,正因为有这些大量数据的支撑,其风控才可能做得更好。

但对于小公司来说,建立一个风控系统是非常困难且不切实际的。但话又回来了,小公司可能也不会太在意谁下单快,先保证流量再说吧。

防刷

限流

我们可以利用一些简单的限流措施,比如Nginx限流:1秒内只允许你请求一次。这种方式可以有效解决黑产流量对单个接口的高频请求。

关于限流内容较多,我会在之后单独出一篇文章详细讲解。

Token机制

Token 我想你是知道的,一般都是用来做鉴权的。放到秒杀的业务场景就是,对于有先后顺序的接口调用,我们要求进入下个接口之前,要在上个接口获得令牌,不然就认定为非法请求。同时这种方式也可以防止多端操作对数据的篡改,如果我们在 Nginx 层做 Token 的生成与校验,可以做到对业务流程主数据的无侵入。

黑名单

黑名单分为本地黑名单和集群黑名单两种,顾名思义,就是通过黑名单的方式来拦截非法请求的。

那黑名单从哪里来呢?总体来说有两个来源:

一个是从外部导入,可以是风控,也可以是别的渠道。

另一个就是自己生成自己用。前面介绍了 Nginx 有条件限流会过滤掉超过阈值的流量,但不能完全拦截,所以索性就不限流,直接全部放进来。

随后我们实现一套”逮捕机制“,可以利用缓存,比如Redis去统计 1 秒内这个用户或者 IP 的请求频率,如果达到了我们设定的阈值,我们就认定其为黑产,然后将其放入到本地缓存黑名单。

黑名单可以被所有接口共享,这样用户一旦被认定为黑产,其针对所有接口的请求,都将直接被全部拦截,实现刷子流量的 0 通过。

总结

这篇文章主要介绍了秒杀系统的黑产问题:通过外部工具、第三方软件参与抢购活动,因为其速度更快、发出请求的频率更高,使得黑产用户获得了比普通用户更大的抢购成功率,这种行为不仅严重破坏了公平的抢购环境,同时也给秒杀系统带来了巨大的额外负担。

在对抗"快人一步"的问题上,我们简单介绍了风控系统。在对抗刷子流量的问题上,我们介绍了Nginx限流、Token机制、黑名单机制。

其实一个完整的秒杀系统是非常复杂的,要考虑非常多的问题,今天介绍的也只是冰山一角。后续我会持续输出干货,介绍更多关于秒杀的核心问题和具体解决方案。

最后

如果感觉这篇文章对你有帮助,欢迎点赞评论,也欢迎大家关注我的公众号:沐晨聊编程。

我是沐晨,咱们下期见。

おすすめ

転載: juejin.im/post/7032561245555261447