秒殺系統設計:
一、容量規劃
每個秒殺請求平均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 防止超賣 ...