电商--抢购架构总结

news2025/2/13 23:32:05

文章目录

  • 背景
  • 业务流程
  • 业务难点
  • 技术难点
  • 技术方案
    • 技术方向
    • 具体落地
      • 客户端流控
      • 网关流控
      • 容器流控
      • 后端接口流控
      • 数据库流控
    • 流控总结
    • 优化
      • 读取加速
      • 异步化流程处理
      • 系统扩容
    • 压测
    • 监控
  • 总结
  • 参考文献

背景

这是个在做NFT电商项目时遇到的场景,要求运营可以商家某个系列的NFT商品,可以设置该系列商品个数和开售时间,当未到达开售时间时显示未开售,一旦到达开售时间时显示售卖中,当抢购完显示售崩。只有售卖中才可以进行抢购。

业务流程

在这里插入图片描述

客户端抢购流程中会涉及到商品数据的读取用于商品展示,运营活动数据的读取用于显示价格变化、活动策略校验,以及库存数据的读取用于校验库存是否还有剩余。

业务难点

技术难点

  • 短时间区间内的突发大流量,但是实际需要处理的请求却是有限

  • 库存只有一份,所有人会在集中的时间读和写这些数据。

技术方案

技术方向

  • 尽量将请求拦截在系统上游

传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,最终导致服务体验差,甚至服务瘫痪无法使用。

  • 充分利用使用缓存

这是一个读多写少的场景,非常适合使用缓存来处理读请求。

具体落地

客户端流控

客户端(web、安卓、IOS)请求拦截,当服务端响应慢导致客户端一直处于请求中时,用户习惯性 重复点击按钮来获取请求,这样会平白无故的增加了后端系统负载,80%的请求是这么多出来的。

对于这种重复请求,在产品层面可以要求用户点击按钮后,按钮置灰,禁止用户重复提交请求;代码层面,限制用户在x秒之内只能提交一次请求。 如此限流,大部分真实用户流量已拦。

网关流控

由于客户端安装包一旦被破解或者被抓包,那么对于客户端与服务端的交互流程就被暴露了,那么此时就可以通过一些手段去对服务端发出大量的请求。所以在客户端之后的网关层做流控就必不可少。网关限流的配置方法有很多种,现在的主流网关一般都支持配置访问限制,可以通过配置实现简单的流控(如nginx的连接数限流和漏桶算法实现的限流)。

容器流控

上述的流控做法只能限制用户异常访问,如果正常访问的用户数量很多,就有后端系统压力过大甚至异常宕机的可能,因此需要后端系统进行流控。网关过后就来到了容器层(tomcat、jetty),每个实例所能承受的QPS只有容器自己经过压测才知道。常见的如tomcat可以通过配置参数来进行流控。


## tomcat参数
# 队列大小
server.tomcat.accept-count=100
# 最大连接数
server.tomcat.max-connections=1000
# 最大活跃线程数
server.tomcat.threads.max=10
# 最小活跃线程数
server.tomcat.threads.min-spare=10

后端接口流控

容器的限流都针对的是整个实例。如果要实现更为精细的访问限制(具体到某个接口),可以在后端服务器上对不同业务实现访问限制。常见做法是可以通过在内存(针对每个实例接口的QPS)或缓存服务中(针对的是实例集群总的QPS)加入请求访问信息,来实现访问量限制。

由于不同接口依赖的第三方服务数量、第三方服务响应情况、数据库等情况不同,所以不同接口的流控限制也不同。

数据库流控

进过上面几步的流控,到达数据库的请求基本都是有效的请求了,但是对于这种抢购来说可能由于营销得好,此时还是涌入了大量的真实流量,但是真正数据库需要接收的流量又是有限的。这时候可以把请求数据库的操作放入队列内,数据层去获取队列进行消费,这样就控制了数据库的访问QPS,当库存被抢购一空时就可以将剩余的流量直接打回不请求数据库。

流控总结

这样经过了层层流控,从上到下流量呈现一个漏斗形态,越往下的服务接收到的流量越少,而最下层的数据层又是最重要的服务在这里得到很好的保护。

优化

流控主要解决了突发流量的问题,但是针对读多写少的问题我们还可以进行优化,让服务响应更加快,提升用户体验。因为再好的营销手段都需要技术的支持才能发挥出有效的收益。

读取加速

在抢购活动中,数据的操作一般都是读多写少。几百万的人最终能获取到商品的也就是那么有限个人,最后提交的订单最多也就商品个数的数量,但是在抢购过程中,这几百万人会一直产生大量的读取请求,并且读取的还是一些基本不变的信息。因此可以使用缓存服务对用户请求进行缓存优化,把一些高频、几乎不变的内容放到缓存中去。对于更大规模的系统,可以通过静态文件分离、CDN服务等把用户请求分散到外围设施中去,以此来分担系统压力。

