2 秒杀系统架构

第一步 思考面临的问题和业务场景

秒杀系统面临的问题: 短时间内并发非常高,如果按照秒杀的并发做相应的承载会造成大量资源的浪费。第二解决超卖的问题。

第二步 思考目前的处境和解决方案

因为秒杀系统属于短时间内的高并发问题,我们不可能使用那么多的硬件资源去部署对应的承载。而且还有个问题,我们其实并卖不到那么多的商品,只是做一个商品促销的噱头吸引用户到我们的平台来,让他们知道我们的平台并记下我们的平台。

那么也就是说其实大部分用户买不到商品是正常行为,所以我们可以通过这个特性把大部分的用户在服务的上游就过滤掉,而不是公平的竞争有限的商品。基于这个思想我们对我们的设计进行一些优化。

  1. 用户在进行抢购前肯定是先打开页面,这是第一步。那么我们为了避免服务器资源被短时间大量的请求压垮,需要把页面静态化放到CDN上,减少服务器的压力
  2. 用户在到了秒杀的时间节点为了抢到商品肯定快速的点击页面,这个请求会使用到后台的服务,我们为了减少用户频繁的请求,在前端代码做一些控制,点击按钮后置灰不能多次的点击请求后台服务
  3. 用户在点击按钮无反应的情况下,可能会重写打开页面再次发起请求,可以利用页面缓存让用户在一段时间内打开的页面是缓存页面
  4. 用户打开页面时候,有些实时数据肯定是要最新的,要不然用户发现是假数据或者是缓存在浏览器和CDN上的时候,用户体验很差。比如像剩余库存这些数据,但是我们又不希望这些查询请求落到数据库,所以部分数据放在缓存中,减少数据库的压力(页面缓存也可以但是需要缓存的时间短,不能太长

当我们做了上面的工作之后,还是会有大量的请求涌入到后台服务。因为要解决超卖的问题,我们在买入操作的时候肯定是要给商品的数量加锁。如果请求并发太高,会造成redis分布式锁设置的失效时间失效,也会造成超卖的问题。

我们可以在购买商品,锁库存数量之前再过滤掉一部分请求。例如我们用不加锁的缓存下商品数量,当涌入的人数超过一定数量的时候比如超过商品库存的时候,或者商品库存N倍的时候,后面的请求就不会再进入到后面的处理逻辑。

我们在一个用户点击购买时,就给用户数量+1,超过一定数量就不让后面的人进入。这个时候有个问题,就是我们的缓存并未加锁,比如我商品库存是100件,由于未加锁,这个时候可能同时涌入300个用户进入购买流程。其实这个问题很容易解决,我们在这300个人进入购买流程后再加分布式锁,这个时候就能保证加锁的redis不会处问题。

上面的思想基本上是基于把用户进入到购买流程前尽量过滤掉,到真正购买的流程后其实没有那么多的竞争压力,对服务器的压力也减小很多。上面我们用到了很多缓存策略,我们还需要考虑缓存穿透的问题,雪崩的问题等等。这些细节我们在后面的文章中再做讨论,我们接着讲后面的设计

第三 不怕一万就怕万一,我们对系统的可用性做到尽量的好

假如我们在秒杀系统中有一些关键的点没考虑到,秒杀系统崩了。结果影响到其他正常的服务怎么办?

我们的解决方案是隔离。把秒杀系统的服务和正常的服务隔离开。我们知道秒杀活动是需要商家参与的,当商家加入秒杀活动的时候,我们在秒杀服务建立和正常业务同样的库表结构,商家参与秒杀的商品数量等信息同步到秒杀系统的库中,这样可以做到完全的物理隔离,即时秒杀系统崩了,其他的业务也能正常运行。

以上是秒杀服务设计中比较重要的几个点。具体的细节涉及到太多,我们不做深究。

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

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

相关文章

12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)

软件介绍 12306Bypass分流抢票软件,易操作强大的12306抢票软件,全程自动抢票,云识别验证码打码,多线程秒单、稳定捡漏,支持抢候补票、抢到票自动付款,支持多天、多车次、多席别、多乘客、短信提醒等功能。…

浅谈torch.utils.data.TensorDataset和torch.utils.data.DataLoader

1.torch.utils.data.TensorDataset 功能定位 torch.utils.data.TensorDataset 是一个将多个张量(Tensor)数据进行简单包装整合的数据集类,它主要的作用是将相关联的数据(比如特征数据和对应的标签数据等)组合在一起&…

【Go】运行自己的第一个Go程序

运行自己的第一个Go程序 一、Go语言的安装Go环境安装查看是否安装成功配置GOPROXY(代理) 二、Goland安装三、Goland破解四、新建项目 开一篇专栏记录学习Go的过程,一门新语言从hello world开始,这篇文章详细讲解Go语言环境搭建及hello world实现 一、Go语…

计算机的错误计算(二百零一)

摘要 用两个大模型计算 ,结果保留 10位有效数字。实验表明,两个大模型的输出均只有1位正确数字;并它们几乎相同:仅最后1位数字不同。 例1. 计算 , 结果保留 10位有效数字。 下面是与一个数学解题器的对话。 以上为与一个数学解…

下载excel

1.引入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-oo…

2024 年度时序数据库 IoTDB 论文总结

论文成果总结 2024 年度&#xff0c;时序数据库 IoTDB 在数据库领域 CCF-A 类国际会议上共发表论文 8 篇&#xff0c;包括&#xff1a;SIGMOD 3 篇、VLDB 3 篇、ICDE 2 篇&#xff0c;涵盖存储、引擎、查询、分析等方面。 2024 最后一天&#xff0c;我们将分类盘点 IoTDB 本年的…

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found

