写点什么

设计电商秒杀系统

作者:Pengfei
  • 2022 年 8 月 28 日
    北京
  • 本文字数:850 字

    阅读完需:约 3 分钟

1、背景

技术

1.技术团队以 Java 为主

2.已经落地了微服务架构;

3.主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序

4.只有下载 App 才能参加秒杀活动;

5.目前只有单机房。

 

业务

1.在售商品数量 <= 10 个品类 * 20 个商品

2.秒杀 2 个商品,数量 = 1000 个充电宝 + 10 台 iPhone12

3.正常的日活大约 100 万用户

4.老板要求万无一失


2、业务分析

1.秒杀 2 个商品,数量 = 1000 个充电宝 + 10 台 iPhone12:产生订单数:1010 个

2.日活用户 100 万:秒杀流量为正常流量的 1.5-2 倍

3.老板要求万无一失:需要做好核心流程的梳理,确保核心流程的可用性


3、设计思路

1.做好隔离:包括秒杀服务的隔离、中间件的隔离。单独部署服务集群,防止某一服务宕机时拖垮其他服务。

2.多层限流:保证到达 DB 层的是可控的流量。

3.尽量使用缓存:商品提前预热到缓存中,包括库存的数据。

4.高可用设计:包括限流、排队、降级、熔断等。


4、存储架构设计




秒杀商品数量 1010 个,数量不大,数据库和 Redis 缓存使用主备复制即可


5、计算架构设计

5.1  负载均衡设计


因为系统日活 100W,秒杀时候假设是平时的 1.5 倍-2 倍。LVS 可以抗住几十万的并发,通过前端加合法性验证(比如验证码,防刷机器人), LVS 就可以抵挡全部合法流量。

 

5.2  缓存设计

6、高可用架构设计

6.1  限流设计


1.  用户请求的各个环节都可以限流:

2.  请求端的限流:发起请求的时候限流,被限流的请求实际上没有到后端服务器

3.  接入端的限流:接到业务请求的时候进行限流,避免请求进到实际的业务处理流程

4.  单个服务自我保护,如果请求太多,可以舍弃新的请求。


6.2  排队设计

各个角色说明:

1.   排队模块。使用 Kafka 消息队列,将请求以先进先出的方式保存下来,队列大小可以比秒杀商品多一些。

2.   调度模块。根据秒杀服务处理能力检测,有能力处理,将队列的消息下方到秒杀服务中去。

3.   业务服务。处理模块,如下单、完成交易。


6.3  降级设计

降级服务主要为了优先保证核心业务正常,比如这边保证秒杀的下单交易服务正常。业务服务视情况降级。


6.4  熔断设计

为了防止故障链式效应,起到服务的自我保护

用户头像

Pengfei

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
设计电商秒杀系统_Pengfei_InfoQ写作社区