秒杀系统

panic-buying

Posted by Static on May 9, 2020

1. What?

1.1 简介

秒杀是在同一时刻大量请求争抢购买同一商品并完成交易的过程。比如12306抢票,双十一。

1.2 特点

同一时刻请求量大


2. Why?

为什么时要设计秒杀系统?

站在用户角度上,在秒杀时,软件体验要好,数据要准确;站在开发角度上,服务要可用,数据要一致,服务要高吞吐。


3. How?

如何设计秒杀系统?

3.1 动静分离

将大量静态资源进行CDN缓存,减少后端服务器的请求压力。

3.2 防爬虫

防止无效的请求调用,避免用户恶意调用秒杀相关接口。

3.3 数据分层

尽可能在不同层将无效请求拦截并过滤掉,让真正有效的请求落入后端服务。

3.4 削峰

在高并发的情况下,平稳流量是设计秒杀系统很重要的思路,实现削峰可以利用缓存和消息中间件等技术。

3.5 限流

秒杀的商品时有限的,所以要限制大部分流量,只允许少部分流量进入服务后端。

3.6 缓存

秒杀系统最大的瓶颈一般都是数据库读写,由于数据库读写属于磁盘IO,性能很低,如果能够把部分数据或业务逻辑转移到内存缓存,效率会有极大地提升。

3.7 超卖

库存数量有限,如何有效控制商品超卖是秒杀系统不可避免的一个问题。

3.8 异步

秒杀系统是一个高并发系统,采用异步处理模式可以极大地提高系统并发量,当然异步处理也是削峰的一种实现方式。

3.9 主备容灾

在有条件的情况下做好主备容灾,提前预防被恶意攻击,防止宕机。

3.10 可拓展

当更大的并发进入,导致服务负载瓶颈,最好将系统设计成弹性可拓展的,防止服务宕机。

秒杀系统源码分析:http://whvixd.com/2020/05/09/panic-buying-code/