库存秒杀方案,怎么样能支撑瞬间的高并发的流量。结合网上的文章自己做了个总结。
1.解决思路,漏斗原理通过层层过滤来过滤掉无效的请求(比如重复请求)等等,具体怎么过滤呢主要有限流、削峰、缓存等手段来实现。
限流:通过滑动窗口、漏桶算法来控制请求数,Google开源工具包Guava提供了限流工具类RateLimiter 令牌桶算法来限流,如果是集群的话可以使用redis
作为计数次来判断,根据用户id和接口拼接成key 并设置过期时间,利用redis incr 来计数来限流。
削峰:通过异步、MQ 方式来承载瞬时并发
缓存:提高响应时间
2.针对库存秒杀场景我们看下整个请求过程
具体Demo 项目地址:https://github.com/chenzhe/RedisLockStockDemo
在这个Demo项目中使用了kafka做消息队列同步双写,Redis做为缓存,使用了Redisson 分布锁来控制并发库存操作。