秒杀系统设计

news2025/2/26 22:20:00

1.秒杀系统的特点

瞬时高并发

2.预防措施

2.1.流量限制

  1. 对于一个相同的用户,限制请求的频次
  2. 对于一个相同的IP,限制请求的频次
  3. 验证码,减缓用户请求的次数
  4. 活动开启之前,按钮先置灰,防止无效的请求流入系统,给系统造成冲击

2.2.页面静态化(活动开始前)

分析:

  • 活动页面是用户流量的第一入口,所以是并发量最大的地方。
  • 如果这些流量都能直接访问服务端,恐怕服务端会因为承受不住这么大的压力,而直接挂掉。

 

活动页面绝大多数内容是固定的,比如:商品名称、商品描述、图片等。为了减少不必要的服务端请求,通常情况下,会对活动页面做静态化处理。用户浏览商品等常规操作,并不会请求到服务端。只有到了秒杀时间点,并且用户主动点了秒杀按钮才允许访问服务端。

2.3.CDN(内容分发网络)

用户分布在全国各地,有些人在北京,有些人在成都,有些人在深圳,地域相差很远,网速各不相同。

如何才能让用户最快访问到活动页面呢?答:使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

3.扣减库存方案选型

下单、支付、减库存

3.1.下单减库存

  • 即当买家下单后,在商品的总库存中减去买家购买数量。

下单减库存是最简单的减库存方式,也是控制最精确的一种,下单时直接通过数据库的事务机制控制商品库存,这样一定不会出现超卖的情况。但是你要知道,有些人下完单可能并不会付款

弊端:如果有竞争对手通过恶意下单的方式将该卖家的商品全部下单,让这款商品的库存减为零,那么这款商品就不能正常售卖了。要知道,这些恶意下单的人是不会真正付款的,这正是“下单减库存”方式的不足之处。

3.2.付款减库存

  • 即买家下单后,并不立即减库存,而是等到有用户付款后才真正减库存,否则库存一直保留给其他买家。

“付款减库存”又会导致另外一个问题:库存超卖。

弊端:假如有 100 件商品,就可能出现 300 人下单成功的情况,因为下单时不会减库存,所以也就可能出现下单成功数远远超过真正库存数的情况,这尤其会发生在做活动的热门商品上。这样一来,就会导致很多买家下单成功但是付不了款,买家的购物体验自然比较差

3.3.预扣库存

  • 买家下单后,库存为其保留一定的时间(如 10 分钟),超过这个时间,库存将会自动释放,释放后其他买家就可以继续购买。

Q:这种方案确实可以在一定程度上缓解上面的问题。但是否就彻底解决了呢?

A:其实没有!针对恶意下单这种情况,虽然把有效的付款时间设置为 10 分钟,但是恶意买家完全可以在 10 分钟后再次下单,或者采用一次下单很多件的方式把库存减完。针对这种情况,解决办法还是要结合安全和反作弊的措施来制止。

4.方案详解

MYSQL

  • 单个 MySQL 的每秒写入在 4000 QPS 左右,超过这个数字,MySQL 的 I/O 时延会剧量增长。
  • MySQL 单表记录到达了千万级别,查询效率会大大降低,如果过亿的话,数据查询会成为一个问题。

Redis

  • Redis 单分片的写入瓶颈在 2w 左右,读瓶颈在 10w 左右

4.1.预扣库存

4.1.1.分布式事务(扣库存+支付)

        如何保证分布式事务:扣库存、支付:rocketmq事务消息

4.1.2.热key(库存key)

库存这个key的访问是非常大的,是一个热key,由于Redis单机性能10w,因此,可能会被拖垮

方案1: Redis分片

将库存key,分成多个key,打散存在不同的分片上,比如xxx_stock_key1、xxx_stock_key2、...

扣减库存的过程:

  1. 先生成对应分片总数的随机不重复数组,如第一次是[1,2,3],第二次可能是[3,1,2]
  2. 每次扣减子库存的请求,就会分布到不同的 Redis 分片上,缓轻 Redis 单分片压力的同时,也能支持更高 QPS 的扣减请求

        这种思路的一个问题是,当库存接近耗尽的情况下,很多分片子库存的轮询将变得毫无意义===> 因此可以在每次请求的时候,将子库存的剩余量记录下来,当某一个券模板的子库存耗尽后,随机不重复的轮询操作直接跳过这个子库存分片,这样能够优化系统在库存即将耗尽情况下的响应速度。

