秒杀系统如何设计

 秒杀系统主要有以下特点

1、高并发瞬时流量
2、热点数据
3、数据量大
4、库存的正确扣减
5、黄牛抢购
6、重复下单
7、对普通交易的影响

前后端缓存

首先是秒杀功能的开启,以及前端资源的访问,这部分内容一般都是提前放到CDN中,让这些静态资源离用户更近就能让用户访问的更快

秒杀系统,会在前端,也就是客户端层面做一些请求的随机丢弃,这些被丢弃的请求就直接返回失败,或者系统繁忙,让用户重试。过滤掉一部分流量向服务端发送

可以配置一些黑白名单、可以通过IP进行限流、也可以做一些业务校验都是可以的 

服务器层面也是配置很多限流策略的,基于sentinel,或者自己实现一些限流算法,都是可以做动态限流的
还有就是,服务器中有一些查询操作,和一部分写操作,其实是可以用缓存来抗一下的。在缓存上本地缓存要比分布式缓存的性能更高,近端缓存要好于远端缓存

数据预热

秒杀系统另外一个比较典型的特点就是会存在热点数据,因为大家都会抢购同一件商品,那么这个商品就会变成热点数据。秒杀是可以提前预知哪些数据会变成热点的,所以可以提前做一些缓存的预热,对于热点数据,不仅需要在Redis中做预热,还需要在本地缓存也做预热,避免Redis的热key问题。

数据量大

这时候就可以考虑要么就加缓存、要么就用ES、要么就做分库分表。还有就是做数据归档,把历史数据归档掉,无非就是这么几个方案了。

库存扣减

可以利用redis单线程特性,进行库存扣减,发送MQ同步数据库,减少因加锁带来的线程等待问题

黄牛抢购

根据用户的IP、设备信息、网络信息、行为数据等进行分析,推断哪些是黄牛

这部分用户的ID直接可以加入黑名单中,除了用户ID以外,还需要对他的IP地址、设备等进行限流,比如限制某个IP一段时间内只能下单几次,基于令牌桶、漏桶等限流算法都能实现。我们也可以直接借助nginx、 sentinel、guava等进行限流的实现

重复下单

加redis分布式锁

对普通交易的影响

按照业务量做隔离措施,逻辑隔离(业务代码拆分)或者物理隔离(服务器拆分)

业务手段

有的时候,我们不能只想着用技术手段解决所有问题,其实,如果在业务上能做点事情的话,如果这些做法并不影响用户体验,那么就可能让技术实现上大大简化方案,整个系统的成本和稳定性也会有大大的提高。
比如我们前面说的限购
再比如说,在有些秒杀业务中,需要先预约,预约通过后才能参与秒杀,这就大大的降低了秒杀时的请求量了。
再比如说很多电商最近再搞一些预售的功能,其实也是有这方面的考虑的。

还有就是秒杀时通过一些验证码、问题等,也可以降低瞬时的高并发流量,

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

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

相关文章

图机器学习年度汇集

一、深度学习模型优化 在图机器学习领域,深度学习模型的优化尤为重要。今年的主要进展包括了利用先进的优化算法提高模型精度、减少训练时间以及对大规模图数据的适应性。部分团队还推出了定制化的深度学习模型,特别适用于复杂的图形结构和交互。 二、…

【算法】Java-二叉树的右视图(BFS、DFS两种解法)

题目要求: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入…

e2studio开发三轴加速度计LIS2DW12(3)----检测活动和静止状态

e2studio开发三轴加速度计LIS2DW12.3--检测活动和静止状态 概述视频教学样品申请源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()…

Jetpack Compose -> 声明式UI Modifier

前言 本章主要介绍下 Compose 的声明式 UI 以及初级写法&#xff1b; 什么是声明式UI 传统UI 传统 UI 方式来声明UI <androidx.appcompat.widget.LinearLayoutCompat android:layout_width"match_parent" android:layout_height"match_parent&quo…

Pytorch中的标准维度顺序

在PyTorch中&#xff0c;如果一个张量包括通道数&#xff08;C&#xff09;、宽度&#xff08;W&#xff09;、高度&#xff08;H&#xff09;和批量大小&#xff08;N&#xff09;&#xff0c;那么它的标准维度顺序是 [N, C, H, W]&#xff0c;即&#xff1a; 第一个维度 N 是…

test Property-based Testing-04-junit-quickcheck

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) junit-quickcheck&#xff1a;基于 JUnit 风格的属性驱动测试库 junit-qu…

送水小程序开发:如何选择最适合的技术平台

选择最适合的技术平台对于开发送水小程序至关重要。在这篇文章中&#xff0c;我将为您介绍如何选择最适合的技术平台来开发送水小程序&#xff0c;以及各种技术平台的优缺点。无论您是刚刚起步的创业公司还是成熟的送水服务提供商&#xff0c;本文都将为您提供有关送水小程序开…

