秒杀系统设计优化(代码片段)

fengff fengff     2023-02-18     348

关键词:

https://www.cnblogs.com/luyucheng/p/6340758.html

12306抢票,票是有限的,库存一份,瞬时流量非常多,都读相同的库存,读写冲突,锁非常严重;
小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万;
这是秒杀业务难的地方。那我们怎么优化秒杀系统呢?

一、难点

(1)高并发
用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成负载压力。
(2)超卖
由于库存并发更新的问题,导致在实际库存已经不足的情况下,库存依然在减,导致卖家的商品卖得件数超过秒杀的预期。

二、架构

常见的站点架构基本是这样的:
(1)浏览器端,最上层,会执行到一些JS代码
(2)站点层,这一层会访问后端数据,拼HTML页面返回给浏览器
(3)服务层,向上游屏蔽底层数据细节,提供数据访问
(4)数据层,最终的库存是存在这里的

三、思路

(1)将请求尽量拦截在上游:传统秒杀系统之所以挂,请求都压倒了后端数据层,数据库读写锁冲突严重,导致响应慢,下单基本不能成功
(2)利用缓存:这是一个典型的读多些少的应用场景,非常适合使用缓存

四、解决方案

(1)浏览器层请求拦截
1.产品层面,用户点击“查询”或“购票”后,按钮置灰,禁止用户重复提交请求
2.js层面,限制用户在n秒之内只能提交一次请求
(2)站点层请求拦截与页面缓存
1.静态化,将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素
2.限频率,同一个UID,限制访问频率,做页面缓存,n秒内到达站点层的请求,均返回同一页面
(3)服务层请求拦截与数据缓存
1.对于写请求,将所有写请求在缓存(Redis或Memcached)中,做请求单队列排队,每次只透过有限的写请求异步写入到数据层,如果均成功再放下一批,如果库存不够则队列里的写请求全部返回“已售完”
2.对于读请求,用Redis或Memcached
缓存写性能和读性能都远高于MySQL,只有非常少的写和读缓存的请求会透到数据层去
(4)数据层
1.尝试扣减库存,扣减库存成功才会进行下单逻辑(由于MySQL事务的特性,不可能完全避免超卖)

UPDATE table_name SET n=n-1 WHERE n>1;

2.扣减库存后进行检查,保证减完不能等于负数
查看更多:
开发一个微信小程序实例教程
HTTP协议整理
PHP安全之Web攻击
MySQL优化
Linux下常见的IO模型
参考资料:
https://my.oschina.net/xianggao/blog/524943
http://www.infoq.com/cn/articles/flash-deal-architecture-optimization































秒杀系统设计优化(代码片段)

...相同的库存,读写冲突,锁非常严重;小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万;这是秒杀业务难的地方。那我们怎么优化秒杀系统呢?一、难点(1)高并发用户在秒杀开始前,通过不... 查看详情

秒杀系统优化方案(下)吐血整理(代码片段)

接上篇秒杀系统优化方案(上)吐血整理3.深入优化设计3.1  初始方案问题分析在前面针对数据库的优化中,由于数据库行级锁存在竞争造成大量的串行阻塞,我们使用了存储过程(或者触发器)等技术绑定操作,整个事... 查看详情

秒杀系统实现高并发的优化(代码片段)

一:先上代码,看着代码学习效率更好:https://github.com/3218870799/Seckill二:高并发问题就是指在同一个时间点,有大量用户同时访问URL地址,比如淘宝双11都会产生高并发。三:高并发带来的后果服务端??导致站点服务器、DB服务... 查看详情

秒杀系统-高并发的优化(代码片段)

秒杀系统面临着如下问题:(1)无法使用cdn缓存,因为系统逻辑不可能放在cdn中。(2)后端缓存困难:库存问题,因为运用到了mysql事务操作(设置联合主键)。(3)一行数据竞争:热点商品,因为多个用户同时对数据库某条数据... 查看详情

谈如何设计一个秒杀系统(重点)(代码片段)

