网购秒杀系统架构设计分析
来源:互联网 发布:保时捷车载香水知乎 编辑:程序博客网 时间:2024/05/02 02:08
秒杀活动的技术挑战
### 对现有网站业务造成冲击 ###
秒杀活动只是网站营销的一个附加活动,特点是:时间短、并发访问量大,如果和网站原有应用部署在一起,必然会对现有业务造成冲击。
解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离。
高并发下的应用、数据库负载
用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成负载压力。解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过应用服务器的业务逻辑处理,也不需要访问数据库。所以秒杀商品服务不需要部署动态的Web服务器和数据库服务器。
突然增加的网络及服务器带宽
假设商品页面大小200K,10000个请求的带宽就是2G。解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽。
直接下单
秒杀的游戏规则是到了秒杀才能开始对商品下单购买,在此时间点之前,只能浏览商品信息,不能下单。而下单页面也是一个普通的URL,如果得到这个URL,不用等到秒杀开始就可以下单了。
解决方案:为了避免用户直接访问下单页面URL,需要将改URL动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。
如何控制秒杀商品页面购买按钮的点亮
购买按钮只有在活动开始的时候才能点亮,在此之前是灰色的。如果是动态页面,可以很容易解决这个问题,但为了减轻服务器负载压力,该页面设计为静态页面,缓存在CDN、反向代理服务器上,甚至用户浏览器上。秒杀开始时,用户刷新页面,请求根本不会到达应用服务器。解决方案:使用JavaScript脚本控制,在秒杀商品静态页面中加入一个JavaScript文件引用,该JavaScript文件中加入秒杀是否开始开始的标志和下单页面URL的随机参数,当秒杀开始的时候生成一个新的JavaScript文件并被用户浏览器加载,控制秒杀商品页面的展示。这个JavaScript文件使用随机版本号,并且不被浏览器、CDN和反向代理服务器缓存。
如何只允许第一个提交的订单被发送到订单子系统
秒杀开始,由于最终能够成功秒杀到商品的用户只有一个,因此需要在用户提交订单时,检查是否已经有订单提交。解决方案:为了减轻下单页面服务器的负载压力,可以控制进入下单页面的入口,只有少数用户能进入下单页面,其他用户直接返回秒杀结束页面。
下单服务器检查本机已处理的下单请求数目
*如果超过10条,直接返回已结束页面给用户;
*如果未超过10条,则用户可进入填写订单及确认页面;
检查全局已提交订单数目
*已超过秒杀商品总数,返回已结束页面给用户;
*未超过秒杀商品总数,提交到子订单系统。
这样就大大地减少了数据库的负载压力。
摘自《大型网站技术架构》–李智慧
0 0
- 网购秒杀系统架构设计分析
- 系统架构分析设计方法
- 网购秒杀系统架构设计
- 解剖Twitter:Twitter系统架构设计分析
- 解剖Twitter:Twitter系统架构设计分析
- 解剖Twitter:Twitter系统架构设计分析
- 校友网--系统架构分析与设计
- 【转载】Twitter系统架构设计分析
- 秒杀系统架构设计与分析
- 19. 网购秒杀系统架构分析
- 网购秒杀系统架构案例分析
- Tomcat 系统架构与设计模式【设计模式分析】
- Tomcat 系统架构与设计模式:设计模式分析
- Tomcat 系统架构与设计模式: 设计模式分析
- 一个数据分析系统的技术架构设计浅析
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- expdp和impdp数据的导入和导出
- java设计模式之— 适配器(Adapter)
- 设计模式学习001——观察者模式
- ecshop数据库设计
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- 网购秒杀系统架构设计分析
- kinect初识--color
- 在JBOSS中配置JNDI
- 黑马程序员——java编程基础(三)数组
- Aizu 1311 Test Case Tweaking(spfa变形,dp)
- c++成员函数的重载、覆盖、隐藏区别
- Linux多线程一
- android onlayout参数
- Spring发送邮件总结(附源码)