hi球散,rudy尿赚,我們這一次要做個活動,大家一起來搶100張1000元現(xiàn)金券蕉堰。你看看怎么做凌净?現(xiàn)在預(yù)約人數(shù)大概在2w人左右。我擦嘁灯,秒殺啊泻蚊,這個得想想如何利用自己現(xiàn)有資源來完成瞬間的高并發(fā)處理。
他山之石
- 徐漢彬:Web系統(tǒng)大規(guī)模并發(fā)——電商秒殺與搶購:http://www.csdn.net/article/2014-11-28/2822858
- 秒殺系統(tǒng)架構(gòu)分析與實戰(zhàn):http://www.cnblogs.com/andy-zhou/p/5364136.html
- 小米網(wǎng)搶購系統(tǒng)開發(fā)實踐:http://www.csdn.net/article/2014-11-07/2822545
- 如何設(shè)計一個秒殺系統(tǒng):http://www.jb51.net/article/108564.htm
秒殺的特點
- 對現(xiàn)有網(wǎng)站業(yè)務(wù)造成沖擊
- 瞬間的高并發(fā)丑婿,但秒殺商品數(shù)量有限性雄。真正有效請求有限没卸。而且一般是熱點數(shù)據(jù)比較多。
- 網(wǎng)絡(luò)及服務(wù)器帶寬增長壓力秒旋。
- 業(yè)務(wù)邏輯的簡化
原則
- 快
- 不能超賣约计,高并發(fā)下的數(shù)據(jù)的強一致性
- 公平性
- 可擴展性:可以通過增加服務(wù)數(shù)量,來抗住更大的并發(fā)
- 分流:基于時間分片削峰
解決方式
-
公平性:
- 防刷機制-限制n秒內(nèi)迁筛,用戶訪問次數(shù)煤蚌、
- 驗證碼
- 倒計時前后端時間同步
- 僵尸賬號防刷-在業(yè)務(wù)側(cè)做實名制
-
隔離:
- 業(yè)務(wù)隔離:秒殺系統(tǒng),屬于短時間高并發(fā)處理细卧,防止影響其他正常業(yè)務(wù)尉桩,應(yīng)該需要獨立部署
- 動靜隔離:秒殺頁面盡可能減少對后臺依賴,絕大部分走CDN贪庙,只有少量動態(tài)數(shù)據(jù)請求服務(wù)器
-
網(wǎng)絡(luò)及服務(wù)器帶寬增長壓力:
- 盡可能越在靠近用戶側(cè)攔截越多無效請求越好蜘犁。
- 減少冗余數(shù)據(jù)的返回
-
保證秒殺接口快:
- 秒殺接口足夠簡化
- 復(fù)雜邏輯異步處理
- 盡可能越在靠近用戶側(cè)攔截越多無效請求越好。
- 讀走緩存
-
數(shù)據(jù)一致性:
- 將大量無效請求攔截在數(shù)據(jù)層之前止邮,有效請求(少量)通過redis/db等中間數(shù)據(jù)層保證數(shù)據(jù)一致性
-
可擴展性:
- 多級緩存:各個層級这橙,盡可能多的做緩存,以攔截?zé)o效請求导披。
方案一
-
優(yōu)點與說明:
- 實現(xiàn)相對簡單屈扎,能做一部分秒殺活動。
- 前端靜態(tài)資源走CDN
- 前端做秒殺前后攔截撩匕,秒殺中鹰晨,每個用戶只放一次請求到后端』祝可以攔截掉小白用戶的99%的無效點擊并村。
- 利用redis的(setnx、incrby/decrby等原子操作)滓技、mysql的(for update 寫鎖)實現(xiàn)秒殺庫存控制
-
缺點:
- 比較倚重redis
- 過濾用戶秒殺條件成為瓶頸
- 業(yè)務(wù)耦合還是比較嚴(yán)重
方案二
-
優(yōu)點與說明:
- 增加單機本地緩存,可以支持機器平行擴容棚潦,抗住更多請求
- 增加mq令漂,做異步處理,解耦復(fù)雜的業(yè)務(wù)邏輯
-
缺點:
- 沒有機器人爬取丸边。多個商品秒殺咋辦叠必?
- 有沒有什么降級處理?
- 數(shù)據(jù)層還是單點
方案三
.....
叮叮叮妹窖,叮叮叮纬朝,rudy起來了,午休結(jié)束了骄呼,起來搬磚了.....
20180620補充共苛,方案一的壓測數(shù)據(jù)
2臺php服務(wù)機器節(jié)點