网购秒杀系统架构设计

秒杀是电子商务网站常见的一种营销手段:将少量商品(通常只有一件)以极低的价格,在特定的时间点开始出售。比如一元钱的手机,五元钱的电脑,十元钱的汽车等。因为商品价格诱人,而且数量有限,所以很多人趋之若鹜,在秒杀活动开始前涌入网站,等到秒杀活动开始的一瞬间,点下购买按钮(在此之前购买按钮为灰色,不可以点击),抢购商品。这些商品因为在活动开始的一秒内就被卖光了,所以被称作秒杀。

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

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

秒杀活动的技术挑战

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

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

3.突然增加的网络及服务器带宽:假设商品页面大小200K(主要定商的图门人小)一切过团让亚时使用的带宽。2G (200K× 10,000 ),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。

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

秒杀系统的应对策略

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

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

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

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

秒杀系统架构设计

秒杀系统为秒杀而设计,不同于一般的网购行为,参与秒杀活动的用户更关心地是如何能快速刷新商品页面,在秒杀开始的时候抢先进入下单页面,而不是商品详情等用户体验细节,因此秒杀系统的页面设计应尽可能简单。

商品页面中的购买按钮只有在秒杀活动开始的时候才变亮,在此之前及秒杀商品卖出后,该按钮都是灰色的,不可以点击。

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

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

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

解决办法是使用JavaScript脚本控制,在秒杀商品静态页面中加入一个JavaScript文件引用,该JavaScript 文件中加入秒杀是否开始的标志和下单页面URL的随机数参数,当秒杀开始的时候生成一个新的JavaScript文件并被用户浏览器加载,控制秒杀商品页面的展示。这个JavaScript文件使用随机版本号,并且不被浏览器、CDN 和反向代理服务器缓存。这个JavaScript 文件非常小,即使每次浏览器刷新都访问 JavaScript文件服务器也不会对服务器集群和网络带宽造成太大压力。

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

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

小结

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

系统架构设计——网购秒杀系统架构设计相关推荐

  1. 00 如何设计一个秒杀系统——秒杀系统架构设计都有哪些关键点

    一.如何理解秒杀系统 秒杀系统其实主要解决两个问题,一个是并发读,一个是并发写.并发读的核心优化理念是尽量减少用户到服务端来"读"数据,或者让他们读更少的数据:并发写的处理原则也一 ...

  2. 网购秒杀系统架构案例分析

    秒杀活动的技术挑战 对现有网站业务造成冲击 高并发下的应用数据库负载 突然增加的网络及服务带宽 直接下单 秒杀系统的应对策略 秒杀系统独立部署 秒杀商品页面静态化 租赁秒杀活动网络带宽 动态生成随机下 ...

  3. 阿里最后一面,高并发下如何设计一个秒杀系统?

    近年来,随着"双十一"购物节和抖音等直播平台带货的热潮,大批促销活动涌现,「秒杀」这个词也越来越频繁地出现在我们的生活里. 除了那些头部的电商公司,某宝.某东,还有各种街.某说.某 ...

  4. 【高并发解决方案】5、如何设计一个秒杀系统

    什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到.对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量 ...

  5. 敖丙带你设计【秒杀系统】

    我之前写过一个秒杀系统的文章不过有些许瑕疵,所以我准备在之前的基础上进行二次创作,不过让我决心二创秒杀系统的原因是我最近面试了很多读者,动不动就是秒杀系统把我整蒙蔽了,我懵的主要是秒杀系统的细节大家都 ...

  6. 思维升级-如何设计一个秒杀系统?

    技术面试中,高级开发职称以上必问,如果你没亲身设计过,那你需要了解一下设计中的细节. 一.场景分析: 1.限流:鉴于只有少部分用户能秒杀成功,所以要限制大部分流量,只允许少部分流量进入后端服务: 2. ...

  7. 大厂最后一面,如何设计一个秒杀系统

    近年来,随着"双十一"购物节和抖音等直播平台带货的热潮,大批促销活动涌现,「秒杀」这个词也越来越频繁地出现在我们的生活里. 除了那些头部的电商公司,某宝.某东,还有各种街.某说.某 ...

  8. 双十二结束了,程序员如何设计一个秒杀系统?

    秒杀系统的关键点: 秒杀系统其实主要解决2个问题,一个是并发读,一个是并发写.整体概况为"稳.准.快" 高性能. 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键.本文 ...

  9. 极客时间-如何设计一个秒杀系统-笔记0到2章

    极客时间-如何设计一个秒杀系统-笔记0到2章 0.开篇词-系统秒杀系统架构设计都有哪些关键点? 1.设计秒杀系统时应该注意的5个架构原则 1.数据要尽量少 2.请求数要尽量少 3.路径要尽量少 4.依 ...

最新文章

  1. Aiiage Camp Day5 A Rikka with Linker
  2. Gradle实战:发布aar包到maven仓库
  3. 使用注解配置spring如@Compnent、@Service、@Consroller、@scope和@value的使用
  4. eclipse html页面校验,当我在Eclipse浏览器中运行url时,HTML表单未通过验证
  5. 国自然和毕业论文的流程图用这个格式导入Word可无限放大
  6. 报表服务扩展:基于WCF技术的报表服务扩展
  7. ASP.NET 百万级分页查询(Oracle)
  8. iPhone降价后销量惊人 库克本周将再度访华
  9. gulp mysql_关于MySQL索引的一点小见解
  10. 用计算机打出歌词,Overture软件中如何输入歌词?
  11. 微信小程序在js中的data里定义对象
  12. chromium os 编译
  13. .net快速开发框架源码分享
  14. HTML+CSS实现小米官网首页
  15. Word怎么填服务器草稿位置,Word步骤制作目录的索引符号的操作
  16. pyinstaller打包有pandas和numpy库过程中遇到的bug及处理
  17. 1.6 mocha配置文件的使用
  18. python将数字拆分_Python 整数拆分
  19. 运营商精准大数据——主动出击 精准获客_客户_实时数据
  20. 中国微商概念及产业链分析

热门文章

  1. 网线传输速度测试_如何测试网线的优劣
  2. validator自定义校验注解及使用
  3. jQuery Validate密码验证的基本使用
  4. SpringDataJPA学习记录(干货较多)
  5. 最强nba体验服显示服务器正在停机,最强NBA玩不了怎么办 游戏进不去玩不了原因分析及解决方法...
  6. 西西吹雪:从程序员到项目经理
  7. [ 应急响应 ]服务器(电脑)受到攻击该如何处理?(一)
  8. java程序员一天多少行有效代码,持续更新~
  9. Android快速分享文件/文字到QQ/微信
  10. 说话快,别人感觉太强势怎么办?