秒殺系統設計

2021-10-06 14:54:04 字數 1117 閱讀 5125

秒殺系統設計:

一、容量規劃

每個秒殺請求平均100ms完成,20個tomcat伺服器,每個伺服器處理500個請求。極限能夠撐住 qps=20*500/0.1 =100000 tps。隨著系統壓力越來越大理想情況做不到100ms完成乙個請求,按照平均每個請求200ms完成去計算,系統設計目標能夠撐住5w tps

需要對所有元件進行壓測再確定技術方案。

mysql資料庫:800/tps

redis:5w/tps

tomcat:500/tps

rocketmq:5w/tps

二、限流

1.搶購人數限制

1)、採取預約制,符合一定條件並且預約成功後才允許搶購。

2)、搶購時設定驗證碼或者回答問題,通過才允許搶購。

3)、採用token方式防止同乙個賬號請求多次。

2.併發限制

1)限流採用sentinel做分布式限流,防止請求量超過系統設計容量導致系統雪崩,保障系統穩定性。

三、扣庫存

1.資料安全:

1)預扣減庫存:為了保障資料安全,商品庫存資料先load進redis中,預扣減庫存採用redis incr原子更新。

2)實際扣減庫存:redis incr預扣減庫存成功後,再去mysql中做實際扣減庫存(樂觀鎖),並下訂單。

3)查詢是否扣減庫存成功,成功則跳轉到支付介面,否者跳轉搶購失敗介面。

2.最終一致性:

由於redis扣減庫存和mysql實際扣減庫存存在資料一致的可能,所以這裡採用定時任務補償的方式定時查詢mysql和redis庫存資料,發現庫存不一致則以mysql庫存資料為準做庫存的增加或減少。

3.庫存退還:

搶購成功後超過一定時間未付款則取消訂單並退還庫存。

四、穩定性保障

1.所有服務單獨部署,防止搶購系統負載過大影響其他服務。

2.高可用:

1)redis採用sentinel做高可用。

2)rocketmq部署一主一從同步刷盤同步複製。

3)mysql採用主從同步。

3.做好系統監控,發現異常情況比如:zabix、業務日誌監控 elk。

4.redis、rocketmq崩了,這個時候需要sentinel做限流並做降級,直接扣減mysql庫存。

秒殺系統設計

秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。限流 鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,...

秒殺系統設計

一 穩 1 前端 1 前端靜態資源快取 cdn 按鈕置灰 ip限流 一段時間內現在使用者ip 2 同一userid限制訪問頻率,超過頻率返回同乙個頁面,進行限流。利用驗證碼防止惡意攻擊。後端 1 請求丟到mq中按照訊息佇列進行處理,進行削峰 2 因為秒殺是讀多寫少,把庫存資料預先載入到redis中,...

秒殺系統設計

1 什麼是秒殺系統 秒殺系統 就是網路商家為 商品,以低 商品賣出做的限時限量搶購活動 2 秒殺系統可以解決什麼問題,用在哪些場景 解決問題 解決網路商家快速 商品,以低 商品賣出做的限時限量搶購活動 應用場景 商品搶購 3 秒殺系統會出現什麼問題,解決方案 出現的問題 1 併發量大 2 防止超賣 ...