1. 前置知识
什么是秒杀?
秒杀:生活中很多场景,例如抢优惠卷、大促活动、商品秒杀、抢话费卷等,都是秒杀的具体实现,秒杀通俗的说就是很短时间内,处理大量的请求
1.1. 并发与并行
提到秒杀不难想到高并发的发生,再补充下并发与并行
并行:在多核处理器的情况下,多个任务可以在同一时间点上同时发生
并发:多个任务在同一个时间段内执行(时间段可以是1s,500s,10ms)
1.2. 如何优化接口的响应时间?
一个能抗住百万级,千万级并发流量的压力的秒杀项目,离不开强大硬件层面和软件层面的支撑,我们这里主要是软件层面的设计,而作为后端开发人员,我们的主要任务是优化接口的响应时间,那么如何优化接口的响应时间呢?可以从以下方法中考虑
- 能异步就异步
- 减少 IO(统一查,统一写)
- 尽早 return
- 加锁粒度尽可能小
- 事务控制粒度尽可能小
- ......
2.秒杀架构
做大促/秒杀/抢购尽量减少接口的处理时间
秒杀的主要业务就是扣减库存,写订单表,这些都是 IO 操作,很耗时间,而用户的请求我们希望立刻回收,所有可以将秒杀分成两个程序(部署到两台机器上),接入层在秒杀开始之前同步 db 的数据到高性能的 redis,用 redis 做库存预扣减,再用 mq 解耦、连接,接入层不做具体业务的 IO 操作,可以立刻回收用户的请求(线程),在服务层去做具体的业务 IO。
redis 做去重用户:实现业务一个人针对一个商品只能抢一次