毕业设计项目
设计电商秒杀系统
业务背景
你作为一个电商创业公司的架构师,负责设计 6.18 大促秒杀系统的设计,你们的业务模式如下:
你们挑选各大电商平台上畅销和好评的商品进行销售,每个品类不超过 20 个商品,目前做了 10 个品类;
本次 6.18 秒杀选择了 1000 个充电宝,10 台 iPhone12 作为秒杀商品;
正常的日活大约 100 万用户;
老板要求万无一失。
技术背景
技术团队以 Java 为主,已经落地了微服务架构;
主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序,为了促进用户转化为 App 用户,只有下载 App 才能参加秒杀活动;
目前只有单机房。
业务基本场景
在 App 和微信小程序宣传 618 秒杀活动,通过仅限 App 参与秒杀的方式,引导客户下载并登录 App。
商城首页增加秒杀活动入口页面,列出秒杀活动商品,可以提前加入购物车。
618 当天秒杀活动开始,点击按钮秒杀,下单并完成支付。
秒杀商品库存清零后,秒杀按钮置灰,告知其他用户秒杀商品已抢完。
用户行为建模与性能估算
假设电商平台 500 万注册用户,每条用户数据存储 1KB,则总共 5GB 用户数据。
目前商城只有 200 个商品,每个商品信息需要存储 10MB,共 2GB。
电商日活 100 万,每个用户每天登录、浏览商品、添加购物车记录 1K,登录及商品浏览记录主机保留一年,共 365G。
通过前期活动宣传,618 当日有 300 万的用户登录 App,并有 50%的用户参与秒杀活动,秒杀用户有 150 万。
假设参与秒杀的用户在活动前 1 小时内登录 APP 参与秒杀,假设每个用户浏览 10 个商品,每个用户平均往后台请求 20 次,则,峰值 QPS 按 3 万进行估计。
假设秒杀活动在 30 秒内结束,通过本地 APP 限流方式,过滤掉 90%的请求,则,峰值 TPS 按 2 万进行估计。
存储架构设计
电商平台数据存储容量不大,但用户点击查询商品信息的 QPS 较大,秒杀商品的 TPS 较大。用户注册信息、登录浏览记录、以及商品信息、订单信息采用 MySQL 主备架构存储。商品的页面展示、秒杀商品的库存需要用 Redis Cluster 进行缓存。
计算架构之负载均衡
TPS 和 QPS 的总峰值大概 5 万,采用两台 Nginx 进行负载均衡。
计算架构之缓存架构
秒杀页面的静态资源可以保存在 App 或者 Web 容器缓存内。库存及商品信息缓存在 Redis 集群中。
高可扩展架构设计
电商平台已经落地微服务架构,可以将秒杀拆分为独立的微服务。
高可用架构设计
目前只有单机房,可以先做同城双中心,先做灾备,再演进到双活。
评论