庫存秒殺方案,怎么樣能支撐瞬間的高並發的流量。結合網上的文章自己做了個總結。
1.解決思路,漏斗原理通過層層過濾來過濾掉無效的請求(比如重復請求)等等,具體怎么過濾呢主要有限流、削峰、緩存等手段來實現。
限流:通過滑動窗口、漏桶算法來控制請求數,Google開源工具包Guava提供了限流工具類RateLimiter 令牌桶算法來限流,如果是集群的話可以使用redis
作為計數次來判斷,根據用戶id和接口拼接成key 並設置過期時間,利用redis incr 來計數來限流。
削峰:通過異步、MQ 方式來承載瞬時並發
緩存:提高響應時間
2.針對庫存秒殺場景我們看下整個請求過程
具體Demo 項目地址:https://github.com/chenzhe/RedisLockStockDemo
在這個Demo項目中使用了kafka做消息隊列同步雙寫,Redis做為緩存,使用了Redisson 分布鎖來控制並發庫存操作。