电商秒杀系统架构设计案例分析

技术挑战:

1.  对现有网站业务造成冲击。

        秒杀活动是一种营销手段,活动时间短,并发访问量大,如果和网站原有的应用部署在一起,必然会对现有业务造成冲击,还有可能导致整个网站的瘫痪。

2.  高并发下的应用和数据库负载

        秒杀活动开始前,用户会通过浏览器不停的刷新以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器,连接数据库服务器,会对应用和数据库造成极大的负载压力。

3.  突破增加的网络及服务器带宽

        假设商品页面大小200k,网站的带宽就是并发数乘以200k,这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。

4.  直接下单

        秒杀的规则是秒杀时间到了才能开始对商品进行下单购买,在此时间点之前,只能浏览商品信息,不能下单。而下单页面也是一个普通的 URL,如果得到这个 URL,不用等到秒杀开始就可以下单了。

应对策略:

1.   秒杀系统独立部署

        为了避免因为秒杀活动并发访问而拖垮整个网站,使整个网站不必面对蜂拥而至的大量用户访问,可以将秒杀系统独立部署,独立的负载均衡,WEB服务器,应用服务器,数据库服务器等。甚至可以使用独立的域名,使其与其他网站完全隔离,即使秒杀系统崩溃,也不会对其他网站造成任何影响。

  2.   秒杀商品页面静态化

        重新设计秒杀商品页面,不要使用网购平台原来的商品详情页面,页面整体内容全部静态化,将商品描述,商品参数,成交记录和用户评价等全部写入一个静态页面,这个页面需要通过后台管理功能提前自动生成,还需要将运营人员维护的秒杀价格自动写入这个静态页面,并将秒杀商品数量写入缓存服务器。

        整个秒杀详情页全部静态化后,用户请求就不需要进入应用服务器并进行业务逻辑处理,也不需要访问数据库。所以秒杀商品服务不需要部署动态WEB服务器和数据库服务器来解决商品详情页需求。

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

        因为秒杀新增的网络带宽,必须和运营商重新购买或租借。为了减轻网站源站入口的带宽压力和服务器压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新的出口带宽。

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

        为了避免用户直接访问下单页面URL,需要将该URL动态化,即使秒杀系统的开发人员也无法在秒杀开始之前访问到下单页面的URL,办法是在下单页面的URL中加入由服务端生成的随机数作为参数,在秒杀开始前才可以得到。

架构设计:

      秒杀抢购系统的参与用户关心的是快速的刷新页面信息,在秒杀开始时抢先进入下单页面,对商品详情的关注度较低,因此秒杀系统的页面设计应该尽量简单简洁。

      商品页面的购买按钮只有在秒杀活动开始时才可以变亮,并可以点击,在此之前或秒杀商品销售光之后,该按钮都应该是灰色的,且不可点击。

     订单确认页面也应该简洁,抢购数量默认值(可修改为系统设定的最大值),送货地址默认值(可修改),只有系统限定数量的订单会发送给网站的订单子系统,其余用户提交订单后只能看到描述结束页面(商品已抢购结束)。

1.  如何控制秒杀商品页面购买按钮的点亮

购买按钮只有在秒杀活动开始的时候才点亮,之前是灰色不可点击状态。如果该页面设计为是后端服务器查询数据库动态生成,并构造响应页面输出,当然是可以的。但为了减轻后端服务器负载压力,更好的利用CDN、反向代理等性能优化手段,该页面需要设计为静态页面,缓存在CDN、反向代理服务器上,甚至是用户浏览器上。秒杀开始之前,用户刷新页面,请求根本不会达到后端应用服务器。

        解决方案:  使用js脚本控制,在秒杀商品静态页面中加入一个js文件的引用,在该js文件中加入秒杀是否开始的标记和下单页面URL的随机数参数,当秒杀开始的时候,生成一个新的js文件并被用户浏览器加载,控制秒杀商品页面的展示。这个js文件使用随机版本号,这种情况下就不会被浏览器,CDN和反向代理服务器缓存。


这个 js文件非常小,即使每次刷新浏览器都会重新下载这个js文件,也不会对js服务器集群和网络带来太大的压力。

2.  如何控制只允许制定数量的订单才可以被发送到订单子系统(防止超卖)

由于需要限制最终成功抢购或秒杀的商品是系统设定的限量数,因此在用户提交订单时,需要检查已经提交成功的订单数,为了减轻下单页面服务器的负载夜里,可以控制下单页面的入口,只有少数用户能进入下单页面,其他用户直接进入秒杀结束页面。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容