【图解秒杀系列】秒杀场景介绍及其相关技术点

【图解秒杀系列】秒杀场景介绍及其相关技术点

  • 秒杀场景介绍
    • 秒杀页面的交互
    • 秒杀的整套流程
  • 秒杀系统面临的挑战
  • 秒杀涉及的技术点

秒杀场景介绍

电商系统的秒杀是一种营销活动,在特定的时间点,以极低的价格,有限的商品数量,吸引大量用户抢购,从而迅速增加销量、提升品牌曝光度和用户活跃度。

秒杀页面的交互

在这里插入图片描述

  1. 用户进入商品详情页,商品详情页展示商品信息价格以及秒杀倒计时。
  2. 当秒杀时间到时,用户点击抢购按钮,跳转到下单页面。下单页面展示商品单价,购买数量和收货地址等。
  3. 用户点击下单,如果下单成功,则跳转支付页。展示订单号,支付金额和支付方式等,用户点击支付按钮发起支付。

秒杀的整套流程

在这里插入图片描述

  1. 用户进入商品详情页,展示商品信息。

  2. 校验活动是否开始,也就是倒计时是否到期。

    • 否:显示倒计时
    • 是:校验是否具备抢购资格
  3. 校验是否还能抢购,比如没有库存了,那么就不能抢购;或者当前用户不具备抢购资格(比如需要预约才能抢购,但是当前用户没有预约),也不能参与抢购。

    • 否:按钮置灰
    • 是:按钮点亮
  4. 按钮被点亮之后,用户就可以点击抢购按钮进行抢购。

  5. 点击抢购按钮后,跳转结算页之前,可以设置验证码或答题机制(非必须,但是可以作为防刷的一种手段)。

    • 验证码或答题校验通过:跳转结算页
    • 验证码或答题校验不通过:跳转到抢购失败页面,提示抢购失败及其原因。
  6. 进入结算页后,用户可以点击下单按钮进行下单。下单时要进行限流,以及库存校验、限购、用户资质校验等。

    • 没有被限流,校验也通过:生成订单,扣减库存
    • 被限流或校验没有通过:跳转到抢购失败页面,提示抢购失败及其原因。
  7. 下单成功后,跳转支付页面,订单处于待支付状态。

    • 用户在有效期内进行了支付:跳转抢购成功页面,显示抢购成功。
    • 用户在有效期内未完成支付:后台进行库存回填操作。

秒杀系统面临的挑战

秒杀系统主要面临的问题主要包括:瞬时大流量、热点数据问题以及刷子流量。

在这里插入图片描述

瞬时大流量很好理解,秒杀是有许多用户参与的,并且有秒杀倒计时,倒计时一到,海里用户瞬间涌入。

热点数据问题是指大家同时抢购一个商品,这个商品的key就成为一个热点key,单靠一个redis节点无法支持数十万或上百万的并发读写。

刷子就是指使用脚本或其他工具对我们的系统发起高频次请求的人,以提升抢购的成功率。

秒杀涉及的技术点