深信服超融合HCI版本升级,6.0.0R5升级至6.8.0R2

超融合升级&#xff0c;需要满足以下条件及前期准备&#xff1a; 确认HCI的升级序列号有效升级时长大概在一个半小时&#xff0c;安全起见&#xff0c;需预留至少三至四小时窗口期升级前&#xff0c;需要将所有虚拟机关机&#xff0c;涉及到业务无法访问&#xff0c;需提前通知…

六、K8S-DaemonSet(DS)

DaemonSet&#xff1a;简称DS&#xff0c;守护进程控制器 DS的主要作用&#xff0c;是在kubernetes集群里&#xff0c;运行一个daemon pod。DS只管理POD 对象&#xff0c;然后通过nodeAffinity和Toleration这两个调度器的小功能&#xff0c;保证每个节点上有且只有一个pod。 特…

网络-DHCP中继(思科)

思科 前提&#xff1a;将R1 R3配置16板卡 将R1更改标识符为三层交换机 将R3更改标识符为交换机 拓扑图&#xff1a; R2进行配置 配置IP地址 为12.0.0.2 配置默认路由到R1的f1/4接口 配置dhcp地址池 配置vlan10的地址池 配置vlan20的地址池 三层交换机R1进行配置 将f1/4接口…

高光谱分类论文解读分享之基于形态卷积神经网络的高光谱影像分类

IEEE TGRS 2021&#xff1a;基于形态卷积神经网络的高光谱影像分类 题目 Morphological Convolutional Neural Networks for Hyperspectral Image Classification 作者 Swalpa Kumar Roy; Ranjan Mondal; Mercedes E. Paoletti; Juan M. Haut; Antonio Plaza 关键词 Clas…

关于git与git-lfs对文件压缩存储方面的研究

先说结论&#xff0c;git使用了Delta增量压缩算法&#xff0c;git-lfs实测没有进行任何压缩&#xff0c;这个结论让我很震惊。 测试过程如下&#xff1a; 测试git仓库自身的压缩 准备一个包含许多杂项文件的文件夹&#xff0c;大概几百M&#xff0c;要保证有一个txt文本文件…

require vs import,深入了解JavaScript模块引入方式,应用场景剖析

JavaScript作为一种脚本语言&#xff0c;经过多年的发展已经成为Web开发的主要语言之一。随着项目的复杂性增加&#xff0c;对于代码组织和管理的需求也日益迫切。这促使了JavaScript模块系统的不断发展。 背景 JavaScript模块系统的发展背景 在早期&#xff0c;JavaScript并…

Qt框架学习 --- CTK编译(Qt5.15.2+vs2019+cmake)

系列文章目录 第二章 CTK的测试demo https://blog.csdn.net/yonug1107716573/article/details/135527289 文章目录 系列文章目录前言一、准备工作二、编译步骤1.修改文件2.编译CTK2.1 准备2.2 cmake界面配置2.3 配置编译器2.4 编译的配置设置2.5 选择需要编译的模块2.6 生成2.…

Python和Julia TensorFlow科学计算常微分方程求解器

常微分方程 常微分方程&#xff08;ODE&#xff09;可用于描述动态系统。 从某种程度上来说&#xff0c;我们生活在一个动态系统中&#xff0c;窗外的天气从黎明到黄昏都在变化&#xff0c;我们体内发生的新陈代谢也是一个动态系统&#xff0c;因为随着时间的推移&#xff0c;…

Jenkins容器使用宿主机Docker

构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可。 设置Jenkins容器使用宿主机Docker 设置宿主机docker.sock权限&#xff1a; sudo chown root:root /var/run/docker.sock sudo chmod orw /var/run/d…

Easypoi word 模板导出问题

按word模板导出报错 源代码&#xff1a; //获取项目的根目录 ClassPathResource classPathResource new ClassPathResource("/word/template.docx"); InputStream inputStream classPathResource.getStream(); MyXWPFDocument xwpfDocument WordExportUtil.expo…

Uibot (RPA设计软件)股票板块行情抓取————课前材料四

微信群发助手机器人的小项目友友们可以参考小北的课前材料二博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; 紧接着小北的前两篇博客&#xff0c;友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#x…

Java 并发性和多线程3

七、线程安全及不可变性 当多个线程同时访问同一个资源&#xff0c;并且其中的一个或者多个线程对这个资源进行了写操作&#xff0c;才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。 我们可以通过创建不可变的共享对象来保证对象在线程间共享时不会被修改&…

AI绘画风格化实战

在社交软件和短视频平台上&#xff0c;我们时常能看到各种特色鲜明的视觉效果&#xff0c;比如卡通化的图片和中国风的视频剪辑。这些有趣的风格化效果其实都是图像风格化技术的应用成果。 风格化效果举例 MidLibrary 这个网站提供了不同的图像风格&#xff0c;每一种都带有鲜…