高并发商品秒杀系统的架构设计

高并发商品秒杀系统的架构设计

1、前言
  秒杀是电子商务网站常见的一种营销手段,将少量的商品以极低的价格,在特定的时间点开始出售。比如一元钱的手机,五元钱的电脑,十元钱的汽车等。因为商品价格诱人,而且数量有限,所以很多人都比较感兴趣,在秒杀活动开始之前涌入网站,等到秒杀活动开始的一瞬间,点下购买按钮,抢购商品。这些商品因为在活动一开始就被卖光了,所以被称作秒杀。
  网站通过这种营销手段,制造某种轰动效应,从而达到网站推广的目的,很多电子商务网站已经把秒杀活动常态化了,经常性的举行秒杀活动。
  秒杀活动虽然有很多好处,却对网站的技术带来极大的挑战,秒杀活动带来的并发访问用户是平时的数百倍甚至上千倍。这就要求必须对秒杀系统进行特殊的架构设计和独立部署。

2、秒杀系统的技术点
1.页面静态化
2.nginx缓存
3.cdn缓存
4.redis缓存
5.网关限流
6.js文件服务器和定时任务服务器

3、百万级并发秒杀系统设计
1.在前端方面,可以把秒杀商品详情页静态化,然后缓存在nginx和cdn中,这样可以大大减少后端服务器访问的压力;至于秒杀商品信息的更新,我们可以通过后端代码操作更新nginx中的缓存,可以通过刷新和预热功能更新cdn中的缓存;至于怎么知道什么时候购买按钮可以点击,可以在页面每一次加载的时候,都加载一个很小的js文件,js文件中存储着购买按钮是否可以点击的标识和可跳转下单页面随机数,可以通过增加一台定时任务服务器和一台或多台js服务器,js服务器负责存储这个js文件,秒杀开始时,后端定时任务服务器生成新的js文件,并把文件推送到js服务器中,把随机参数存到redis缓存中。
2.在防护方面,我们可以提前做好压测和网关限流,网关限流可以通过api分组进行限流,不同的请求可以根据实际需求设置不同的QPS阈值,例如秒杀商品详情页可以设置50000或更高阈值,确认订单页面可以设置20000或更高,提交订单可以设置2000或更高,流控方式设置为匀速排队,并发超过QPS阈值后匀速排队通过。
3.在后端方面,为了不影响到网站其他的业务,秒杀系统我们独立部署,可以根据实际需要部署一个多台应用服务器的集群;另外我们可以把秒杀商品信息放到redis缓存中(注意防止缓存秒杀商品过期或恶意请求,导致缓存击穿),查询商品信息可以从缓存中查询。
4.秒杀开始时,用户点击购买按钮,请求到后端,查询缓存中的商品信息,判断库存和校验随机参数,如果库存还有并且随机参数正确,则跳转到下单页面,如果库存已经为0,则返回秒杀已结束页面;在用户点击下单时,请求到后端,这里需要加分布式锁,直接查数据库获取商品库存信息(因为在下单页面已经做了20000QPS的限流,预计只有40000左右的请求可以到达下单页面),同时判断库存和开始秒杀时间,库存若为0则返回秒杀已经结束页面,若秒杀时间没到,则返回秒杀未开始页面,若还有库存,则更改数据库中的库存并同步到redis缓存中,接着把订单信息发送到订单系统,返回秒杀成功。
5.在硬件方面,需要注意负载均衡服务器、网关服务器、后端服务器、js服务器等服务器的性能和带宽问题。

4、秒杀商品过程简图如下
在这里插入图片描述

5、总结
  秒杀是对网站架构的极大考验,在难以预计和控制的高并发访问的冲击下,稍有不慎,系统就会被用户秒杀,导致整个系统崩溃,活动失败,构成重大事故。
  对于秒杀系统架构设计,架构师应该根据特定应用场景的预计并发量,对秒杀系统的架构进行适当的调整,能够满足秒杀需求即可。而不是千篇一律,追求最高的性能设计,造成资源浪费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值