第九周作业
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者设计思路有哪些?
挑战:
系统视角可以拆分为两部分,一是秒杀商品的展示;二是活动结束的计算;三是业务系统的处理,例如付款等
展示部分的压力主要来自超大规模的访问请求,在秒杀阶段会有非常大量的请求,这样带来的除了系统的qps压力,还会有带宽的压力;业务系统的处理,主要是秒杀后的具体业务处理。
设计思路:针对不同阶段,分解具体操作流程,拆分、缓解压力
针对第一部分,可以对商品展示的页面做尽量简化、静态化处理,避免秒杀展示页面访问后台系统,尤其是数据库,具体处理可以使用静态资源服务器、cdn加速等方案;
对于开始秒杀的时间控制,可以通过纯静态的前端js脚本,通过定时推送服务器,将脚本推送到前端,再刷新页面的方式开始活动;
第二部分,活动结束,往往需要计算究竟有多少客户进行了抢购的操作。针对不同的产品、不同的客户基数需要有不同的方案。例如1元抢宝马,这种活动可以明显的感觉到是非常吸引人的,因此就可以通过计时的方式来终止活动,例如8点开始,那么基本2秒内就会被抢完,所以超过8:00:02的请求,都可以直接转到活动结束的静态页,降低服务器负载,再通过缓存、消息队列的方式记录2秒内发起过请求的客户,按照活动规则(如先到先得)确定最后中奖名单;如果是普通的活动或者是不太知名的网站,就要进行计算量,确定是否结束,同样可以使用redis并发锁或者消息队列处理的方式进行计算。
第三部分,业务系统的处理,可以在前两步,对请求进行隔断,只对通过前两步的请求进行处理,正常进入业务系统的请求量都不会很大,一版都不会超过业务系统的负载;如果还是超过,则可以使用消息队列进行分批处理;从业务功能上,也可以使用抢购已经成功,商品已锁定,只要一天内付款都可以的方式进行分流
评论