1、秒杀系统架构优化思路
常见的架构:
优化方向:
1、将请求尽量拦截在系统上游:
2、充分利用缓存:
各层优化细节
1、客户端怎么优化(浏览器层,App层)
(a)、产品层面:
用户点击后按钮置灰,禁止用户重复提交。
(b)、js层面:
限制用户在x秒内只能提交一次请求。
2、站点层面请求的拦截
(a)、在站点层面,对uid进行请求计数和去重
(b)、利用缓存:
同一个uid,限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面
3、服务层来拦截
(a)、请求队列
对于写请求,做请求队列,每次只透有限的写请求去数据层
4、数据库:闲庭信步
问题
1、按你的架构,其实压力最大的反而是站点层,假设真实有效的请求数有1000万,不太可能限制请求连接数吧,那么这部分的压力怎么处理?
解决方法一:站点层增加机器扩容。
解决方法二:机器不够抛弃部分请求,返回稍后再试。
2、秒杀之后的支付完成,以及未支付取消占位,如何对剩余库存做及时的控制更新?
解法方法:数据库里一个状态,未支付。如果超过时间,例如45分钟,库存会重新会恢复(大家熟知的“回仓”),给我们抢票的启示是,开动秒杀后,45分钟之后再试试看,说不定又有票哟~