文章插图
#0 系列目录#
- 秒杀系统架构
- 秒杀系统架构分析与实战
- 正常电子商务流程
- 秒杀业务的特性
#2 秒杀技术挑战# 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:
- 对现有网站业务造成冲击
解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离 。
- 高并发下的应用、数据库负载
解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过应用服务 。
- 突然增加的网络及服务器带宽
解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借 。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽 。
- 直接下单
解决方案:为了避免用户直接访问下单页面URL,需要将改URL动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL 。办法是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到 。
- 如何控制秒杀商品页面购买按钮的点亮
解决方案:使用JAVAScript脚本控制,在秒杀商品静态页面中加入一个JavaScript文件引用,该JavaScript文件中包含 秒杀开始标志为否;当秒杀开始的时候生成一个新的JavaScript文件(文件名保持不变,只是内容不一样),更新秒杀开始标志为是,加入下单页面的URL及随机数参数(这个随机数只会产生一个,即所有人看到的URL都是同一个,服务器端可以用redis这种分布式缓存服务器来保存随机数),并被用户浏览器加载,控制秒杀商品页面的展示 。这个JavaScript文件的加载可以加上随机版本号(例如xx.js?v=32353823),这样就不会被浏览器、CDN和反向代理服务器缓存 。
这个JavaScript文件非常小,即使每次浏览器刷新都访问JavaScript文件服务器也不会对服务器集群和网络带宽造成太大压力 。
- 如何只允许第一个提交的订单被发送到订单子系统
解决方案:假设下单服务器集群有10台服务器,每台服务器只接受最多10个下单请求 。在还没有人提交订单成功之前,如果一台服务器已经有十单了,而有的一单都没处理,可能出现的用户体验不佳的场景是用户第一次点击购买按钮进入已结束页面,再刷新一下页面,有可能被一单都没有处理的服务器处理,进入了填写订单的页面,可以考虑通过cookie的方式来应对,符合一致性原则 。当然可以采用最少连接的负载均衡算法,出现上述情况的概率大大降低 。
推荐阅读
- 基于redis分布式锁实现“秒杀”
- 小米刷机后使用不习惯,想要恢复原系统?可以采用这种方式来恢复
- iOS 屏蔽系统更新描述文件更新!快把烦人的系统更新提示关掉
- MySQL 整体架构与 SQL 执行原理
- 分布式系统常见概念
- PHP的微服务框架预览
- 详解Rsync远程同步服务在windows系统下的安装和配置
- 电商支付架构设计
- 详解Docker架构原理、功能及使用
- 升级鸿蒙后内存突然满了 鸿蒙系统占用手机多少g