記一次使用者搶購商品導致伺服器炸了

lyxxxh發表於2020-05-12

問題產生

某個商品突然說要做秒殺。
秒殺,挺耗費時間了,老闆和客戶商量,最後改成搶購。

其實就是增加庫存功能,然後人工在固定時間改庫存,使用者搶購。 (哈哈哈 就是這麼簡單)

活動規則

記一次伺服器搶購導致伺服器炸了

昨天 ( 5 - 11)

一次伺服器搶購導致伺服器炸了

伺服器直接炸了,幾十秒之內所有專案不能訪問。
出現超賣。

在10號才三十幾人,沒想到11號,馬上變成1.2k人,我丟。

我本以為是個小專案,什麼限制都沒做。
(經歷過太多這種小專案了)

11號10點一到,直接炸了,還超賣。

改善

一次伺服器搶購導致伺服器炸了

限制: (都要先經過 redis 的限制)

  1. 每個人每秒只能訪問一次
  2. lpop保證不超賣

我以為這樣不會炸了。

今天 ( 5 - 12 )

一次伺服器搶購導致伺服器炸了

又炸了,但是沒有超賣,比昨天好很多,還能訪問。

殘餘問題

少賣

使用者發起購買請求,庫存-1,返回支付引數給前端。 也就是說: 使用者不支付,也會庫存-1

本來30個名額的,現在賣了30個,只有20個支付了,10個未支付,所以是少賣了。

我不想用複雜的來寫

  1. 老闆不會ra我花費太多時間來 客戶也沒有說什麼
  2. 我怕坑,如果用了佇列,還要自己測,測了上線還擔心bug

我慢慢想 簡單 && 又能解決的辦法

為何不在支付成功後再庫存-1 ?

除了搶購商品都是這樣處理的

搶購商品這樣處理的話 逗我嗎 ……

本作品採用《CC 協議》,轉載必須註明作者和本文連結

專心學習不瞎搞

相關文章