在这里插入图片描述

  1. 浏览器缓存:通过将页面中不经常变更的部分(如页头、页尾、图片、CSS、JavaScript等静态资源)缓存在用户的本地浏览器中,可以避免每次刷新都向服务器发送请求,从而显著降低服务器的压力。
  2. CDN:CDN能够缓存静态资源(如图片、CSS、JavaScript文件等)和部分动态内容,直接在边缘节点响应用户请求,避免所有请求都集中到源服务器,从而显著减轻源服务器的负载压力。
  3. 静态化:页面静态化在秒杀场景中是一种非常有效的提示性能和响应速度的手段,通过模板技术生成的html页面,可以缓存在CDN或Nginx本地缓存中,从而提示响应速度。
  4. 秒杀按钮点亮:在秒杀场景中,倒计时结束之前,按钮是一直置灰的,只有在倒计时结束的一瞬间,按钮才被点亮。为了防止刷子在秒杀未开始前通过直接访问秒杀接口作弊,在按钮点亮前不能把按钮请求的url暴露出来,因此这个按钮点亮的操作也是需要特殊处理的。
  5. 削峰:在秒杀场景中,可以通过答题、验证码、排队等手段达到削峰的效果,由于在答题或验证码输入的过程中,用户的手速是有差异的,原本的瞬时大流量就被分摊开来了。
  6. 多级缓存:由于秒杀场景的并发访问量巨大,单一的缓存可能不足以应对,因此需要设计多级缓存来应对秒杀场景的并发访问量。比如Java本地缓存加redis缓存的组合,前面的浏览器缓存和CDN也算是多级缓存中的一层。
  7. 分层过滤:分层过滤的核心思想是通过不同层次过滤掉无效的请求,不同层次包括CDN、Nginx、网关、后端web服务等等。
  8. 缓存预热:秒杀场景通常需要有缓存预热机制以应对高并发的读请求,如果没有事先把数据加载到缓存中,就会有大量的请求冲击数据库,有可能使得数据库宕机。
  9. 库存预扣、异步下单:在秒杀场景中,涉及到下单扣库存的操作,常规操作(下单后扣库存)存在性能瓶颈,因此需要把扣库存的操作前置,然后异步生成订单信息。
  10. 超时未支付库存回填:如果用户在规定时间内未完成支付,需要把库存回填回去。
  11. 隔离:通过独立部署秒杀系统,使其与正常业务系统隔离开,避免秒杀系统对正常业务系统造成影响。
  12. 熔断限流降级:秒杀场景一般需要通过熔断限流降级等机制进行兜底保护,比如QPS达到阈值时,触发流控机制,后续的请求进行降级处理,保护系统不被大流量冲垮。

以上技术点,后续文章将会逐一解析。

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

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

相关文章

【JavaEE初阶】懒汉模式与饿汉模式及指令重排序问题

目录 📕 单例模式 🌳 饿汉模式 🚩 线程安全 🎍 懒汉模式 🚩 懒汉模式-单线程版 🚩 懒汉模式-多线程版 🎄 指令重排序 📕 单例模式 单例模式是一种经典的设计模式,…

node.js使用NodeMachineID 生成唯一UUID和注意事项

node-machine-id用于获取或生成唯一的机器ID 如何使用 const { machineId, machineIdSync } require(node-machine-id) JSON.stringify(machineIdSync({original: true})) ;方法: machineIdSync 此函数同步获取操作系统本机UUID/GUID,默认情况下进行哈…

视频教程 - 自研Vue3 Tree组件高级功能:虚拟滚动新增节点实现自动滚动

感谢小伙伴们对本套自研vue3 tree组件教程的关注,在前一篇媲美Element Plus JuanTree终极实战:虚拟滚动的功能演示中发现了小bug,特地整理了相关录屏来说明怎么一步步解决bug的,来回馈小伙伴们的支持。 Tree组件高级功能&#xff…

redis面试(四)持久化

什么是持久化? 由于redis是基于内存操作的轻量型数据库,所以如果发生宕机重启这种事情,存储的数据就会直接丢失,如果在里面存储了没有备份的数据,那么确实会对我们的业务造成一定影响。 所以我们要通过持久化的手段&a…

C# OpenCvSharp 打开4K高清摄像头

一、前言 整了个1200w像素的usb摄像头,使用 OpenCvSharp读取,读取和设置分辨率代码耗时居然10几秒,查询资料发现,必须对VideoCapture进行设置,使用DSHOW模式打开,并且设置分辨率代码下必须增加 指定MJPG编码…

pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

重新设置一下环境变量。 注意,这里后面没有斜杠 我之前就是因为环境变量中,这两行最后都有斜杠,导致提示pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

红旗E-QM5起火,一汽红旗否认车辆质量问题

近日,据媒体报道,7月31日下午,长春一辆一汽红旗E-QM5发生起火事故。 一汽红旗方面则表示:“现场勘查和初步调查表明,该事件并非因车辆自身质量问题导致自燃。疑似车辆在行驶过程中与路面井盖发生碰撞导致动力电池受损&…

计算机网络-基于PIM-DM+IGMP的组播实验配置

