如何设计一个秒杀系统
如何设计一个秒杀系统
- 分流
- 动静分离。静态资源不占用秒杀服务器系统资源,浏览器缓存或者cdn缓存,或者专门的静态服务器(如OSS)负责响应。后端统一不作任何渲染操做,全部渲染均在js中完成,后端只负责数据传递。
- 后端服务代码支持水平扩展,能够随时手动或者自动扩容。若是有条件,能够申请阿里云弹性扩容。
- 网关选择,若是瞬间流量过5W,单nginx是承受不住的,能够在DNS上就多配置些机子,让DNS负载均衡,后端还能够LVS+NGINGX一块儿提供分发服务。
- 限流
- 客户端与服务端均作好人机校验,防止非正经常使用户流量。
- 服务端作好限流操做,好比ip限流,资源限流,超出限流标准拒绝提供服务或者降级服务
- 提早发放令牌,全部用户持令牌入场
- 服务分级
- 将抢购相关的全部服务进行分级。QPS,TPS太高致使服务端资源不足的时候将优先度较低的服务予以降级(好比发货退货)。保证核心成单功能,其他功能可抢购完成后补作。
- 削峰异步消费
- 前端与专门的通知服务器进行长链接,若是创建不了长链接则系统繁忙,抢购失败
- 抢购请求统一放入MQ中,后端异步消费,完成后调用通知服务器予以通知
- 缓存
- 商品基础信息提早缓存预热,商品相关的数据信息均由缓存提供,若是是预计单场瞬时流量过大,能够将商品页面静态化并缓存在CDN上。
- 库存信息能够使用redis自增来处理,先减库存再成单。
- 代码优化
- 后端调用链路尽可能短,全部的服务都不可以单点(均要集群部署,全部的数据服务至少是主从级别,若是流量过大,可提供多主多从,将数据分区),都要有兜底措施(好比缓存系统若是全部的都挂了,也有有本地缓存兜住)
欢迎关注本站公众号,获取更多信息