03.08 如何设计一个秒杀系统?

木沐_Y


说到秒杀系统,我们第一反应有可能是电商平台花样繁多的抽奖活动、12306的抢票系统等,的确这些都涉及到了秒杀概念。

秒杀系统具备哪些特点?

1、瞬时高并发,短时间内的流量洪峰,用户量的激增促使网站流量突破上限;

2、出现超卖现象,成功下单的人数比库存量还要多;

3、业务流程简单,没有过多花俏功能。

秒杀系统该如何设计?

基于上面提到的特点,秒杀系统需要做到以下几点:

1、前台静态资源走CDN加速

将JS、CSS、图片、音视频等文件放在CDN上采用预热形式将资源刷新到各CDN节点上,使得用户“就近读取”,加快访问速度,另外也减小源站服务器的压力。

2、限流

对用户请求做限制,同一时间段内同账号禁止发送大量请求。

3、任务异步化处理

比如下单、邮件通知、短信接收等,业务能作异步处理的一定要异步处理,避免同步阻塞。

4、合理的缓存

秒杀的商品数据多数都不需要实时更新(除库存等字段外),对于这类不需要实时更新的热点数据放在缓存里,避免从数据库中查询,可降低数据库的负载压力。

5、其它业务降级

任何一个平台的软硬件资源是有限的,所以我们可以将一些不重要的业务暂停服务,将资源让出来给秒杀系统使用。


下面我们来详细探讨一下接口层如何处理。

上图主要描述了后端接口在处理请求所做的操作:

1、操作缓存数据,缓存可以存放商品当前总量,如果Redis是分布式部署,可以采用分布式锁来解决脏数据问题。

2、将不需要及时响应的业务放入消息队列。

3、定时将缓存数据更新到数据库,为了避免脏数据产生可以采用悲观锁和乐观锁两种方式,个人比较推荐乐观锁方式。

4、消费消息队列消息,针对消息类别做不同的操作。


秒杀系统存在较多不确定性(如:请求数、并发数),所以秒杀系统也离不开监测系统对各项指标的监测,在发现异常时要做熔断处理,另外在资源不够时提交做好扩容准备。

以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

网络圈


我以前的老板让你用二千块,会发明才是四千啊。我在想铺地板砖的。也面试造火箭。二千块的初级地板砖工程师问你,地板砖面积有多少种规格。119平房屋没种要铺多少块地板砖,市面上有多少种水泥,多少种河沙,水泥河沙,水的比例多少,要铺多厚。不平的地面怎么找平。影响地板砖凝固时间的因素有哪些。影响空砖因素有哪些。回答不上二千块一个月。中级就问会不会刷墙,吊顶,安装水电气,门窗,空调,刮白。每种又出好多题。中级四千。高级地板砖工程师问他会不会修环球中心。发明塔吊,发明挖掘机。


分享到:


相關文章: