如何实现“秒杀”系统

昨晚和一公司工做几年的同事闲扯了一些程序人生和技术问题。感受本身目前的经验仍是太少太少了,看的书也不是太多,惭愧啊。web

就好比同事问了我一个如何作一个咱们很常见的“秒杀”系统,我当时一拍脑门直接回答说加个排它锁不就好了么,可是晚上回到家里google了一番以后,深深的感到脸红啊。一个看似简单的“秒杀”系统,里面涉及到的东西也着实很多,而不只仅是一个简单的加锁就好了的。我大体整理了一下我想到的和google到的须要注意的地方,固然有不少的不足,同时也但愿大神们可以指点一点:数据库

1) 对现有网站业务的冲击浏览器

由于秒杀活动只是网站营销的一个附加活动,这个活动具备时间短,并发访问量大的特色,若是和网站原有应用部署在一块儿,必然会对现有业务形成冲击,稍有不慎可能致使整个网站瘫痪。缓存

2) 高并发状况以及数据库的负载服务器

用户在秒杀开始前,经过不停的刷新浏览器页面以保证不会错过秒杀,这些请求若是按照通常的网站应用架构,访问应用服务器、链接数据库,会对应用服务器、数据库服务器形成极大的负载压力。网络

3) 忽然增长的网络和服务器带宽架构

假设商品页面大小200K(主要是商品图片大小),那么须要的网络和服务器带宽是2G(200K×10,000),这些网络带宽是由于秒杀活动新增的,超过网站平时使用的带宽。并发

4) 直接下单高并发

秒杀的游戏规则是到了秒杀时间才能开始对商品下单购买,在此时间点以前,只能浏览商品信息,不能下单。而下单页面也是一个普通的URL,若是获得这个URL,不用等到秒杀开始就能够下单了。网站

5) 防止机器秒杀

防止网上的一些“秒杀器”

针对上面的5个问题,对应的策略以下:

1)  秒杀系统独立部署

为了不由于秒杀活动的高并发访问而拖垮整个网站,使整个网站没必要面对蜂拥而来的用户访问,将秒杀系统独立部署,若是须要,还可使用独立的域名,以和网站彻底隔离,即便秒杀系统崩溃了,也不会对网站形成任何影响。

2)  秒杀商品页面静态化

秒杀商品页面从新设计,不使用网站原来的商品详情页面,页面内容静态化:商品描述,商品参数,成交记录,用户评价所有写入一个静态页面,用户请求不须要通过应用服务器的业务逻辑处理,也不须要访问数据库。因此秒杀商品服务不须要部署动态的Web服务器、数据库服务器。

3)  租借秒杀活动网络带宽

对于由于秒杀新增的网络带宽,必须和运营商从新购买或者租借。为了减轻网站服务器的压力,须要将秒杀商品页面缓存在CDN,一样须要和CDN服务商临时租借新增的出口带宽。

4)  动态生成随机下单页面URL

为了不用户直接访问下单页面URL,须要将该URL动态化,即便秒杀系统的开发者也没法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入由服务器端生成的随机数做为参数,在秒杀开始的时候才能获得。

5)  防止秒杀器感受很难,

由于彷佛老是有办法能够跳过设置的“障碍”。真正作到防止,仅靠webserver怕是很难防范,通常的作法都是增长一些人为的“障碍”,好比:

注册时有必定的门槛,像皮皮书屋同样,经过输入程序执行结果做为验证 –à以前批量手工注册

参加秒杀的积分或者等级策略 -à 挂太阳,就如同你当你为了升级QQ等级的时候一直挂着QQ同样。

验证码,阻止自动化操做 -à 能够图像识别

ip阻止 –à 可是ip能够伪造,能够代理

相关文章
相关标签/搜索