方案2:本地缓存

本地缓存,保存Redis中的库存数据。当秒杀时,先查询本地缓存,如果数据秒杀没了,就不会再请求到Redis了

分析:这里存在一个问题,引入了本地缓存,那么本地缓存和Redis缓存存在数据一致性问题,怎么解决呢?

答:定时器,查询完成单量的库存,更新到Redis和本地缓存中(矫正)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业数智化转型在即,看看低代码软件公司如何做!

在信息爆炸的现代社会中,利用先进技术为企业提升办公协作效率,是一件事半功倍的事。当前,数字化转型升级已经是发展趋势,不少企业已经在朝着数智化转型方向迈进。作为一家低代码软件公司,流辰信息看到了市场发展前景&a…

想玩好ChatGPT?不妨看看这篇文章

相信点进来的铁汁,此时已经对 ChatGPT 有所了解,并想上手体验一番 首先大伙儿要注意,不要被骗了。 现在很多商家提供的 ChatGPT 服务,不仅价格奇高,而且据我所知,有些压根不是 ChatGPT 。 想玩最好去官网注册,具体方法大伙自个儿查一查嗷。 怎么用好 ChatGPT 虽然 …

vue uniapp 微信小程序 搜索下拉框 模糊搜索

vue uniapp 微信小程序 搜索下拉框 模糊搜索 话不多说 直接贴代码 template <template><view class"index"><view class"index_top"><view class"list_text"><view class"list_top_title"><text cl…

真我air笔记本电脑怎么重装Win10系统?

真我air笔记本电脑怎么重装Win10系统&#xff1f;最近真我air笔记本电脑挺多用户购买的&#xff0c;因为这款电脑性价比比较高&#xff0c;适合学生和一些办公人员来使用。但是系统预制了Win11系统&#xff0c;有用户想要将系统重装到Win10来使用。那么如何去进行系统的重装呢&…

【深度学习编译器系列】2. 深度学习编译器的通用设计架构

在【深度学习编译器系列】1. 为什么需要深度学习编译器&#xff1f;中我们了解到了为什么需要深度学习编译器&#xff0c;和什么是深度学习编译器&#xff0c;接下来我们把深度学习编译器这个小黑盒打开&#xff0c;看看里面有什么东西。 1. 深度学习编译器的通用设计架构 与…

易语言中控开发

效果展示 demo下载 点击下载 需要实现功能 服务端和客户端的连接客户端向服务端发送数据服务端向客户端发送数据中控一对多控件设置 1.服务端和客户端的连接 1.新建服务端.e 2.新建客户端.e 3.服务端启动窗口增加组件:服务器 4.客户端启动窗口增加组件:客户端 5.设置服务器…

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()] 效果图如下所示&#xff1a; 就是这个样子&#xff0c;一般比较少见将柱形图从上往下绘制的。可能是会为了更好的展示数据对比结果吧。这里绘图的主要思路如下&#xff1a; 利用ax.twinx()这个函数生成一个新的x轴…

横板格斗类游戏实战:游戏数值策划表

游戏数值表在游戏设计中非常的关键&#xff0c;策划可以通过表格工具与表格公式来做好游戏的数值&#xff0c;程序当表格是一个配置文件&#xff0c;直接读入数据即可。游戏数值策划表是数值策划与程序沟通对接的主要的方式, 所以对项目开发来说非常重要。 对啦&#xff01;这…

工业树莓派和PLC怎么选?

一、 什么是虹科工业树莓派 1、树莓派 在了解虹科工业树莓派之前&#xff0c;首先要了解一下什么是树莓派。树莓派是一款基于ARM的小型电脑&#xff0c;在树莓派上提供丰富的接口&#xff0c;能够实现较多功能。它同样是开发人员的最爱&#xff0c;其搭载Linux系统&#xff0…

2023年,智能家居实体门店如何选品?