异步化流程处理

对于接口内部流程通过消息队列、异步调用、流程拆分的方式可以实现异步处理,快速响应用户请求,让后端有较为充足的时间来处理一些非接口马上需要处理的流程(如支付成功后的发货流程,下单成功后的支付流程),提高对用户请求的响应速度,从而提升用户体验。通过消息队列还可以隔离前端的压力,实现排队系统,在涌入大量压力的情况下保证系统可以按照正常速率来处理请求,不会被流量压垮。

系统扩容

对一次成功的抢购活动来说,无论如何限流,如何优化系统,最终产生的流量与正常流量对比都是超出N倍的。因此临时性的系统扩容必不可少,系统扩容包括以下3个方面。

  • 增加系统规格:可以预先增加系统容量,比如提高系统带宽、购买更多流量等。
  • 服务扩展:无状态服务+负载均衡可以直接进行水平扩展,有状态的服务则需要进行较为复杂的垂直扩展,增大实例规格。
  • 后端系统扩容:缓存服务和数据库服务都可以进行容量扩展。

压测

再好的理论都需要实践的认证,对于这种关注度特别该的需求,更需要做上线前的压测来验证整个架构是否能承受期望的流量。需要有详细的压测方案文档的输出来帮助压测人员了解压测的流程以及需要压测的接口、流程,通过哪些报表来验证压测的结果,一旦出现性能问题需要APM平台体能哪些能力来帮助定位出出现性能的点在哪。对于压测这里不详细展开介绍。

监控

没有人能保证线上系统业务、性能上是完美的,所以需要完善的监控体系来帮助维护人员在问题爆发前能提早预警,在问题爆发时能得到通知,在问题爆发后能有所定位。对于监控体系这里不详细介绍。

总结

对于抢购、秒杀这种业务要提炼出他的特点来进行针对性的处理。

最后对于这种抢购、秒杀的需求因为它们的特殊性可以拆分出单独的服务来进行处理,这样有利于维护、优化、成本控制。

参考文献

秒杀系统架构优化思路

如何设计秒杀系统?

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

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

相关文章

顺序栈与链栈

简介 栈和队列是两种重要的线性结构。从数据结构角度看, 栈和队列也是线性表, 其特殊性在于栈和队列的基本操作是线性表操作的子集, 它们是操作受限的线性表。 栈 (stack) 是限定仅在表尾进行插入或删除操作的线性表。 因此, 对…

计算字母出现次数【存在括号计算】

计算字母出现次数【存在括号计算】 此代码考虑到了本问题的大多可能情况,闲话少述,代码中的注释很丰富。 代码绝对可以解决你的问题! 不行你就评论,回复速度超快 作者时间YaoChongChong2023年6月14日10:40 Descript…

T8151B T8310 T8311罗克韦尔自动化可信通信接口

​ T8151B T8310 T8311罗克韦尔自动化可信通信接口 T8151B T8310 T8311罗克韦尔自动化可信通信接口 DCS控制器正反作用怎么判断? dcs控制器的正反作用可以在工程师站更改,比如中控系统那就在工程师站的操作界面把控制系统上的调节阀位号点开就会有正反作…

【华为云分布式消息服务RocketMQ】

MD[华为云分布式消息服务RocketMQ] 华为云分布式消息服务RocketMQ,使用指南 说明1:华为云rocketmq默认是集群4.8版本,而非单机版。 说明2:华为云rocketmq兼容性较好,一般不需要进行SDK改造。 1.创建/购买分布式消息服务RocketM…

水文水动力模型在城市内涝、城市排水、海绵城市规划设计中教程

详情点击链接:水文水动力模型在城市内涝、城市排水、海绵城市规划设计中应用教程 一,CAD、GIS水力建模过程 1.1复杂城市排水管网系统快速建模:通过标准化的步骤,利用CAD数据、GIS数据建立SWMM模型。在建模的不同阶段发挥不同软…

生成AI(三)—创建自己的MidJorney

背景:MidJorney是面向互联网的图像AIGC产品,在政企内部,存在大量需求训练内部的知识作为自己的AIGC工具。基本需求是信息安全考虑,合规考虑。 目标:通过自准备的数据训练MidJorney同类模型,成为私有化部署…

【基于容器的部署、扩展和管理】3.9 云原生容器的安全性和合规性

往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 第三章:【3.1 容器编排系统和Kubernetes集群的构建】 第三章:【3.2 基于容器的应用程序部署和升级】 第三章:【3.3 自动…

关于Android的帧动画,补间动画,属性动画的使用和总结。(附源码)

说明&#xff1a;内容有点多&#xff0c;可以分块阅读&#xff0c;后续可能会拆分为三讲 一. Android的动画总结 一 . 帧动画 帧动画其实就是通过连续播放图片来模拟动画效果 以下是俩种实现方式&#xff1a; 1. xml文件的方式 首先在drawable下建立animation_lufi.xml <?…

