这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
本堂课重点内容
高并发下秒杀系统的相关问题(2)
1.mq异步处理
2.如何限流
详细知识点介绍
mq异步处理
秒杀场景下三大核心流程:秒杀、下单和支付。
秒杀才是并发量大的原因,所以将这个下单和支付流程从秒杀主流程中拆分出来,将下单功能做成mq异步处理的。而支付功能是业务场景保证的异步。
如何限流
在各种客户当中,难免会有懂“技术”的,这些客户编写后者购买一些软件在自己的服务器上,模拟正常用户登录系统,跳过秒杀页面,直接调用秒杀接口,而非自己手动点击秒杀按钮,机器的速度肯定比人手速度快,这是不公平的。为了避免这个问题,我们可以通过限流来识别非法请求并阻止其继续。
对同一用户限流
为了防止某个用户,请求接口次数过于频繁,可以只针对该用户做限制。
限制同一个用户id,比如每分钟只能请求5次接口。
对同一ip限流
只对某个用户限流是不够的,高手可以模拟多个用户请求,这种nginx就没法识别了。这时需要加同一ip限流功能。
限制同一个ip,比如每分钟只能请求5次接口。但这种限流方式可能会有误杀的情况,比如同一个公司或网吧的出口ip是相同的,如果里面有多个正常用户同时发起请求,有些用户可能会被限制住。
对接口限流
限制了用户和ip还不够,高手甚至可以使用代理,每次都请求都换一个ip。这时可以限制请求的接口总次数。 在高并发场景下,这种限制对于系统的稳定性是非常有必要的。但可能由于有些非法请求次数太多,达到了该接口的请求上限,而影响其他的正常用户访问该接口。看起来有点得不偿失。
加验证码
除了上面三种方式,加验证码的方式可能更精准一些,同样能限制用户的访问频次,但好处是不会存在误杀的情况。
课后个人总结
高并发秒杀系统的设计还要涉及消息队列异步进行处理,对某些非正常用户的请求进行限流保证公平性。