大型网站技术架构-核心原理与案例分析
作者:李智慧
申明:文章版权归作者所有,若有侵权,请联系删除

秒杀是电子商务网站常见的一种营销手段:将少量商品(通常只有一件)以极低的价格,在特定的时间点开始出售。比如一元钱的手机,五元钱的电脑,十 元钱的汽车等。

因为商品价格诱人,而且数量有限,所以很多人趋之若鹜,在秒杀活动开始前涌入网站,等到秒杀活动开始的一-瞬间,点下购买按钮(在此之前购买按钮为灰色,不可以点击),抢购商品。这些商品因为在活动开始的一秒内就被卖光了,所以被称作秒杀。

网站通过这种营销手段,制造某种轰动效应,从而达到网站推广的目的。而最终能够被幸运之神眷顾,秒到商品的只有一两个人而已。很多电子商务网站已经把秒杀活动常态化了,经常性地举行秒杀活动。

秒杀虽然对网站推广有很多好处,也能给消费者带来利益( 虽然是很少的几个人),但是对网站技术却是极大的挑战:网站是为正常运营设计的,而秒杀活动带来的并发访问用户却是平时的数百倍甚至上千倍。网站如果为秒杀时的最高并发访问量进行设计部署,就需要比正常运营多得多的服务器,而这些服务器在绝大部分时候都是用不着的,浪费惊人。所以网站的秒杀业务不能使用正常的网站业务流程,也不能和正常的网站交易业务共用服务器,必须设计部署专门的秒杀系统,进行专门应对。

12.1 秒杀活动的技术挑战

假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就是说最大并发请求数是10,000,秒杀系统需要面对的技术挑战有如下几点。

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

秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。

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

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

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

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

4.直接下单

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

12.2 秒杀系统的应对策略

为了应对上述挑战,秒杀系统的应对策略有如下几点。

1.秒杀系统独立部署

为了避免因为秒杀活动的高并发访问而拖垮整个网站,使整个网站不必面对蜂拥而来的用户访问,可将秒杀系统独立部署;如果需要,还可以使用独立的域名,使其与网站完全隔离,即使秒杀系统崩溃了,也不会对网站造成任何影响。

2.秒杀商品页面静态化

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

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

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

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

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

12.3 秒杀系统架构设计

秒杀系统为秒杀而设计,不同于一般的网购行为,参与秒杀活动的用户更关心地是如何能快速刷新商品页面,在秒杀开始的时候抢先进入下单页面,而不是商品详情等用户体验细节,因此秒杀系统的页面设计应尽可能简单。如图12.1所示。商品页面中的购买按钮只有在秒杀活动开始的时候才变亮,在此之前及秒杀商品卖出后,该按钮都是灰色的,不可以点击。

下单表单也尽可能简单,购买数量只能是一一个且不可以修改,送货地址和付款方式都使用用户默认设置,没有默认也可以不填,允许等订单提交后修改;只有第一个提交的订单发送给网站的订单子系统,其余用户提交订单后只能看到秒杀结束页面,如图12.2所示。

除了上面提到的秒杀系统的技术挑战及应对策略,还有一些其他问题需要处理。

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

购买按钮只有在秒杀活动开始的时候才能点亮,在此之前是灰色的。如果该页面是动态生成的,当然可以在服务器端构造响应页面输出,控制该按钮是灰色还是点亮,但是为了减轻服务器端负载压力,更好地利用CDN、反向代理等性能优化手段,该页面被设计为静态页面,缓存在CDN、反向代理服务器上,甚至用户浏览器上。秒杀开始时,用户刷新页面,请求根本不会到达应用服务器。解决办法是使用JavaScript 脚本控制,在秒杀商品静态页面中加入一个JavaScript文件引用,该JavaScript文件中加入秒杀是否开始的标志和下单页面URL的随机数参数,当秒杀开始的时候生成一个 新的JavaScript文件并被用户浏览器加载, 控制秒杀商品页面的展示。这个JavaScript文件使用随机版本号,并且不被浏览器、CDN和反向代理服务器缓存。如图12.3所示。

这个JavaScript文件非常小,即使每次浏览器刷新都访问JavaScript文件服务器也不会对服务器集群和网络带宽造成太大压力。

2.如何只允许第一个提交的订单被发送到订单子系统

由于最终能够成功秒杀到商品的用户只有一个,因此需要在用户提交订单时,检查是否已经有订单提交。事实上,由于最终能够成功提交订单的用户只有一个,为了减轻下单页面服务器的负载压力,可以控制进入下单页面的入口,只有少数用户能进入下单页面,其他用户直接进入秒杀结束页面。假设下单服务器集群有10台服务器,每台服务器只接受最多10个下单请求,如图12.4所示。秒杀系统的整体架构如图12.5所示。

12.4 小结

秒杀是对网站架构的极大考验,在难以预计和控制的高并发访问的冲击下,稍有不慎,系统就会被用户秒杀,导致整个系统宕机,活动失败,构成重大事故。因此在遵循秒杀活动游戏规则的基础上,为了保证系统的安全,保持适度的公平公正即可。即使系统出了故障,也不应该给用户显示出错页面,而是显示秒杀活动结束页面,避免不必要的困扰。除了上面提到的一-些针对秒杀活动进行的架构设计,在本书第10章中提到的许多性能优化设计都可以用于秒杀系统的优化。出错页面,而是显示秒杀活动结束页面,避免不必要的困扰。除了上面提到的一-些针对秒杀活动进行的架构设计,在本书第10章中提到的许多性能优化设计都可以用于秒杀系统的优化。

