阿里双十一秒杀系统架构设计,有哪些技术关键点?

马上要到双11了,就来谈谈如何设计一个秒杀系统架构

技术挑战

1. 对原有业务形成冲击

秒杀活动只是网站营销的一个附加活动,特点是:时间短、并发访问量大,如果和网站原有应用部署在一起,必然会对现有业务造成冲击。

解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离。

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

用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问

应用服务器、连接数据库,

会对应用服务器和数据库服务器造成负载压力。

解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过

应用服务

3. 突然增大的服务器和网络带宽

假设商品页面大小200K,10000个请求的带宽就是2G。

解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,

需要将秒杀商品页面缓存到CDN

4. 防止秒杀前下单

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

解决方案:为了避免用户直接访问下单页面URL,需要将改URL动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。

应对策略

1. 独立部署

和原有业务部署在不同服务器,防止高并发拖垮整个网站

2. 页面静态化

将商品详情、描述静态化到页面

3. 租借秒杀网络带宽

向运营商租借带宽

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

无法在秒杀前访问下单页面的URL:加入服务器端生成的随机数作为参数,在秒杀开始前才能得到

架构设计

1. 控制秒杀购买页面的点亮

购买按钮只有在活动开始的时候才能点亮,在此之前是灰色的。如果是动态页面,可以很容易解决这个问题,但为了减轻服务器端负载压力,

更好的利用CDN、反向代理等性能优化手段,

该页面被设计为静态页面,缓存在CDN、反向代理服务器上,甚至用户浏览器上。秒杀开始时,用户刷新页面,请求根本不会到达应用服务器。

解决方案:秒杀商品页面加入一个javascript引用,该javascript中加入秒杀是否开始的标志和下单页面URL的随机数参数,该javascript使用随机版本号,不可被浏览器缓存

当秒杀开始时,生成一个新的javascript文件并被用户浏览器加载

2. 允许第一个订单提交

秒杀开始,由于最终能够成功秒杀到商品的用户只有一个,因此需要在用户提交订单时,检查是否已经有订单提交。

解决方案:为了减轻下单页面服务器的负载压力,可以控制进入下单页面入口,只有先提交的少数用户可进入,后边的用户直接进入秒杀结束页面

下单服务器检查本机已处理的下单请求数目

*如果超过10条,直接返回已结束页面给用户;

*如果未超过10条,则用户可进入填写订单及确认页面;

检查全局已提交订单数目

*已超过秒杀商品总数,返回已结束页面给用户;

*未超过秒杀商品总数,提交到子订单系统。

这样就大大地减少了数据库的负载压力。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

session和cookies会话机制详解session management会话管理的原理servlet&jsp中的session会话管理机制cookie的更多用处

web请求与响应基于http,而http是无状态协议。所以我们为了跨越多个请求保留用户的状态,需要利用某种工具帮助我们记录与识别每一次请求及请求的其他信息。举个...

871
来自专栏企鹅号快讯

浅谈几种SLB技术的实现

今天小普和大家分享下,在最近的学习过程中,关于几个负载均衡技术的理解,以及几个实现的原理和关键点,希望对各位读者朋友有收获。 1 http重定向协议实现负载均衡...

1.1K5
来自专栏大魏分享(微信公众号:david-share)

VMware软件定义数据中心分析工具介绍----第三终结篇

在本文连载的第一篇中,我向大家介绍了vROps的基本架构、vROps的指标含义,以及如何自定义告警。第二篇中,介绍了如何自定义仪表盘。在本篇中,我将介绍如何自定...

3858
来自专栏FreeBuf

移动APP安全在渗透测试中的应用

这篇文章从去年很早就想写,一直没时间,刚好过段时间有沙龙是讲这方面的东西,整理了下就有了下文。 以往安全爱好者研究的往往是app的本地安全,比如远控、应用破解、...

3747
来自专栏Golang语言社区

go实现一个简单的游戏服务器框架(lotou)起源

https://github.com/sydnash/lotou 目前代码比较粗糙,欢迎各种改进建议。 最近一直想学习一些关于游戏服务器的知识,显示看了一下云...

34212
来自专栏开源优测

移动测试Appium工作原理

移动测试Appium工作原理 介绍 Appium是一个开源工具,用于自动化iOS、Android设备和Windows桌面平台上的原生、移动Web和混合应用。 "...

4927
来自专栏知晓程序

小程序服务器崩溃了怎么办?| 小程序问答 #38

不用担心,知晓程序(微信号 zxcx0101)今天就来教你,在小程序出现意外状况时,我们可以做些什么。

942
来自专栏游戏杂谈

nginx的反向代理缓存

假设有两台物理机,他们分属于不同的域名,以webgame的游戏运营商和开发商为例,运营商需要获取游戏中的排行数据,开发商为了过多对游戏服务器的请求,会在发起请求...

3632
来自专栏木可大大

【福利】百度云2018最新限速破解软件

我想大家都曾为百度云的龟速而咬牙切齿,本期就为大家带来百度云2018最新限速破解软件。

5139
来自专栏知晓程序

开发 | 只需一步!教你如何轻松部署小程序后端

利用它,你可以在「微信 web 开发者工具」中,直接完成后端代码编写、腾讯云部署等一系列操作。

5454

扫码关注云+社区

领取腾讯云代金券