其他分享
首页 > 其他分享> > 由微视春节集卡瓜分活动,看高可用秒杀系统的架构设计

由微视春节集卡瓜分活动,看高可用秒杀系统的架构设计

作者:互联网

微视春节项目中的集卡瓜分活动,是一个典型流量洪峰下的秒杀场景,本文作者参与其中,对高可用秒杀系统的架构设计做了一些思考和总结。(流量洪峰所带来的一系列挑战,足以激发每位程序员的斗志。云加社区将推出「高可用架构之流量洪峰」系列内容,欢迎关注)。

一、背景简介

如今的互联网已经在海量服务领域有了很成熟的理论,有很多在流量洪峰下的实践。而微视春节项目中的集卡瓜分活动,主要环节包括发卡、集卡、瓜分等流程,涉及到高并发、降级预案等,是一个典型流量洪峰下的秒杀场景。我有幸参与其中,从0到1完整践行了海量服务。本文是对高可用秒杀系统的架构设计的一些思考,希望对读者有所帮助。

                        

二、秒杀系统剖析

1. 秒杀系统面临的难点

(1)如何保证友好的用户体验?

用户不能接受破窗的体验,例如:系统超时、系统错误的提示,或者直接404页面。

(2)如何应对瞬时高并发流量的挑战?

木桶短板理论,整个系统的瓶颈往往都在DB,如何设计出高并发、高可用系统?

2. 如何设计秒杀系统?

(1)典型的互联网业务结构

下图展示了一个典型的互联网业务结构抽象图,用户完成一个写操作,一般会通过接入层和逻辑层,这里的服务都是无状态,可以通过平行拓展去解决高并发的问题;到了DB层,必须要落到介质中,可以是磁盘/ssd/内存,如果出现key的冲突,会有一些并发控制技术,例如cas/加锁/串行排队等。

(2)直筒型架构设计

直筒型架构设计,指的是用户请求1:1的洞穿到DB层,如下图所示。在比较简单的业务中,才会采用这个模型。随着业务规模复杂度上来,一定会有DB和逻辑层分离、逻辑层和接入层分离。

(3)漏斗型架构设计

漏斗型架构设计,指的是,用户的请求,从客户端到DB层,层层递减,递减的程度视业务而定。例如当10万人去抢1个物品时,DB层的请求在个位数量级,对于秒杀系统来讲,漏斗型架构设计就是比较理想的模型,如下图所示。

漏斗型的架构设计,是高并发的基础,能够做到:

3. 如何实现漏斗型系统?

漏斗型系统需要从产品策略/客户端/接入层/逻辑层/DB层全方位立体的设计。

(1)产品策略

(2)客户端

(3)接入层

(4)逻辑层

(5)存储层

对于业务模型而言,对于DB的要求需要保证几个原则:

 

三、微视春节集卡瓜分活动实践

1. 用户体验流程

微视集卡瓜分项目属于微视春节项目之一。用户的体验流程如下:

2. 架构设计图

微视集卡瓜分项目的架构设计如下图所示。

3. 瓜分降级预案

为了做好瓜分时刻的高并发,对整个系统需要保证两个重要的事情:

针对瓜分全链路调用分析时,需要特别说明的几点:

我们的降级预案大概如下:

(1)一级预案(瓜分时刻前后5分钟自动进入)

(2)二级预案,后端随机丢请求,接入层频控失效或者下游服务过载,手动开启。

(3)三级预案,前端随机丢请求,后端服务过载或者宕机进入,手动开启。

综上,整个瓜分时刻体验如下所示:

最后,对应漏斗模型,总结下这次活动的实践。

                        

四、关于架构师成长的几点思考

作者所在的团队正在招聘后台开发同学,感兴趣的同学请在公众号后台回复“投简历”参与应聘~

标签:架构设计,用户,微视,重试,集卡,瓜分,秒杀,看高
来源: https://www.cnblogs.com/qcloud1001/p/12881478.html