应该这么设计亿级用户秒杀系统!
页面静态化:
请求拦截:
后端服务设计:
库存可以放到Reids缓存中,来提高扣减库存吞吐能力。对于热点商品的库存可以利用Redis分片存储。
隔离:
网络:
秒杀前要和网络运营商、CDN服务商提前申请带宽。
还有哪些细节要考虑:
如何避免超卖?如果在redis中扣减库存,可以利用decr命令扣减库存,decr是原子操作,在分布式环境下也不会有并发问题,decr扣减库存后,判断返回值,如果返回值小于0,扣减库存失败,秒杀也就失败了;如果在数据库中扣减库存可以在where后面加上库存大于0的条件,来避免库存被减成负值。这样就可以避免超卖情况发生了。
接口防刷,前面已经提到过,在网关层对下单等接口按userID限流。
网关层除了对userID做限流外,还要做整体限流。在实际访问量超过预估访问量时,整体限流可以起到保护作用,避免系统被压垮。
防止重复下单,按userID限流已经起到了防止重复下单的作用。假如限制同一个用户10分钟能下一次单,一般情况下10分钟内,商品早已经被抢光了,用户也就没有再次下单的机会了。
可以结合风控系统,在网关层把羊毛党等有问题的用户请求直接拒掉。
可以在网关层上面再加一层防火墙或者高防服务,来防御DDos等分布式网络攻击。
·end·
技术人成长之路的指路人
点赞支持技术创业👇