如何设计一个秒杀系统
难度指数:4星级 考查频率:60%-70%
开发年限:5年左右 3-5
一.概念
秒杀系统:电商系统中,非常常见的一种业务模式,主要为了吸引用户、刺激留存和消费而设计的一种促销活动。
整点秒杀、单个商品秒杀等。
二.特征
1.瞬时流量非常大,过了这个秒杀时间,流量就结束了,所以,不能使用堆机器的方式来提高QPS,成本太高。
2.秒杀商品的库存一般有限的,比如说:1万个用户去抢10台IPHONE16,库存少而抢的人多,这种情况下服务器压力大。
3.秒杀时间还未来临,刷新量非常大,会导致服务器静态资源访问量剧增。10:00,9.58 9.59,服务器压力大。
三.准备工作
选商品,缓存:交互,库存数量、商品编号等等。
看一下是否可以抗的住预估的并发。
关键点:高并发、快响应; 防止超卖:防止恶意 刷;页面访问量大问题;秒杀开关的设计;订单后续业务逻辑设计异步;如果订单失败,补偿机制;服务降级。
四.解决方案*
1.高并发、快响应:C端产品,用户量很大,并发量高,提前做好压力测试。Redis热数据预加载、配置专门的MQ、前端页面静态化处理、CDN加速、宽带扩展、服务器集群的负载均衡。
2.防止超卖:精品,技术问题,库存负数。Redis,真正秒杀的时候,判断库存是否充足和扣减库存,两个操作,保证数据原子性,防止超卖。
3.防止恶意刷:一起机器人恶意抢单,机器人一直在刷,限流来解决该问题。用户ID策略、IP地址策略。不用担心由于限流而导致的用户体验问题。1人1s请求10次,一个ip10次。无效请求,无法达到服务器。
4.页面访问量过大:提前将页面静态化处理。资源静态化:url,直接找到静态资源,不和服务器做交互操作。+CDN就近分发策略,提高资源的响应速度和命中率。
5.秒杀入口:前端页面已经上线,为了限制一些无效的请求达到后端,按钮提前禁用,倒计时的时候,再开放,降低流量压力。
6.订单后续逻辑为异步:秒杀成功的订单放到MQ,后续的服务可以慢反馈给客户。
7.订单失败补偿机制:消费失败,抛出异常,重试,报警机制,实时监控预警。
8.服务降级:由于技术性或人为的问题,导致秒杀价格设置有问题。服务调用出现大问题的,异常 bug。出现到一个提示信息页面。
五.点评
三高:高并发、高性能、高可用。
标签:库存,静态,系统,并发,秒杀,服务器,设计,页面 From: https://blog.51cto.com/teayear/9156938