视频剪辑需要学哪些软件 视频剪辑在哪里学

视频剪辑涉及到素材准备、视频的编辑与生成、格式的转换等方面&#xff0c;因此需要学习到的软件类型也不少。比如在准备素材时&#xff0c;可能会涉及到音频、图片等处理&#xff0c;以及特效的应用等。接下来&#xff0c;就让我们详细了解下视频剪辑需要学哪些软件&#xff0…

如何进行安全技术交底

安全技术交底是一项非常重要的安全管理工作&#xff0c;对于保障施工现场的安全和人员的生命安全具有不可替代的作用。那么作为公司管理层如何实时了解安全技术交底的执行情况&#xff0c;工作人员是否做到认真、安全、彻底执行&#xff1f; 有没有更好、更简便低成本的方法来做…

利好再现!股、债携手上涨将继续?

政策支持继续&#xff0c;6月13日&#xff0c;国家发改委等部门印发《关于做好2023年降成本重点工作的通知》&#xff0c;助力经济运行整体好转。当日&#xff0c;央行公开市场操作中7天逆回购中标利率也下调10个基点&#xff0c;市场对于6月降息预期越来越浓了。带动A股市场震…

Spark SQL数据源:JSON数据集

文章目录 一、读取JSON文件简介二、读取JSON文件案例演示&#xff08;一&#xff09;创建JSON文件并上传到HDFS&#xff08;二&#xff09;读取JSON文件&#xff0c;创建临时表&#xff0c;进行关联查询1、读取user.json文件&#xff0c;创建临时表t_user2、读取score.json文件…

高速视觉筛选机PCI Express实时运动控制卡XPCIE1028

产品导读 正运动技术的PCI Express总线运动控制卡XPCIE1028&#xff0c;具备位置锁存、多维高速硬件位置比较输出PSO、同步跟随、精准触发的运动控制和I/O控制功能。 配合正运动技术MotionRT7实时内核使用&#xff0c;可高度满足高速视觉筛选机应用所需的运动控制需求。 XPC…

png转jpg,直接改后缀?

通过把.png改为.jpg可以改变图片的格式么&#xff1f; 将PNG文件扩展名改为JPEG的扩展名&#xff08;.jpg或.jpeg&#xff09;不会更改图像的格式。它只是更改了文件扩展名&#xff0c;这可能导致一些图像查看器和编辑器无法正确识别和处理该文件。 PNG和JPEG是两种不同的图像文…

揭秘水文覆盖变化!使用 R 语言轻松处理 GRACE.nc 文件

一、引言 在今天越来越严重的气候变化条件下&#xff0c;水文覆盖成为了越来越多研究者重视的话题。水文覆盖指的是地表或植被表面被水覆盖的面积&#xff0c;包括河流、洼地、湖泊、蓄水池等。它反应了一个地区的水资源分布、水域利用等情况&#xff0c;对于水资源管理和自然…

centos7中docker安装单机版本及对应的分布式应用中心【亲测可用】

第一部分&#xff1a;安装docker篇 1.安装docker&#xff0c;sudo为以管理员身份运行,如当前登录为root用户&#xff0c;加上也不影响 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-…

在不安装ghostscript软件情况下,Windows中将ghostscript DLL(gsdll64.dll)库提供给python,并将资源打包进exe

1. 先安装ghostscript软件&#xff0c;将安装后的文件夹复制到项目文件夹下 2. 安装ghostscript&#xff0c;修改代码调用gsdll64.dll文件 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ghostscript 将ghostscript 库安装的文件夹复制到项目文件夹下&#xff…

信贷产品的贷前获客营销策略搭建

在竞争激烈的信贷市场中&#xff0c;有效的贷前获客营销策略对于吸引潜在借款人、提高转化率以及保持客户忠诚度至关重要。本文将分享一些关于信贷产品贷前获客营销策略搭建的基本框架和经验分享&#xff0c;希望能对大家有所启发。 1、市场调研和目标客户定义 在制定贷前获客…

20230614使用360安全卫士的断网急救箱解决不能上网的问题

20230614使用360安全卫士的断网急救箱解决不能上网的问题 2023/6/14 12:29 未连接到互联网 网络连接错误&#xff0c;请检查您的网络设置 刷新 无法访问此网站youtube.com 的响应时间过长。 请试试以下办法&#xff1a; 检查网络连接 检查代理服务器和防火墙 运行 Windows 网…

小程序步骤条实现

步骤条实现 <template><view class"contractInfo"><view class"contractInfo_center" style"overflow-y: auto; display: flex; overflow-y: hidden"><view class"contractInfo_center_block" v-for"(ite…