首页 > 其他分享 >如何设计一个秒杀系统

如何设计一个秒杀系统

时间:2024-01-09 10:01:45浏览次数:27  
标签:库存 静态 系统 并发 秒杀 服务器 设计 页面

如何设计一个秒杀系统

难度指数:4星级 考查频率:60%-70%

开发年限:5年左右 3-5

一.概念

秒杀系统:电商系统中,非常常见的一种业务模式,主要为了吸引用户、刺激留存和消费而设计的一种促销活动。

整点秒杀、单个商品秒杀等。

二.特征

1.瞬时流量非常大,过了这个秒杀时间,流量就结束了,所以,不能使用堆机器的方式来提高QPS,成本太高。

2.秒杀商品的库存一般有限的,比如说:1万个用户去抢10台IPHONE16,库存少而抢的人多,这种情况下服务器压力大。

3.秒杀时间还未来临,刷新量非常大,会导致服务器静态资源访问量剧增。10:00,9.58 9.59,服务器压力大。

三.准备工作

选商品,缓存:交互,库存数量、商品编号等等。

看一下是否可以抗的住预估的并发。

关键点:高并发、快响应; 防止超卖:防止恶意 刷;页面访问量大问题;秒杀开关的设计;订单后续业务逻辑设计异步;如果订单失败,补偿机制;服务降级。

四.解决方案*

1.高并发、快响应:C端产品,用户量很大,并发量高,提前做好压力测试。Redis热数据预加载、配置专门的MQ、前端页面静态化处理、CDN加速、宽带扩展、服务器集群的负载均衡。

2.防止超卖:精品,技术问题,库存负数。Redis,真正秒杀的时候,判断库存是否充足和扣减库存,两个操作,保证数据原子性,防止超卖。

3.防止恶意刷:一起机器人恶意抢单,机器人一直在刷,限流来解决该问题。用户ID策略、IP地址策略。不用担心由于限流而导致的用户体验问题。1人1s请求10次,一个ip10次。无效请求,无法达到服务器。

4.页面访问量过大:提前将页面静态化处理。资源静态化:url,直接找到静态资源,不和服务器做交互操作。+CDN就近分发策略,提高资源的响应速度和命中率。

5.秒杀入口:前端页面已经上线,为了限制一些无效的请求达到后端,按钮提前禁用,倒计时的时候,再开放,降低流量压力。

6.订单后续逻辑为异步:秒杀成功的订单放到MQ,后续的服务可以慢反馈给客户。

7.订单失败补偿机制:消费失败,抛出异常,重试,报警机制,实时监控预警。

8.服务降级:由于技术性或人为的问题,导致秒杀价格设置有问题。服务调用出现大问题的,异常 bug。出现到一个提示信息页面。

五.点评

三高:高并发、高性能、高可用。

标签:库存,静态,系统,并发,秒杀,服务器,设计,页面
From: https://blog.51cto.com/teayear/9156938

相关文章

  • C-学生管理系统
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>typedefstruct{ intnum; charname[64]; charsex; floatscore;}S;voidmenu(void);intShoweveryone(Ss[]);intAdd(Ss[]);intDel(Ss[]);intFind(Ss[]);intChan......
  • Qt读取文件对比:每次获取自定义的长度和使用系统的API,耗时对比
    0.前言在编程过程中,经常遇到文件读写操作,太频繁了。每次也都写的不一样。突发奇想,想测试下几种不同的读取文件的效率。测试以下三种方式读取文件效率:自定义读取文件耗时使用QFile类API读取文件耗时使用QTextStream类API读取文件耗时在测试前,说一下使用到的知识点。1.Qt......
  • 支付系统的心脏:简洁而精妙的状态机设计与核心代码实现
    这是《百图解码支付系统设计与实现》专栏系列文章中的第(9)篇。本篇主要讲清楚什么是状态机,简洁的状态机对支付系统的重要性,状态机设计常见误区,以及如何设计出简洁而精妙的状态机,核心的状态机代码实现等。我前段时间面试一个工作过4年的同学竟然没有听过状态机。假如你没有听过状态机......
  • 高级程序设计语言翻译的两种基本形式
    在编译方式下,先将源程序翻译为等价的目标程序,源程序的翻译和目标程序的运行是完全独立的两个阶段。在解释方式下,对源程序的翻译和运行是结合在一起进行的,并不生成目标代码。编译过程基本上可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段......
  • linux系统命令技巧ps -ef | grep main | grep -v grep | awk '{print $2}' | xargs --
    说明这个命令ps-ef|grepmain|grep-vgrep|awk'{print$2}'获取的结果为空,填入xargs参数的值也为空,因此报错。我们可以在ps-ef|grepmain|grep-vgrep|awk'{print$2}'|xargskill-9的基础上,加上xargs的参数:--no-run-if-empty,意思就是如果前半部分的命令......
  • 【设计模式】建造者模式——建造者模式在Android SDK源码中的应用
    建造者模式在AndroidSDK源码中也有广泛的应用,本文挑两个典型的类讨论一下:AlertDialog.Builder在Android源码中最常用到的建造者模式非AlertDialog.Builder莫属,代码如下:AlertDialogalertDialog=newAlertDialog.Builder(mContext) .setTitle("系统提示:").setMessage("请......
  • 有源滤波装置在水处理行业配电系统中的应用
    摘要:在水处理行业供配电系统中,涉及曝气风机、提升泵、污泥脱水设备等负荷设备,导致异步电动机产生较多无功功率和大量的谐波,使系统功率因数下降,以及谐波对配电系统、负载产生较大的危害。就此,水处理行业需提高对电能质量的重视,通过有源滤波装置治理,滤除谐波,从而节能降耗。关键词:水处......
  • 企业微电网能效系统建设正当时|综合智慧零碳电厂
    2023年11月14日,由国家电投统筹,山东总公司(山东院)研究编制的《综合智慧零碳电厂通则》在全国团体标准信息平台正式发布,成为综合智慧零碳电厂相关标准。《综合智慧零碳电厂通则》提出了综合智慧零碳电厂构建术语和定义、总则、技术方案架构、主要干系方、技术指标、核心价值和效用评价......
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式
    微服务彻底改变了应用程序开发世界,将大型整体系统分解为更小、更易于管理的组件。这种架构风格的特点是独立、松散耦合的服务,带来了从可扩展性、模块化到更高的灵活性等众多优势。DevOps团队如何最好地利用这种方法来实现最高效率?答案在于理解并有效地采用微服务设计模式。在本文......
  • k8s 对接 cephfs 文件系统
    创建资源池cephosdpoolcreatecephfs_data128cephosdpoolcreatecephfs_metadata128文件系统需要两个资源池,一个用于存储数据体,一个用于存放索引信息及其他数据相关信息。创建文件系统cephfsnewcephfscephfs_metadatacephfs_data获取admin秘钥cephauthg......