模型
- 活動 -> 場次 -> 獎品 -> 商品
- 用戶獎品記錄
存儲 5%的請求
- MySQL 存儲配置信息最住,更新庫存數(shù)量摄悯,記錄用戶行為
- 結(jié)合 rocket mq职恳,批量下載用戶行為诬垂,進行本地區(qū)分并統(tǒng)計好行為對應(yīng)的庫存消耗(一個行為對應(yīng)可能是多個用戶)
- update的不是-1的方式稚机,而是-n的方式牍戚,減少不行update帶來的block風(fēng)險侮繁,雖然現(xiàn)有集群能支撐現(xiàn)有的日活量,但是成原則上不允許-1的方式
- insert 也不建議一條條insert翘魄,雖然這種在原則上是可以的鼎天,但是batchInsert是更好的選擇
緩存 90%的請求
- Tair 作為分布式緩存,承載用戶的并發(fā)請求暑竟、用戶計數(shù)器斋射、庫存計數(shù)器
- 使用 setCount/incr/desr 進行庫存/用戶行為計數(shù)(只支持 int)
- 使用 動態(tài)活動時間動態(tài)計算expire time對活動信息進行緩存
- expire time 是second單位,只支持 int
- Guava Cache 作為本地緩存但荤,二級緩存
隊列 解耦用戶記錄
- RocketMQ 批量記錄用戶操作罗岖,本地計算后實時更新運營監(jiān)控庫存數(shù)據(jù)
- 采用 pull 模式,設(shè)置 min/max thread 以及 maxBatchPull腹躁,自己實現(xiàn)批量處理邏輯
- 不采用 transaction 模式桑包,影響性能,帶來的收益不夠大
前后端約定協(xié)議
- 解決99%的用戶并發(fā)請求纺非,使緩存方案不需要嚴格設(shè)計
- 這里涉及到專利的問題(等專利pass后描述)
- 方案的目的是提高轉(zhuǎn)換率哑了,在成本允許的范圍內(nèi)(或者暫時不考慮成本,成本后續(xù)結(jié)算)烧颖。
- 控制最大成本的前提下弱左,提高用戶可用性,提高用戶轉(zhuǎn)換率