作者 | 启明 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn2023年&#xff0c;是智能家居实体门店的机会与破局之年&#xff0c;作为智能家居实体门店老板&#xff0c;我们应该具备什么样的增长思维呢&#xff1f;上篇文章智哪儿谈了智能家居增长思维之流量思维 &#xff0c;这篇文章我…

实时渲染新技术能给业主带来哪些价值?点量云

目前在数字孪生三维可视化项目领域&#xff0c;本地部署和Webgl方案是使用比较多的。本地部署方案&#xff0c;根据项目的需要配备几台高性能电脑&#xff0c;在电脑上安装相应的三维可视化模型即可&#xff0c;通常使用的频率不是很高。而Webgl方案&#xff0c;相比本地部署&a…

数字经济讨论题

自2001年以来&#xff0c;Alphabet&#xff08;Google&#xff09;已进行了200多次并购。下面列出了并购年份。选择Alphabet进行的三笔并购讨论这些并购是如何使Alphabet拥有新的或增强的现有业务领域重要的是考虑何时进行所选择的收购。谷歌已经从一家提供互联网搜索引擎的公司…

制造企业为何要上数字化工厂系统?

以目前形势来看&#xff0c;数字化转型是制造企业生存的关键&#xff0c;而数字化工厂管理系统是一个综合性、系统性的工程&#xff0c;波及整个企业及其供应链生态系统。数字化工厂系统所要实现的互联互通系统集成、数据信息融合和产品全生命周期集成&#xff0c;将方方面面的…

火热报名 | DockQuery 1.2 beta版本体验官开启招募!

DockQuery是什么&#xff1f; DockQuery 代号「天狼」&#xff0c;是图尔兹全新自研的一款专业新型数据库桌面客户端&#xff0c;专为信创背景下国内外数据库开发/管理而设计&#xff0c;全面覆盖信创数据库目录、支持国内外操作系统。 目前&#xff0c;DockQuery 仅以社区版…

运动版蓝牙耳机什么牌子的好、运动款蓝牙耳机推荐

何以解忧&#xff1f;唯有运动。事实已经无数次证明&#xff0c;运动不但可以让你更瘦身、更紧实&#xff0c;更重要的是精神状态也能焕然一新。不知道各位是不是也跟我一样&#xff0c;喜欢在运动的时候听着音乐。但是听音乐就需要有好的续航&#xff0c;否则运动一半没电了&a…

Netty核心原理(线程模型、核心API)与入门案例详解

Netty核心原理&#xff08;线程模型、核心API&#xff09;与入门案例详解 文章目录Netty核心原理&#xff08;线程模型、核心API&#xff09;与入门案例详解Netty 介绍原生 NIO 存在的问题概述线程模型线程模型基本介绍传统阻塞 I/O 服务模型Reactor 模型单 Reactor 单线程Nett…

计算机四级 [操作系统] | 选择题 2 重点标注版

1.某一个单道批处理系统几乎同时依次到达4个作业&#xff0c;这4个作业的预计运行时间分别为8、4、4和4分钟&#xff0c;按照短作业优先的调度算法运行&#xff0c;请问该批作业的平均周转时间为多少 B A. 14分钟 B. 11分钟 C. 20分钟 D. 10分钟 2.下列与进程具有一一对应的关…

Authorization Server 认证服务

Hi Auth HiAuth是一个开源的基于Oauth2协议的认证、授权系统&#xff0c;除了标准的Oauth2授权流程功能外&#xff0c;还提供了应用管理、用户管理、权限管理等相关功能。 在这个项目中你能够了解到如何基于spring-security-oauth2-authorization-server实现自己的Authorizat…

Softing dataFEED OPC Suite Extended新版本支持从XML文件中读取生产数据

Softing dataFEED OPC Suite Extended V5.25的新功能——“文件读取&#xff08;File Read&#xff09;”&#xff0c;支持访问XML文件中可用的过程数据。 &#xff08;文件读取功能支持获取由XML文件提供的过程数据&#xff09;dataFEED OPC Suite Extended是用于OPC通信和云连…

【Git】为什么需要版本控制?版本控制工具有那些?

目录 一、为什么需要版本控制&#xff1f; 二、版本控制工具有那些&#xff1f; &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一下 一、为什么需要版本控制&#xff1f; 首先我们要知道什么是版本控制&#xff1f;对版本控制进行文字…