如何设计一个秒杀系统???

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 如何设计一个秒杀系统???

一、秒杀系统【并发读、并发写】


1.秒杀时大量用户会在高并发同一时间同时进行抢购,网站瞬时访问流量激增。

2.秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。

3.秒杀业务流程比较简单,一般就是下订单减库存


1.1 设计思路


1.BlockingQueue阻塞队列限流: 鉴于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。


2.redis,MQ削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用redis缓存和RocketMQ消息中间件等技术。


3.异步处理:秒杀系统是一个高并发系统,采用异步处理模式可以极大地提高系统并发量,其实异步处理就是削峰的一种实现方式。


4.Redis内存缓存:秒杀系统最大的瓶颈一般都是数据库读写,由于数据库读写属于磁盘IO,性能很低,如果能够把部分数据或业务逻辑转移到内存缓存,效率会有极大地提升。


5.分布式:当然如果我们想支持更多用户,更大的并发,最好就将系统设计成弹性可拓展的,如果流量来了,拓展机器就好了。像淘宝、京东等双十一活动时会增加大量机器应对交易高峰。,分布式带来了一些问题,如分布式事务,分布式锁。


二、前端方案


将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,但实际秒杀成功的请求数量却很少,所以如果不在前端拦截很可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时。 如【河北考试教育院,报名46级,网页进不去是一种解决方案】

页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素。通过CDN来抗峰值。

禁止重复提交:用户提交之后按钮置灰,禁止重复提交

用户限流:在某一时间段内只允许用户提交一次请求,比如可以采取IP限流


三、服务端方案


1.采用MQ消息队列缓存请求:既然服务层知道库存只有100台手机,那完全没有必要把100W个请求都传递到数据库啊,那么可以先把这些请求都写到消息队列缓存一下,数据库层订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。


2.利用redis缓存预热应对读请求:对类似于12306等购票业务,是典型的读多写少业务,大部分请求是查询请求,所以可以利用redis缓存分担数据库压力。


3.利用redis缓存应对写请求:缓存也是可以应对写请求的,比如我们就可以把数据库中的库存数据转移到Redis缓存中,所有减库存操作都在Redis中进行,然后再通过后台进程把Redis中的用户秒杀请求同步到数据库中。


4.MQ限流降级:限制或者关闭系统的某些非核心功能,从而把有限的资源保留给更核心的业务,当系统容量达到瓶颈时,我们需要通过限制一部分流量来保护系统,客户端限流,好处是可以限制请求的发出,通过减少发出无用请求从而减少对系统的消耗,服务端限流,好处是可以根据服务端的性能设置合理的阈值。

目录
相关文章
|
8月前
|
存储 缓存 NoSQL
Redisson中的RScoredSortedSet的常见使用场景及排行榜例子
通过本文的介绍,我们详细讲解了Redisson中RScoredSortedSet的常见使用场景及其基本操作,并通过具体示例展示了如何实现一个简单的排行榜功能。RScoredSortedSet在需要按分值排序和检索数据的场景中非常有用,希望本文能帮助您更好地理解和应用RScoredSortedSet,构建高效的Redis应用。
417 15
|
前端开发 JavaScript Java
计算机Java项目|基于Spring Boot的宠物咖啡馆平台的设计与实现
计算机Java项目|基于Spring Boot的宠物咖啡馆平台的设计与实现
283 0
|
12月前
|
缓存 前端开发 NoSQL
如何设计一个秒杀系统?
本文详细介绍了秒杀系统的原理与设计方法,包括高性能、一致性、高可用性和可扩展性等方面的要求。文中通过前端和后端的设计方案,探讨了如何实现秒杀系统的高并发处理,例如页面静态化、限流、降级策略及缓存优化等。此外,还分享了实际项目中的库存系统架构设计经验,并提供了面试中如何回答此类问题的建议。
1445 3
|
设计模式 Java 开发者
解密Spring:优雅解决依赖循环的神兵利器
解密Spring:优雅解决依赖循环的神兵利器
1516 57
|
域名解析 监控 安全
在Linux中,什么是守护进程,它们是如何工作的?
在Linux中,什么是守护进程,它们是如何工作的?
|
Ubuntu 前端开发 Linux
Linux 发行版 Debian 宣布支持龙芯 LoongArch 架构
近期,龙芯发布了3A6000桌面处理器,芯片的性能又一次大幅度提升,成为国产芯片的又一里程碑。Debian 社区开发者邮件显示,Debian Ports 添加了对龙芯LoongArch 架构的支持。
699 0
|
消息中间件 缓存 监控
如何设计一个秒杀系统,(高并发高可用分布式集群)
【7月更文挑战第4天】设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。
444 1
|
机器学习/深度学习 JSON 自然语言处理
[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training
[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training
466 1
|
设计模式 Java 开发者
吐血整理!最全Spring设计模式总结
吐血整理!最全Spring设计模式总结
1393 0
吐血整理!最全Spring设计模式总结
|
存储 缓存 安全
面试某大厂,被Go的Channel给吊打了,这次一次性通关channel。
面试某大厂,被Go的Channel给吊打了,这次一次性通关channel。
1533 0