- 秒杀系统介绍
网上竞拍的一种新方式。所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。---摘自百度百科
12306抢票就是一个秒杀案例 分段
秒杀抢购特征:短时间并发量非常大、高并发 - 秒杀常见的方式
a、一元秒杀
此种秒杀一般都是限量1件或者几件,秒杀价格绝对低到令人无法相信也无法抗拒而不去参与,此种秒杀一般在开始之后1-3秒之内就会秒杀完毕,抢购速度相当之快,有意参与此种秒杀的秒客电脑配置一定要好,而且网速上一定要比其它的秒客占据更大的优势,才能够提高秒中概率;
b、低价限量秒杀
此种形式也可以理解为低折扣秒杀,限量不限时,秒完即止,此种秒杀形式商家提供一定数量的商品,直至秒完即止,对于秒客来说在时间的把握上要求没有那么苛刻,能够秒中的概率相对来说是很大的;
小米手机、12306
c、低价限时限量秒杀
此种形式也可以理解为低折扣秒杀,限时限量,在规定的时间内,无论商品是否秒杀完毕,该场秒杀都会结束,对于秒客来说在时间的把握上要求没有那么苛刻,但是下手一定要及时,过了规定的秒杀时间就不能够参与,秒中的概率一般都会很大,但是时间上一定要把握好;
- 秒杀抢购实现遇到的问题
秒杀本质也属于高并发优化方案
- 前端层面
a.突然增加的网络及服务器带宽
b.用户实现重复提交
解决:
在一个网站中,大部分的服务器请求带宽资源都被静态资源占用了,静态资源包含(CSS/IMG/JS/MP4)等,Http协议接口占用带宽资源非常小。
想让用户的请求及时的发送到服务器端上,服务器带宽一定足够,所以这时候网站一定要实现动静分离架构模式,将静态资源与动态资源分开,静态资源放入到CDN服务器端上。
1M宽带等于多少Kbps? 等于128KB/S ,如果加载一个网页含静态资源需要640/KB ,那么就需要5秒时间加载整个网页。
静态资源优化方案
1.1.js/css/img实现压缩减少带宽的传输、将静态资源放入第三方资源服务器中(七牛云、阿里ONS)等。
1.2.商品详情页面使用Nginx+Lua+OpenResty实现商品详情页面的优化
1.3.提交后按钮disabled,禁止用户重复提交 - 业务层面
a.如何防止商品超卖问题
b.服务器单台机器承受不了
c.如何限制用户操作频率 --redis
d.如何防止用户作弊行为
e.如何减轻数据库压力 --基于mq+库存令牌桶实现
f.秒杀商品多,分时段秒杀--限流
- 流程图
- 总结
步骤实现方案: 1. 后台系统在发布秒杀商品的时候,给对应的商品添加库存token 秒杀抢购 前端: 1. 使用动静分离、将静态资源存放到第三方文件服务器中实现cdn加速,目的减轻秒杀抢购带宽 2. 当用户点击秒杀按钮的时候,应该将按钮disabled 防止重复提交 3. 使用复杂的图形验证码防止机器模拟 4. 秒杀详情页面,使用定时器根据用户信息查询秒杀结果 5. 商品的详情页面使用nginx+lua+openresty 实现静态化页面 网关: 1. ratelimter、nginx、hystrix、redis实现限流 令牌痛+漏铜算法 对用户秒杀请求实现限流和服务保护。 2. 用户黑名单和白名单拦截 秒杀接口: 1. 服务降级级、隔离、熔断 2. 从redis中获取秒杀的令牌(能够获取到令牌就能够秒杀成功,否则就秒杀失败!) 3. 异步使用MQ执行修改库存操作 4. 提供一个根据用户信息查询秒杀结果接口 项目部署点: Nginx+lvs 实现服务高可用和集群 其他点: 分时段抢购 具体例子:现在有100个商品同时秒杀抢购,每个商品库存为100个? 基于mq+库存令牌桶 100*100=10000 数据库执行修改库存操作压力还是非常大? 最靠谱的访问:12306 分时段秒杀 中午 下午