毕业设计
题目
设计电商秒杀系统
【业务背景】
你作为一个电商创业公司的架构师,负责设计 6.18 大促秒杀系统的设计,你们的业务模式如下:
你们挑选选品各大电商平台上畅销和好评的商品进行销售,每个品类不超过 20 个商品,目前做了 10 个品类;
本次 6.18 秒杀选择了 1000 个充电宝,10 台 iPhone12 作为秒杀商品;
正常的日活大约 100 万用户;
老板要求万无一失。
【技术背景】
技术团队以 Java 为主,已经落地了微服务架构;
主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序,为了促进用户转化为 App 用户,只有下载 App 才能参加秒杀活动;
目前只有单机房。
【毕设要求】
设计完整的架构,例如存储、负载均衡、缓存、高可用、可扩展等;
大约 10 页以内的 PPT,每页 PPT 说明一项设计,包括架构设计和设计理由,无需详细解释备选方案。
【提示】
分析考虑要全面,但并不意味着架构设计要面面俱到,如果分析后认为某些设计点可以不做,就在作业最后统一说明原因即可;
如果没有思路,请对照模块 9 的 IM 案例;
如果有的信息觉得不够全或者不够细,可以做出一定的假设,但不能天马行空,需要对照已有的业务背景和技术背景进行合理推断
需求分析
日活跃量为 100 万,假设原架构中有 F5;
单机房,不能使用 DNS 负载均衡;
秒杀业务不影响原来业务的场景下,也要保证秒杀业务的正常进行;
概要设计
将秒杀业务与正常业务隔离;
秒杀前将商品详情信息,使用 CDN 或者 APP 缓存起来;
将充电宝和 iphone 两个产品,分别部署在不同的微服务中;
根据用户的购买需求,分发到不同的微服务中;
因为是单机房,所以选择一个主从架构;
详细设计
系统架构图
秒杀前
将商品详细信息缓存在 CDN 或者 APP 缓存中;
秒杀界面中在秒杀前禁止点击
秒杀中
客户端随机生成一个数,判断是否在设定范围,如果不在范围内,提示用户秒杀失败,反则将请求发送给后端服务器;
客户端同时判断用户点击的次数,如果超过一定的次数,提示用户点击次数太多,稍后再试;
根据用户秒杀商品类型,将请求分发给不同的网关;
网关中判断用户请求次数,如果同一时间多次请求,直接返回秒杀失败,否则将请求负载均衡到不同的服务器中;
将请求存入 kafka 中,等待业务服务器消费;
业务服务器从 kafka 中取出请求消费;
返回客户端秒杀结果;
评论