当前位置: 首页 > news >正文

常见系统设计

秒杀系统

  • 前端层:
    静态资源缓存:通过CDN缓存商品图片、页面静态HTML,减少回源请求。
    请求合并:合并用户频繁刷新的请求(如10秒内仅允许一次真实请求)。
    端侧限流:通过JS或APP端限制用户高频点击(如倒计时按钮禁用、点击后置灰)。
  • 接入层:
    负载均衡:使用LVS/Nginx实现流量分发,结合IP Hash或一致性哈希减少后端压力。
    请求队列:引入Kafka/RocketMQ缓冲瞬时流量(削峰填谷),按后端处理能力消费。
    边缘计算:在CDN边缘节点拦截非法请求(如未登录用户、IP黑名单)。
  • 服务层:
    服务拆分:将核心功能(库存扣减、订单创建)与非核心功能(日志、通知)解耦。
    读写分离:读服务(查询库存)与写服务(扣库存)独立部署,避免相互影响。
    热点隔离:为秒杀商品分配独立资源池(专用集群、线程池、数据库连接池)。
  • 存储层:
    缓存抗压:库存预加载至Redis集群(使用Lua脚本实现原子化扣减)。
    分库分表:订单库按用户ID分片,库存库按商品ID分片,降低单点压力。
    最终一致:通过MQ异步同步缓存与数据库,允许短暂不一致但最终收敛。

问题处理

  • 超卖
    • 预扣库存:采用预扣除而非实时扣减(例如Redis原子化操作lua)
local stock = tonumber(redis.call('GET', KEYS[1]))
if stock > 0 thenredis.call('DECR', KEYS[1])return 1  -- 扣减成功
elsereturn 0  -- 库存不足
end
//库存要>0
UPDATE stock SET quantity = quantity - 1 
WHERE item_id = #{itemId} AND quantity >= 1;
  • 热点数据竞争
    缓存预热:在秒杀开始前将库存数据加载到Redis并禁止直接访问DB。
    Key分片:将热点商品的库存拆分为多个Key(如item_stock_1, item_stock_2),分散访问压力。
    本地缓存+延迟双删:在服务节点本地缓存库存数据,结合延迟删除策略减少Redis访问。

  • 异步订单处理
    扣库存成功 → 发送消息到MQ → 订单服务消费并生成预订单。
    支付服务异步回调确认,更新订单状态并扣减数据库库存。

相关文章:

  • C51 KEIL使用使用问题处理
  • 传输层协议 TCP 介绍 -- TCP协议格式,确认应答机制,超时重传机制,连接管理机制,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答
  • 算法题(167):FBI树
  • 系统设计基本功:流量与存储需求估算
  • 力扣HOT100之堆:295. 数据流的中位数
  • Django项目QQ授权登录报错:redirect uri is illegal(100010) 解决方法
  • Android WebView 深色模式适配方案总结
  • P2842 纸币问题 1
  • java复习 08
  • 企业如何科学的选择WMS仓储管理系统
  • 【Python打卡Day33】简单神经网络@浙大疏锦行
  • 多模态大语言模型arxiv论文略读(116)
  • 知识图谱和图数据库Neo4j
  • ETLCloud中数据生成规则使用技巧
  • DDoS攻防实战:从应急脚本到AI云防护系统
  • 系统入侵排查实战指南:从Windows到Linux的应急响应与溯源分析​
  • 6.10【Q】网络安全期末复习
  • Mac电脑 SSH客户端 - Termius
  • 【电路物联网】SDN架构与工作原理介绍
  • leetcode 135. 分发糖果
  • 博罗网站设计/关键词在线挖掘网站
  • wordpress网站图片加载速度慢/头条今日头条新闻
  • 单位制作网站备案/关键词查询神器
  • 网站建设的技术/搜索推广
  • 玉树州公司网站建设/成都网站快速优化排名
  • 哪些网站是做包装的/代写文章哪里找写手