随着电商的发展,秒杀系统已经发展成为电商必不可少的组成部分,如小米手机的秒杀,12306的抢票,这些系统的共同特点都是:库存只有一份,瞬时流量非常大,所有人会在集中的时间读和写这些数据,多个人读一个数据;读写冲突,锁非常严重,这是秒杀业务难的地方。那我们怎么构建秒杀业务的架构呢?
构建架构需要总体做到两点:
1、请求尽量拦截在系统上游;2、使用缓存抗读压力
对于客户端浏览器或者app层:
做限速,禁止用户重复提交,限制用户几秒内只允许访问一次
站点控制层:
必须进行登录有uid才能操作,对uid进行请求计数和去重,页面缓存,同一个uid,限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面。同一个item的查询,例如车次,做页面缓存,x秒内到达站点层的请求,均返回同一页面。如此限流,既能保证用户有良好的用户体验(没有返回404)又能保证系统的健壮性
服务层:
按照业务做写请求队列控制流量,做数据缓存
数据库层:
浏览器层,站点层拦截了并做了页面缓存,服务层又做了写请求队列与数据缓存,每次透到数据库层的请求都是可控的。db基本就没什么压力了
对于秒杀系统还需要注意和考虑垂直拆分的分流以及回仓操作