概述并发读写秒杀要解决的主要问题是:并发读与并发写。并发读的优化理念是尽量减少用户到服务端来读数据,或者让他们读更少的数据;并发写的处理原则一样,要求我们在数据库层面独立出一个库,做特殊的处理。其次,... 查看详情

秒杀系统——秒杀功能设计理念(代码片段)

...观锁分布式锁消息队列消息队列:架构2从电商系统到秒杀系统流量限制热门资源隔离最终:架构3总结1.秒杀系统特点2.秒杀系统问题3.秒杀系统主要方案4.其他问题电商系统下单功能概述现在的电商系统功能繁多, 查看详情

秒杀系统——秒杀功能设计理念(代码片段)

...观锁分布式锁消息队列消息队列:架构2从电商系统到秒杀系统流量限制热门资源隔离最终:架构3总结1.秒杀系统特点2.秒杀系统问题3.秒杀系统主要方案4.其他问题电商系统下单功能概述现在的电商系统功能繁多, 查看详情

秒杀/抢购系统设计优化

...相同的库存,读写冲突,锁非常严重;小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万;这是秒杀业务难的地方。那我们怎么优化秒杀系统呢?一、难点(1)高并发用户在秒杀开始前,通过不... 查看详情

电商 秒杀系统 设计思路和实现方法(代码片段)

电商 秒杀系统 设计思路和实现方法2017年05月26日00:06:35阅读数:36621秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格... 查看详情

解密秒杀系统架构,不是所有的系统都能做秒杀!(代码片段)

摘要:教你如何设计一个秒杀系统架构:从电商系统架构到秒杀系统、从高并发“黑科技”与致胜奇招到服务器硬件优化,全方位立体掌握秒杀系统架构!!本文分享自华为云社区《实践出真知:全网最强... 查看详情

一个秒杀系统的设计思考,超详细!(代码片段)

前言秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是12306抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性... 查看详情

秒杀系统设计(代码片段)

高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(... 查看详情

第二十篇商城系统-秒杀功能设计与实现(代码片段)

秒杀服务一、商品上架秒杀活动的结构图通过定时任务触发:/***定时上架秒杀商品信息*/@Slf4j@ComponentpublicclassSeckillSkuSchedule@AutowiredSeckillServiceseckillService;@AutowiredRedissonClientredissonClient;/****/@ 查看详情

第二十篇商城系统-秒杀功能设计与实现(代码片段)

秒杀服务一、商品上架秒杀活动的结构图通过定时任务触发:/***定时上架秒杀商品信息*/@Slf4j@ComponentpublicclassSeckillSkuSchedule@AutowiredSeckillServiceseckillService;@AutowiredRedissonClientredissonClient;/****/@ 查看详情

如何设计一个秒杀系统(代码片段)

什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大... 查看详情

针对秒杀项目做的一些优化(代码片段)

秒杀业务逻辑数据库的设计一些全局配置JSR303参数验证(手机号)登录分布式Session问题?秒杀整体流程优化UserArgumentResolver和AccessInterceptor缓存优化Redis缓存中缓存了哪些内容Redis的封装页面缓存对象缓存客户端的缓存... 查看详情

十万级低成本超详细的秒杀高并发设计,快收藏起来(代码片段)

秒杀系统相信很多人见过,比如京东或者淘宝的秒杀,小米手机的秒杀,那么秒杀系统的后台是如何实现的呢?我们如何设计一个秒杀系统呢?对于秒杀系统应该考虑哪些问题?如何设计出健壮的秒杀系统... 查看详情

八个维度讲解秒杀系统架构分析与实战(代码片段)

..."书",获取后台回复“k8s”,可领取k8s资料1秒杀业务分析2秒杀技术挑战3秒杀架构原则4秒杀架构设计4.1前端层设计4.2站点层设计4.4数据库设计5大并发带来的挑战5.1请求接口的合理设计5.2高并发的挑战:一定要“... 查看详情