网购秒杀系统架构设计案例分析相关推荐

  1. 网购秒杀系统架构设计案例分析——《大型网站技术架构》笔记

    一.核心思想: 网站秒杀时的并发比正常运营时多的多,所以网站的秒杀业务不能使用正常的网站业务流程,也不能和正常的网站交易业务共用服务器(否则造成巨大浪费),必须设计部署专门的秒杀系统,进行专门应对 二 ...

  2. 【架构设计】————12、网购秒杀系统架构设计案例分析

    12.1 秒杀活动的技术挑战 12.2. 秒杀系统的应对策略 参见:<网站设计架构:核心原理与案例分析>

  3. 第十二章 网购秒杀系统架构设计案例分析(待续)

    ······ 转载于:https://www.cnblogs.com/hzzjj/p/9825804.html

  4. 案例3:网购秒杀系统架构设计案例

    秒杀系统应对策略: 1.秒杀系统独立部署 2.秒杀商品页面静态化 3.租借秒杀活动网络带宽 4.动态生成随机下单页面URL 秒杀系统架构设计 1.秒杀系统页面设计尽可能简单 2.购买按钮只有活动开始时 ...

  5. 系统架构设计——网购秒杀系统架构设计

    网购秒杀系统架构设计 秒杀是电子商务网站常见的一种营销手段:将少量商品(通常只有一件)以极低的价格,在特定的时间点开始出售.比如一元钱的手机,五元钱的电脑,十元钱的汽车等.因为商品价格诱人,而且数量有 ...

  6. 网购秒杀系统架构设计

      秒杀是电子商务网站常见的一种营销手段:将少量的商品以极低的价格,在特定的时间点开始出售.秒杀对网站的推广有很多好处,也能给消费者带来利益,但是对网站技术却是极大的挑战:网站是为正常运营设计的,而秒 ...

  7. 网购秒杀系统架构设计 1

    本文是「大型网站技术架构 - 核心原理与案例分析」 第 12 章的学习笔记,感兴趣的朋友可以去购买 目录: 秒杀活动的技术挑战 秒杀活动的应对策略 秒杀系统架构设计 一.秒杀活动的技术挑战 场景: 某 ...

  8. 秒杀系统架构设计与分析

    秒杀系统架构分析与实战 2016-01-18陶邦仁Qunar技术沙龙 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒 ...

  9. 【软考系统架构设计师】2017下系统架构师案例分析历年真题

    [软考系统架构设计师]2017下系统架构师案例分析历年真题 2017下系统架构师案例分析历年真题 [软考系统架构设计师]2017下系统架构师案例分析历年真题 2017下系统架构师案例分析试题一(系统架 ...

最新文章

  1. 路由器简介一:路由器概念、基本结构及分类
  2. bootstrap 模态框满屏_如何设置Bootstrap模态框modal的高度和宽度?
  3. 1132:石头剪子布
  4. sql字符串拼接_Mybatis的SqlSession执行sql过程
  5. 计算机多文件管理,电脑文件管理几条小技巧
  6. linux trac svn,Ubuntu安装Trac SVN的方法及命令
  7. shell命令xargs
  8. java jdk7 环境变量设置_Java JDK7在Windows 8下的环境变量配置
  9. MATLAB学习笔记之chirp信号的产生
  10. CADD课程学习(7)-- 模拟靶点和小分子相互作用 (半柔性对接 AutoDock)
  11. RainMeter — 使用 NotePad ++ 编辑皮肤文件
  12. 使用FFmpeg截取视频封面图片(完整例子)
  13. 无法安装冰点还原_系统还原软件介绍与功能
  14. uc极度精简版_uc浏览器精简版apk下载
  15. Errors were encountered while preparing your device for development. Please check the Devices and Si
  16. 随笔 - 58, 文章 - 0, 评论 - 0, 引用 - 0 三次握手 四次握手 与socket函数的关系
  17. Xilinx网站 – 如何申请官方IP的评估license
  18. 归一化(Normalization)标准化(Standarlization)tensorflow和opencv区别:opencv之transform函数解析CHW与HWC:图像的线性数据格
  19. 全栈Python 编程必备
  20. 星际弹球java下载,星际弹球之无极挑战

热门文章

  1. 盖茨今日正式辞职 14位科技界名流临别赠言
  2. 【闲来无聊写个几个小特效——五角星,小光圈,探照灯】
  3. 下载Adobe Dreamweaver 2021
  4. return在php中用法,细致解读PHP中return用法(附代码)_后端开发
  5. caxa计算机绘图工程师,CAXA 制造工程师界面
  6. 计算机能换显卡吗,笔记本显卡能不能换_笔记本显卡能换么-win7之家
  7. linux 查看go安装目录,终于找全了!Go的三种常见的安装方式,各种系统多个版本应有尽有...
  8. 【从零开始学习Go语言】三.属于Go的Hello World
  9. mysql smalldatetime_datetime与smalldatetime之间的区别
  10. POI 设置word 行距设置为固定值