当前位置:网站首页>高并发大流量秒杀方案思路
高并发大流量秒杀方案思路
2022-07-07 01:11:00 【生命不止、战斗不息】
概念:什么是秒杀
秒杀场景一般会在电商举行一些活动或者节假日在12306网站上抢票时遇到。对于网站中一些稀缺或者特价的产品,电商网站一般会在约定的时间对其进行限量销售,因为这些产品的特殊性,会吸引大量用户前来抢购,并且会在约定时间同时在秒杀页面进行抢购
秒杀系统场景的特点
1)秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问量激增。
2)秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功
3)秒杀业务流程比较简单,一般就是下订单减库存。
秒杀架构设计的理念
限流: 鉴于只有少部分用户能够秒杀成功,所以要限制部分流量,只允许少部分流量进入服务器后端。
消峰: 对应秒杀系统瞬时会有大量用户涌入,所以在抢购一开始就会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原理,所以如何把瞬间的高流量变成一段平稳的流量也是设计秒杀系统很重要的思路,实现消峰的常用方法利用缓存和消息中间件技术
异步处理: 秒杀系统是一个高并发系统,采用异步处理模式可以极大的提高系统并发量,其实异步处理就是消峰的一种实现方式
内存缓存: 秒杀系统最大的瓶颈一般是数据库读写,由于数据库读写属于磁盘IO,性能很低,如果能够把部分数据或业务逻辑转移到内存缓存,效率会有极大的提升
可扩展性: 当然如果我们想支持更多用户,更大的并发,最好就将系统设计成弹性可扩展的,如果流量来了,扩展机器就好了,像淘宝,京东双十一活动就会增加大量机器应对交易高峰
设计思路
将请求拦截在系统上游,降低下流压力:秒杀系统特点就是并发量极大,但实际秒杀成功的请求数量确很少,所以如果不在前端拦截可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时,甚至导致系统崩溃
充分利用缓存:利用缓存可以极大提高系统读写速速
消息队列:消息队列可以削峰,将拦截大量并发的请求,这也是一个异步处理过程,后台业务根据自己的处理能力,从消息队列中主动的拉取请求消息进行业务处理
前端方案
浏览器端(js):
1)页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素,通过CDN来抗峰值
2)禁止重复提交:用户提交之后按钮置灰,禁止重复提交
3)用户限流:在某一时间内只允许用户提交一次请求,比如可以采取IP限流
后端方案
服务器控制器层(网关层)
限制UID(userID)访问频率:我们上面拦截了浏览器的访问请求,但准对某些恶意请求和攻击或者其他插件,在服务器控制层要准对同一个uid,限制访问频率
服务层
上面只拦截了一部分请求,当秒杀的用户量非常大时,即使每个用户只有一个请求,到服务层的请求数量还是很大。比如我们有100w用户同时抢购100台手机,服务层并发请求压力至少为100w。
1)采用消息队列缓存请求:既然服务器层知道库存只有100台手机,那完全没有必要把100w个请求都传递到数据库里,那么可以先把这些请求都写到消息队列里面缓存一下,数据库层订阅消息减少库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束
2)利用缓存应对读请求:对类似12306等购票业务,是典型的读多写少业务,大部分请求时查询请求,所以可以利用缓存分担数据库压力
3)利用缓存对写请求:缓存也是可以应对写请求,比如我们可以把数据库中库存数据迁移到Redis缓存中,所有减库存操作都在Redis中进行,然后通过后台进程把Redis中的用户秒杀请求同步到数据库中
数据库层
数据库层是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截,数据库层只承担“能力范围内”的访问请求。所以,上面通过在服务层引入的队列和缓存,让底层的数据库高枕无忧
案例:利用消息中间件和缓存实现简单的描述系统
Redis 是一个分布式缓存系统,支持多种数据结构,我们可以利用Redis轻松实现一个强大的秒杀系统。
我们可以采用Redis最简单的key-value数据结构,用一个原子类型的变量值作为key,把用户id作为value,库存数量便是原子变量的最大值,对于每个用户的秒杀,我们使用RPUSH key value 插入秒杀请求,当插入的秒杀请求数量达到上限时,停止所有后续插入。
然后我们可以在后台启动多个工作线程,使用LPOP key 读取秒杀成功者的id,然后在操作数据库做最终的下单减库操作
当然,Redis可以换成 消息中间件 ActiveMQ,RabbitMQ,也可以将缓存和消息中间件组合起来,缓存系统负担接收记录用户请求,消息中间件负责将缓存中的请求同步到数据库
电商网站一般架构
秒杀第一个版本
秒杀系统架构图
秒杀系统需要独立出来
秒杀问题
现有业务冲击(将秒杀服务独立出来)
高流量大并发(redis缓存处理、MQ异步处理订单请求)
网络带宽突增(秒杀活动时增加带宽、CDN+OSS缓存静态文件)
超卖(redis队列缓存商品数量防止并发出现超卖现象)
防止黄牛(IP限制次数)
解决方案
单独部署
限流 熔断
缓存
CDN+OSS
消息队列
边栏推荐
- Win configuration PM2 boot auto start node project
- Interview skills of software testing
- 3428. 放苹果
- 原生小程序 之 input切换 text与password类型
- 980. Different path III DFS
- Digital IC interview summary (interview experience sharing of large manufacturers)
- Check point: the core element for enterprises to deploy zero trust network (ztna)
- Forkjoin is the most comprehensive and detailed explanation (from principle design to use diagram)
- Go language learning notes - Gorm use - native SQL, named parameters, rows, tosql | web framework gin (IX)
- PowerPivot——DAX(函数)
猜你喜欢
JVM命令之 jstat:查看JVM统计信息
[SQL practice] a SQL statistics of epidemic distribution across the country
@Detailed differences between pathvariable and @requestparam
Harmonyos practice - Introduction to development, analysis of atomized services
Go language learning notes - Gorm use - native SQL, named parameters, rows, tosql | web framework gin (IX)
目标检测中的BBox 回归损失函数-L2,smooth L1,IoU,GIoU,DIoU,CIoU,Focal-EIoU,Alpha-IoU,SIoU
Go语学习笔记 - gorm使用 - gorm处理错误 | Web框架Gin(十)
From "running distractor" to data platform, Master Lu started the road of evolution
Detailed explanation of platform device driver architecture in driver development
EMMC print cqhci: timeout for tag 10 prompt analysis and solution
随机推荐
Convert numbers to string strings (to_string()) convert strings to int sharp tools stoi();
JVM命令之 jstat:查看JVM統計信息
[FPGA tutorial case 14] design and implementation of FIR filter based on vivado core
The boss always asks me about my progress. Don't you trust me? (what do you think)
Mac version PHP installed Xdebug environment (M1 version)
What is make makefile cmake qmake and what is the difference?
STM32按键状态机2——状态简化与增加长按功能
Sequential storage of stacks
成为资深IC设计工程师的十个阶段,现在的你在哪个阶段 ?
Introduction to the extension implementation of SAP Spartacus checkout process
980. 不同路径 III DFS
Digital IC interview summary (interview experience sharing of large manufacturers)
Interview skills of software testing
苹果cms V10模板/MXone Pro自适应影视电影网站模板
Opensergo is about to release v1alpha1, which will enrich the service governance capabilities of the full link heterogeneous architecture
Change the original style of UI components
测试开发基础,教你做一个完整功能的Web平台之环境准备
Dc-7 target
ML's shap: Based on the adult census income binary prediction data set (whether the predicted annual income exceeds 50K), use the shap decision diagram combined with the lightgbm model to realize the
盘点国内有哪些EDA公司?