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

系统设计,如何设计一个秒杀功能

需要解决的问题

  1. 瞬时流量的承接
  2. 防止超卖
  3. 预防黑产
  4. 避免对正常服务的影响
  5. 兜底方法

前端设计

  • 利用 CDN 缓存静态资源,减轻服务器的压力
  • 在前端随机限流
  • 按钮防抖,防止用户重复点击

后端设计

  • Nginx 做统一接入,进行负载均衡与限流
  • 用 sentinel 等进行业务端限流
  • 服务拆分,将秒杀功能拆分为独立的服务,避免对现有服务产生影响
  • 秒杀数据的缓存,使用分布式缓存或本地缓存方案,需要缓存预热
  • 精准地库存扣减,防止超卖
  • 风控识别黑产,需要动态黑名单
  • 设置验证码防止脚本秒杀
  • 幂等设计,防止重复下单
  • 兜底方案,如果服务压力过大或者代码有漏洞,直接关闭秒杀及时止损

业务手段

通过预约、预售等方式避免秒杀的高并发流量。

详细分析

一、瞬时流量的承接

1、 秒杀活动即将开始时,用户会不断刷新页面,前端资源的访问也会消耗大量的资源。可以把这部分压力给到 CDN 厂商。
2、 秒杀的大部分请求都是无效的,可以在前端设置随机限流,使部分请求直接返回失败。
3、 对于发出的请求再次通过 lvs、nginx、sentinel 层层限流。
4、 打到后端服务后可以利用分布式缓存(Redis)或本地缓存(Caffeine)承接读写。
请添加图片描述

二、库存扣减

库存扣减需要防止并发导致的超卖。常用的是通过乐观锁解决问题:

update items set num = num - 1 where id = 1 and num > 0;

使用这个语句会产生热点行问题,压测下性能不高。优化方式如下:

  1. 数据库补丁优化。可以使用阿里云的 RDS,结合 Inventory Hint 单行热点更新性能可达 3.1 万 TPS。原理简单来说就是会把相同行的修改请求分为一组,仅组内第一条语句需要抢锁,后续语句直接修改即可,不需要再次查询,仅需一次分组提交事务即可。
  2. 库存拆分。将 1000 个库存拆分成 100 个小库存,每个小库存内有 10 个库存。
  3. 使用 redis + lua 脚本控制库存的扣减。redis 扣减完毕后可以通过 MQ 发送一个异步消息把数据库中的库存扣掉,实现最终一致性。如果 redis 操作成功, MQ 发送失败怎么办? 为 MQ 设置死信队列、重试等机制; redis 扣减库存时记录日志,如果 MQ 故障则检查日志进行补偿。
http://www.lryc.cn/news/454455.html

相关文章:

  • Linux:进程入门(进程与程序的区别,进程的标识符,fork函数创建多进程)
  • 索尼MDR-M1:超宽频的音频盛宴,打造沉浸式音乐体验
  • 【Linux】线程的概念
  • centos7.9环境下mysql8数据库双机互备环境部署
  • git 报错git: ‘remote-https‘ is not a git command. See ‘git --help‘.
  • mysql学习教程,从入门到精通,SQL GROUP BY 子句(31)
  • pip 和 conda 的安装区别
  • 大学生就业招聘:Spring Boot系统的架构分析
  • 线段树模板
  • 【TypeScript】知识点梳理(三)
  • 题解:SP1741 TETRIS3D - Tetris 3D
  • EWSTM8 IAR for STM8 软件分享
  • 非机动车检测数据集 4类 5500张 电动三轮自行车 voc yolo
  • Chromium 中JavaScript FileReader API接口c++代码实现
  • k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载
  • 南昌网站建设让你的企业网站更具竞争力
  • 【重学 MySQL】五十三、MySQL数据类型概述和字符集设置
  • 《计算机原理与系统结构》学习系列——计算机的算数运算(上)
  • 如何在华为云服务器查看IP地址,及修改服务器登录密码!!!
  • JAVA并发编程高级——JDK 新增的原子操作类 LongAdder
  • 常见的基础系统
  • 在 window 系统下安装 Ubuntu (虚拟机)
  • 鸿蒙开发(NEXT/API 12)【访问控制应用权限管控概述】程序访问控制
  • (10)MATLAB莱斯(Rician)衰落信道仿真1
  • 什么是重卡充电桩?
  • 模拟实现消息队列(基于SpringBoot实现)
  • C语言:预编译过程的剖析
  • 算法——单调栈
  • LeetCode讲解篇之695. 岛屿的最大面积
  • 招联2025校招内推倒计时