这个问题之前遇到过&#xff0c;没有记录&#xff0c;导致今天又花了2小时 原因是没有GLIBC——2.32 使用以下命令查一下有哪些版本&#xff1a; strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ 我已经安装好了&#xff0c;所有有2.32版本 原因是当前的ubuntu版本…

海南省大数据发展中心:数据资产场景化评估案例手册(第二期)

2025年1月3日&#xff0c;海南省数据产品超市印发《数据资产场景化评估案例手册&#xff08;第二期&#xff09;》&#xff08;以下简称《手册》&#xff09;&#xff0c;该手册是基于真实数据要素典型应用场景进行数据资产评估操作的指导性手册&#xff0c;为企业在数据资产入…

python3GUI--智慧交通监控与管理系统 By:PyQt5

文章目录 一&#xff0e;前言二&#xff0e;预览三&#xff0e;软件组成&技术难点1.软件组成结构2.技术难点3.项目结构 四&#xff0e;总结 大小&#xff1a;35.5 M&#xff0c;软件安装包放在了这里! 一&#xff0e;前言 博主高产&#xff0c;本次给大家带来一款我自己使…

Linux高并发服务器开发 第八天(makefile的规则 wildcard/patsubst函数 普通变量/自动变量/其他关键字)

目录 1.makefile 1.1makefile的规则 1.2两个函数 1.3三个自动变量 1.3.1普通变量 (自定义变量) 1.3.2自动变量 1.3.3其他关键字 - ALL/all - clean 1.makefile - 作用&#xff1a;进行项目管理。 - 初步学习&#xff1a;1个规则、2个函数、3个自动变量。 - 要想使用默…

Vue动态控制disabled属性

参考:https://blog.csdn.net/guhanfengdu/article/details/126082781 在Vue中disabled:的值是受布尔值影响的&#xff0c;false为关闭禁用&#xff0c;true为开启禁用效果。 结果就是true会让按钮禁用 相反false会让按钮重新可以使用 那如果想要通过id属性值来判断是否禁用…

【DevOps】Jenkins项目发布

Jenkins项目发布 文章目录 Jenkins项目发布前言资源列表基础环境一、Jenkins发布静态网站1.1、项目介绍1.2、部署Web1.3、准备gitlab1.4、配置gitlab1.5、创建项目1.6、推送代码 二、Jenkins中创建gitlab凭据2.1、创建凭据2.2、在Jenkins中添加远程主机2.3、获取gitlab项目的UR…

每日一学——自动化工具(Jenkins)

3.2 Jenkins 3.2.1 CI/CD流程设计 嘿&#xff0c;小伙伴们&#xff01;今天我们来聊聊Jenkins——这个在持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;领域里大名鼎鼎的工具。Jenkins不仅可以帮我们自动化构建和测试代码&#xff0c;还能自动部署…

Vue2/Vue3使用DataV

Vue2 注意vue2与3安装DataV命令命令是不同的Vue3 DataV - Vue3 官网地址 注意vue2与3安装DataV命令命令是不同的 vue3vite 与 Vue3webpack 对应安装也不同vue3vite npm install kjgl77/datav-vue3全局引入 // main.ts中全局引入 import { createApp } from vue import Da…

【AI学习】Transformer深入学习(二):从MHA、MQA、GQA到MLA

前面文章&#xff1a; 《Transformer深入学习&#xff08;一&#xff09;&#xff1a;Sinusoidal位置编码的精妙》 一、MHA、MQA、GQA 为了降低KV cache&#xff0c;MQA、GQA作为MHA的变体&#xff0c;很容易理解。 多头注意力&#xff08;MHA&#xff09;&#xff1a; 多头注…

trendFinder - 利用 AI 掌握社交媒体上的热门话题

1600 Stars 177 Forks 7 Issues 2 贡献者 MIT License Javascript 语言 代码: https://github.com/ericciarla/trendFinder 更多AI开源软件&#xff1a;AI开源 - 小众AI Trend Finder 收集并分析来自关键影响者的帖子&#xff0c;然后在检测到新趋势或产品发布时发送 Slack 通知…

以图像识别为例,关于卷积神经网络(CNN)的直观解释

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 作者以图像识别为例&#xff0c;用图文而非数学公式的方式解释了卷积神经网络的工作原理&#xff0c; 适合初学者和外行扫盲。 目录 1 卷积神经网络&#xff08;CNN&#xff09; 1.1 应用场景 1.2 起…

Python 数据结构揭秘:栈与队列

栈&#xff08;Stack&#xff09; 定义 栈是一种后进先出&#xff08;Last In First Out, LIFO&#xff09;的数据结构。它类似于一个容器&#xff0c;只能在一端进行插入和删除操作。栈有两个主要的操作&#xff1a;push&#xff08;入栈&#xff09;和 pop&#xff08;出栈…

vim 的基础使用

目录 一&#xff1a;vim 介绍二&#xff1a;vim 特点三&#xff1a;vim 配置四&#xff1a;vim 使用1、vim 语法格式2、vim 普通模式&#xff08;1&#xff09;保存退出&#xff08;2&#xff09;光标跳转&#xff08;3&#xff09;文本删除&#xff08;4&#xff09;文本查找&…

HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级

注&#xff1a;本文为 “HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级” 相关文章合辑。 引文图片 csdn 转储异常&#xff0c;重传。 篇 1&#xff1a;Smart-Baby 回复中给出故障现象判断参考 篇 2、篇3 &#xff1a;HP 官方 BIOS 恢复、升级教程 开机黑屏&#xff0c…