0

小滴课堂-Redis高并发高可用集群百万级秒杀实战

搜课999it点top
21天前 15

获课:shanxueit.com/12891/

百万级秒杀项目实战:Redis 集群如何做到高并发高可用

秒杀系统的核心矛盾在于:瞬时涌入的百万级请求与后端有限处理能力之间的巨大落差。如果让这些请求直接打到数据库,系统会在毫秒级内被压垮。Redis 凭借内存级读写速度和单线程原子操作特性,成为秒杀场景的核心防线。但要真正扛住百万级并发,仅靠单个 Redis 实例远远不够,必须从集群架构、库存扣减、流量削峰、高可用保障等多个维度进行系统性设计。

整体架构:分层拦截,层层削峰

一个能扛住百万并发的秒杀系统,绝不是把所有压力都压在 Redis 上,而是通过分层架构将无效流量逐层过滤。第一层是前端与 CDN 层,静态资源全部走 CDN 分发,用户点击抢购按钮后立即置灰防重复提交。第二层是网关层,通过令牌桶或漏桶算法对每个用户和 IP 进行频率限制,超出阈值的请求直接返回"系统繁忙",将绝大部分无效流量挡在应用服务之外。第三层才是 Redis 缓存层,只有经过前两层过滤的合法请求才会进入库存预扣减环节。最后一层是消息队列与数据库层,负责异步创建订单和最终的数据持久化。

Redis Cluster 集群架构:分片与高可用

单机 Redis 的 QPS 上限大约在 10 万左右,面对百万级并发必须采用集群方案。Redis Cluster 是官方提供的分片集群方案,通过 16384 个哈希槽将数据自动分散到多个主节点上,每个分片配备一个或多个从节点。当某个主节点宕机时,从节点会自动晋升为主节点,整个过程对业务透明。根据压测数据,3 主 3 从的 Redis Cluster 架构可稳定承载每秒 12.6 万请求,通过扩展分片数量可以线性提升集群的吞吐能力。
在秒杀场景中,库存 Key 的分布策略至关重要。如果所有秒杀商品的库存都集中在同一个分片上,该分片会成为性能瓶颈。合理的做法是根据商品 ID 进行哈希分片,将不同商品的库存压力均匀分散到各个节点上。对于极热的单品,还可以采用本地缓存(如 Caffeine)在应用层前置拦截,设置极短的过期时间(如 3~5 秒),将热点请求在应用层就消化掉,避免全部打到 Redis。

库存预扣减:Lua 脚本保证原子性

秒杀场景中最致命的问题是超卖——库存只有 100 件,却卖出了 150 件。传统的"先查库存再扣减"两步操作在并发环境下必然出问题,因为查询和扣减之间存在时间窗口,多个线程可能同时读到库存充足并各自扣减。
解决方案是使用 Lua 脚本将"防重校验 + 库存检查 + 库存扣减 + 记录已购用户"这四个步骤封装为一个原子操作。Redis 执行 Lua 脚本时,整个脚本作为一个不可分割的单元执行,中间不会被其他命令打断。脚本首先检查用户是否已经抢购成功(通过 Set 结构存储已购用户 ID),如果已购买则直接返回失败;然后检查库存是否大于 0,不足则返回售罄;库存充足则执行递减操作并将用户 ID 加入已购集合。应用服务只需根据脚本的返回值快速响应用户,单个 Redis 实例就能轻松处理十万级别的 QPS。

异步削峰:消息队列解耦下单流程

Redis 预扣减成功后,并不立即操作数据库创建订单,而是将抢购成功的消息发送到消息队列中,然后立刻返回给用户"抢购成功,正在处理中"。这一设计实现了两个关键目标:一是削峰填谷,秒杀瞬间的流量洪峰被消息队列暂时存储,后端订单服务按照自身处理能力平稳消费;二是业务解耦,秒杀服务只负责"卖",订单服务负责"创建订单",库存服务负责"扣减数据库库存",各模块互不影响。
在 Redis 生态中,Redis Stream 是消息队列的最佳选择。它支持消费者组机制和 ACK 确认机制,能保证每条下单消息都被至少一个消费者成功处理。即使消费者在处理过程中宕机,消息也会被重新投递,保证了数据的可靠性。

高可用保障:多级容灾与兜底策略

高可用不仅意味着集群不宕机,还需要应对各种极端场景。针对缓存雪崩(大量 Key 同时过期),通过给过期时间增加随机偏移量来避免集中失效;针对缓存击穿(热点 Key 过期瞬间大量请求穿透),使用分布式锁保证只有一个线程去重建缓存;针对 Redis 集群整体不可用的极端情况,在应用层配置熔断降级策略,当 Redis 访问失败率超过阈值时直接返回降级页面,保护下游数据库不被打垮。
持久化策略方面,采用 AOF 与 RDB 混合持久化模式,AOF 刷盘策略设为每秒一次(everysec),在性能和数据安全之间取得平衡。同时,数据库层通过唯一索引(user_id + sku_id)做最终的幂等校验,确保即使消息重复消费也不会产生重复订单。

总结

百万级秒杀系统的本质是一场流量的精细化管理。Redis Cluster 提供了高性能的分布式缓存能力和水平扩展能力,Lua 脚本保证了库存扣减的原子性,消息队列实现了异步削峰与业务解耦,多级容灾策略确保了极端场景下的系统韧性。这套架构的核心思想可以概括为十六个字:层层削峰、原子扣减、异步解耦、最终一致。掌握这套设计思路,不仅能应对秒杀场景,也为所有高并发系统的设计提供了可复用的方法论。



本站不存储任何实质资源,该帖为网盘用户发布的网盘链接介绍帖,本文内所有链接指向的云盘网盘资源,其版权归版权方所有!其实际管理权为帖子发布者所有,本站无法操作相关资源。如您认为本站任何介绍帖侵犯了您的合法版权,请发送邮件 [email protected] 进行投诉,我们将在确认本文链接指向的资源存在侵权后,立即删除相关介绍帖子!
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!