如何从零搭建一个支持 10 万级 QPS 的大流量、高并发优惠券系统?(持续更新中)

一键三连,让算法推荐更多类似干货 ~  
你最近面试被问到的最难的题是什么?              评论区交流,我来解答
突然发现自己欠了一屁股 技术债 ?                   别薅头发了  ——   关注本专栏,带你清债~

零、设计一个xx系统的思路:

(1)业务拆解明确核心功能(如券模板管理、库存控制);
(2)技术选型根据业务场景选择存储(MySQL/Redis)、中间件(MQ/RPC 框架)等;
(3)高并发处理:通过缓存(多级缓存)、异步(MQ 削峰)、存储优化(读写分离、分库分表)扛住流量;
(4)高可用保障:限流(控制流量峰值)、熔断降级(隔离故障)、监控(实时感知问题)、集群部署(避免单点)。

第(2)步技术选项贯穿始终。需结合业务目标、性能需求和可用性要求综合决策。

一、口诀:

券分模板与记录,MySQL 存 Redis 顶;
库存拆分抗热点,本地缓存二级顶;
MQ 异步来削峰,限流监控保稳定。

二、目标:

高性能高一致性、高可用。

发券快、不超发、系统不崩溃。

三、方案:

1. 需求拆解技术选型

(1)需求拆解

(1)创建优惠券模板(比如满 100 减 50,设置有效期和总库存)

(2)给用户发券(扣减库存,记录谁领了)

(3)处理过期券(没被用的券自动失效,释放库存)

(2)技术选型

存储:MySQL(持久化券模板和券记录);

缓存:Redis(缓存券模板和库存,提升读写性能);

消息队列:RocketMQ(处理券过期逻辑,支持延迟消息);

系统框架:RPC 框架 Dubbo(服务间通信)。

2. 核心架构流程设计

(1)系统架构:包含创建券模板、发券、核销券、查券等核心模块,辅以监控报警、风控、对账等辅助模块。

(2)核心流程

发券流程:参数校验(业务合法性)→ 幂等校验(避免重复发券,基于用户 ID + 订单号)→ 库存扣减(优先扣减 Redis 缓存库存,异步同步至 MySQL);

券过期处理:通过 RocketMQ 延迟消息循环处理,直至券过期(解决延迟时间超限问题)。

3. 高并发场景解决方案

存储瓶颈优化

MySQL:读写分离(查询走读库)、分库分表(按 user_id 后四位分片,支持用户维度查询);

Redis:水平扩容(分片存储,提升读写能力)。

热点库存问题将热点券模板的库存拆分为多个子库存,随机轮询子库存扣减,分散 Redis 单分片压力。

查询券模板优化引入本地缓存作为二级缓存(优先查本地缓存→Redis→DB),定时任务同步最新模板信息,减少 Redis 依赖。

4. 服务治理

超时设置:RPC 接口超时设为 500ms,避免上游故障拖垮系统;

监控报警:通过 Grafana 实时监控接口性能、系统资源,异常时及时报警;

限流:对上游服务设置限流规则,避免流量过载;

资源隔离:部署在独立 Docker 集群,避免与其他服务争夺资源。

四、STAR 法则回答

情境(S)

电商平台春节红包雨活动需发放 1000 万张优惠券,预计峰值 QPS 达 12 万,需保证发放准确、系统稳定。

任务(T)

设计支持 10 万级 QPS 的高并发优惠券系统,满足高可用(99.99% 可用)、不超发、低延迟(响应 < 500ms)。

行动(A)

  1. 技术选型:用 MySQL 存储券数据,Redis 缓存库存,RocketMQ 处理过期券,kitex 作为 RPC 框架;
  2. 核心设计:发券时先校验参数和幂等性,Redis 扣减库存后异步落库;热点券库存拆分为 20 个子库存,随机扣减;
  3. 高可用保障:MySQL 读写分离 + 分库分表,Redis 水平扩容;本地缓存减少 Redis 依赖,设置接口超时和限流。

结果(R)

活动期间系统稳定支撑 13 万 QPS,发券成功率 99.9%,无超发;库存一致性 100%,响应时间 < 300ms,圆满完成活动。

五、生活例子

类比 “电影院售票系统”:

  • 券模板类似 “电影票模板”(包含票价、有效期等);
  • 库存拆分如同 “多个售票窗口”,每个窗口卖一部分票,避免单窗口拥挤;
  • 本地缓存好比 “窗口售票员的备忘录”,提前记好热门电影的余票,不用每次查总系统;
  • 消息队列类似 “退票处理中心”,过期未使用的票自动退回库存,重新售卖。

(一键三连,让算法推荐更多类似干货 ~           持续更新中,点关注,看下篇文章)
你最近面试被问到的最难的题是什么?              评论区交流,我来解答。
突然发现自己欠了一屁股 技术债 ?                   别薅头发了  ——   关注本专栏,带你清债~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值