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