前面我们将IGMP协议和PIM-DM协议理论知识都学完了,现在开始进入实践,毕竟只有完成实践是最好的检验方式。IGMP是用于感知组播组成员,而PIM-DM是用于在域内构建组播分发树的的协议,本次实验使用这两项技术进行分析与实践。 一、拓扑…

upload-labs漏洞靶场~文件上传漏洞

寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查…

电脑新加的硬盘如何分区?新加硬盘分区选MBR还是GPT

最近有网友问我,电脑新加的硬盘如何分区?电脑新加的硬盘分区选MBR还是GPT要看引导模式采用uefi还是传统的legacy模式,如果采用的是uefi引导模式,分区类型对应的就是gpt分区(guid),如果引导模式采用的是legacy,对应的分区类型为mb…

Spring Boot集成sse实现chatgpt流式交互

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 什么是sse? SSE可以指代两种不同的概念:一是指“服务器发送事件”(Server-Sent Events),另一种是指英特尔的“因特网数据流单指令序列扩展”(Streaming SIMD Extensions)。…

循环结构(三)——do-while语句

目录 🍁引言 🍁一、语句格式 🚀格式1 🚀格式2 🍁二、语句执行过程 🍁三、实例 🚀【例1】 🚀【例2】 🚀【例3】 🍁总结 🍁备注 &am…

Unity获取Animator动画播放完成事件

整理了一些在日常经验中处理动画播放完成事件的方法 方法: 1.Dotween配合异步实现 2.状态机计时方法实现 3.原生动画行为方法实现 方法一:Dotween异步方法 using UnityEngine; using System.Threading.Tasks; using DG.Tweening;public class PlayerAnimAsync : M…

Java——多线程(6/9):线程池、处理Runnable、Callable任务(认识线程池-线程池的工作原理,ThreadPoolExecutor构造器)

目录 认识线程池 介绍 线程池的工作原理 如何创建线程池 介绍 ThreadPoolExecutor构造器 代码实例 线程池的注意事项 线程池处理Runnable任务 ExecutorService的常用方法 代码实例 新任务拒绝策略 线程池处理Callable任务 ExecutorService的常用方法 代码实例…

如何从智联招聘网站快速抓取职位详情?两大技巧揭秘

摘要: 本文将揭秘如何利用Python爬虫技术,高效且合法地从智联招聘网站抓取职位详情信息。通过实战示例,展现两大核心技巧,助你在大数据时代抢占先机,为你的市场分析、人才研究提供强大支持。 一、引言:数据…

排序算法:冒泡排序,golang实现

目录 前言 冒泡排序 代码示例 1. 算法包 2. 冒泡排序代码 3. 模拟排序 4. 运行程序 5. 从大到小排序 循环细节 外层循环 内层循环 总结 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 假设 5000 条数据,对比…

荒原之梦考研:专科考研成功的可能性大吗?

专科还是本科不是决定考研能否成功的关键因素,决定考研能否成功的关键因素是自己是否有清晰的规划、是否有足够的专注能力,以及是否能够吃得了考研的“苦”。 首先要有清晰的规划,比如说,不是我们每个人足够努力就都能考上 TOP1 …

很简单的Win10+Win7双系统教程|UEFI篇

前言 前段时间有写过一篇关于Windows10Windows7双系统安装教程,但这个教程为了比较保险,就进入了WinPE维护系统进行操作。 但有很多小伙伴就有点搞不懂了,都不知道WinPE是什么系统,也不知道怎么去解决这个问题。 今天咱们就来讲…

centos7部署智能dns实战应用

主DNS:192.168.101.129 备DNS:192.168.101.128 原理: 一、下载软件 bind-9.17.9.tar.xz的下载地址:https://ftp.isc.org/isc/bind9/9.17.9/bind-9.17.9.tar.xz。更多的bind版本可以从https://ftp.isc.org/isc/bind9/下载。 二&a…

【深入探秘Hadoop生态系统】全面解析各组件及其实际应用

深入探秘Hadoop生态系统:全面解析各组件及其实际应用 引言 在大数据时代,如何高效处理和存储海量数据成为企业面临的重大挑战。根据Gartner的统计,到2025年,全球数据量将达到175泽字节(ZB),传…