马上要到双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条,则用户可进入填写订单及确认页面;

检查全局已提交订单数目

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

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

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

那如何学习才能进入一线互联网公司呢?

欢迎工作一到五年的 Java 的工程师朋友们加入的 Java 架构开发:685167672

本群提供免费的学习指导架构资料以及免费的解答

不懂得问题都可以在本群提出来之后还会有职业生涯规划以及面试指导

最后,做一个爱思考,懂思考,会思考的程序员。

作者:美的让人心动
链接:https://www.jianshu.com/p/43dfc0d942f6
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

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

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

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

  2. 设计秒杀系统架构,这4个关键点要注意

    本文分享自华为云社区<秒杀系统架构设计都有哪些关键点?>,作者:JavaEdge . 0.目标 秒杀重复排队 重复排队:一个人抢购商品,若未支付,不准重复排队抢购 超卖问题 1个商品卖给多 ...

  3. 浅谈秒杀系统架构设计

    秒杀是电子商务网站常见的一种营销手段. 原则 不要整个系统宕机. 即使系统故障,也不要将错误数据展示出来. 尽量保持公平公正. 实现效果 秒杀开始前,抢购按钮为活动未开始. 秒杀开始时,抢购按钮可以点 ...

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

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

  5. 网购秒杀系统架构设计案例分析

    大型网站技术架构-核心原理与案例分析 作者:李智慧 申明:文章版权归作者所有,若有侵权,请联系删除 秒杀是电子商务网站常见的一种营销手段:将少量商品(通常只有一件)以极低的价格,在特定的时间点开始出售 ...

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

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

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

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

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

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

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

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

最新文章

  1. 如何在进程间共享数据
  2. django 不用自带的mysql_python笔记二 django自带后台管理系统、模版渲染以及使用mysql数据库...
  3. eclipse中Android模拟器常见的问题解决方法汇总
  4. NET 2005 中通过TryParse来检验和转换数据类型。
  5. 《操作系统实现之路》源代码下载路径及求助途径
  6. 详述MySQL Using intersect交集算法
  7. 给2021的Java一些建议,纯干货
  8. LeetCode--057--插入区间(java)
  9. weblogic 下载和安装
  10. 将多个excel文件合并为:一个excel文件的多个sheet页【方法技巧】
  11. 组装台式计算机的部件,组装台式电脑各配件的简单介绍
  12. 关闭计算机休眠文件,电脑垃圾清理关闭休眠文件夹hiberfil.sys
  13. c#中控制不能从一个case标签贯穿到另一个case标签是啥意思
  14. RequestHead详解
  15. DfE给学生提供的笔记本电脑感染了恶意软件
  16. 【Python零基础到入门】Python基础语法篇——基本数据类型【文末送书】
  17. 智能小区 安防技术详解及安防隐患杂谈
  18. Elastic-Job开发指南
  19. 计算机存储系统的特点,分布式存储系统的特点和意义
  20. js中数组拼接成字符串

热门文章

  1. 文件传输服务器多目录,node ftp 模块 如何把本地多个文件夹或者文件上传到服务器...
  2. dcf是ea211发动机吗_大众有的车怎么把ea211换成dcf了?
  3. linux du -h按文件大小,【玩转linux命令】du党
  4. 08_sklearn数据集,数据集划分train_test_split,sklearn.datasets及其api,sklearn分类数据集,sklearn回归数据集,转换器与预估器
  5. 01_数据库连接池,数据源,ResultSetMetaData,jdbc优化
  6. 5.Boost之“资源申请即初始化” RAII
  7. Linux redhat下安装jdk-6u45-linux-x64.bin
  8. Eclipse中tomcat的配置
  9. Linux sed 打印模式空间p命令使用案例
  10. c语言中转义字符是由什么和什么构成,c语言中什么是转义字符