秒杀其实主要解决两个问题,一个是并发读,一个是并发写。
并发读的核心优化理念是尽量减少用户到服务端来“读”数据,或者让他们读更少的数据;
并发写的处理原则也一样,它要求我们在数据库层面独立出来一个库,做特殊的处理。
另外,我们还要针对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生。
-
高性能
秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。对应的方案比如动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化
-
一致性
秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知
- 高可用
现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,我们还要设计一个 PlanB 来兜底,以便在最坏情况发生时仍然能够从容应对。
技术栈
前端:Thymeleaf bootstrap jqueryy
后端:spring boot mybatisPlus Lombok
中间件:redis rabbitMQ