秒杀是电子商务网站常见的一种营销手段:将少量的商品以极低的价格,在特定的时间点开始出售。秒杀对网站的推广有很多好处,也能给消费者带来利益,但是对网站技术却是极大的挑战:网站是为正常运营设计的,而秒杀活动带来的并发访问用户却是平时的百倍甚至上千倍。网站如果为秒杀时的高并发量进行设计部署,就需要比正常运营多得多的服务器,而这些服务器在绝大多数时候都是用不着的,梁飞惊人。所以网站的秒杀业务不能使用正常的网站业务流程,也不能和正常的网站交易业务公用服务器,必须设计部署专门的秒杀系统。
一、秒杀活动的技术挑战
- 对现有网站业务造成冲击
- 高并发下的应用个,数据库负载
- 突然增加的网络和服务器宽带
- 直接下单:秒杀时间一到,就立即下单,在此之前只能查看商品详情。
二、秒杀系统的应对策略
1. 秒杀系统独立部署
为了防止秒杀活动的高并发量访问而拖垮整个网站,使整个网站不必面对蜂拥而来的用户访问,可将秒杀系统独立部署;也可以使用独立的域名,使其与网站完全隔离,即使秒杀系统崩溃了,也不会对网站造成任何的影响。
2. 秒杀商品页面页面静态化
将商品描述、商品参数、成交记录和用户评价全部写入一个静态页面,用户请求不需要经过应用服务器的业务逻辑处理,也不需要访问数据库。所以秒杀商品服务不需要部署动态的Web服务器和数据库服务器。
3. 租借秒杀活动网络宽带
因为秒杀新增的网络宽带,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口宽带。
4. 动态生成随机下单页面URL
为了避免用户直接访问下单页面的URL,需要将URL动态化,即使秒杀系统的开发者也无法在秒杀活动之前访问下单页面的URL。办法是在下单页面的URL加入由服务器端生成的随机数作为参数,在秒杀活动开始的时候才能得到。
三、秒杀系统架构设计
秒杀系统是为了秒杀而设计的,用户注重的是如何快速刷新界面,并且在第一时间抢先进入秒杀界面秒杀成功,而商品详情评价等并不是用户最注重的,因此秒杀系统的界面应该设计的尽可能简单。
1. 如何控制秒杀商品页面购买按钮的点亮
解决办法:使用JavaScript脚本控制。在秒杀商品静态页面中加入一个JavaScript文件引用,该JavaScript文件中加入秒杀是否开始的标志和下单页面URL的随机数参数,当秒杀开始的时候生成一个新的JavaScript文件冰杯用户浏览器加赞,控制秒杀商品页面的展示。
2. 如何只允许第一个提交的订单被发送到订单子系统
为了减轻下单页面服务器的敷在压力,可以控制进入下单页面的入口,只有少数用户能进入下单页面,其他用户直接进入秒杀结束的页面。如图:
参考自:《大型网站技术架构.核心原理与案例分析》
最近发现 心稍微一急 或者心里惦记个啥事儿,就头疼发烧…(做鬼脸的表情)say byebye…