# 《Seckill秒杀系统》第77章:打散客户端流量削峰

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

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

  • 本章难度:★★☆☆☆
  • 本章重点:理解打散客户端流量为何能够限制秒杀系统的瞬时流量,重点理解打散客户端流量限流的核心原理,并掌握打散客户端流量的方法,同时,能够将其灵活应用到自身实际项目中。

大家好,我是冰河~~

预约系统在一定程度上能够限制参与秒杀活动的人数,从而在一定程度上限制并缓解了秒杀系统的流量压力。尽快如此,如果运营人员将秒杀商品的预约人数上限设置的很高,那秒杀系统在瞬时并发流量还是非常高的。此时,为秒杀系统设计一定的限流策略,能够有效的保护秒杀系统,使其避免由于巨大的瞬时流量而带来的严重事故。

# 一、前言

不管是秒杀系统,还是其他互联网项目,其本质上承载并发流量的能力多多少少都是有上限的,有些系统承载的并发流量会高一些,有些系统承载的并发流量要低一些,不可能无限制的承载太高的并发流量。所以,互联网项目多多少少会设计一些限流措施。

# 二、本章诉求

打散客户端流量,通常的做法就是在客户端设置验证码和问答题,以此来将客户端瞬间就能够发出的请求,平滑到一段时间内发出,延缓客户端的请求。而在处理这些验证码和问答题时,用户的手速有快有慢,这就错开了用户的请求,在一定程度上平滑了秒杀系统的瞬时高并发流量。

本章,简单介绍下验证码和问答题的流程设计和落地实现,掌握从客户端角度延缓请求和平滑流量的思想和落地方法,并能够灵活应用到自身实际项目中。

注意:像阿里这种头部互联网公司,其秒杀系统处了会使用上述限流之道进行系统限流外,其处于兼顾用户体验和系统资源的考虑,一般不会采用问答题、验证码或者滑块的方式来打散客户端流量,更倾向于采用非公平的策略,使用有损逐级限流和分层过滤的方式来达到系统限流的目的,但是大家需要掌握从客户端出发延缓请求和平滑流量的思想和落地方法,最终能够灵活应用到自身实际项目中

# 三、流程设计

在早年间的秒杀系统中,为了缓解服务端的瞬时高并发流量的压力,会在客户端加入验证码和问答题。引入验证码和问答题可以直接从客户端角度延缓请求,平滑服务端的瞬时高并发流量。另外,在客户端引入验证码和问答题,也可以在一定程度上快速拦截掉部分刷单流量,起到防刷的作用。

可能有些小伙伴还是不太明白为啥在客户端引入验证码和问答题,就能够在一定程度上平滑服务端的高并发流量。其实,大家可以想象一下:在秒杀系统中引入验证码和问答题,不同的用户输入验证码和问答题的手速是不一样的,有的用户输入的快,就会先发出请求。有的用户输入的慢,就会后发出请求。也就是说,用户输入验证码和问答题的手速是有快有慢的,这就可以将瞬时的并发流量分摊到一段时间范围内,从而不需要堆积太多的机器来应对瞬时的高并发流量。

秒杀系统中引入了验证码后最简化的流程如图77-1所示。


可以看到,如果秒杀系统引入了验证码和问题答,则可以按照如下流程进行验证码获取和校验的业务处理。

# 查看完整文章

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