商城特殊活動(dòng)(內(nèi)含秒殺)系統(tǒng)

商城特殊活動(dòng)架構(gòu).png

特殊活動(dòng)構(gòu)成模塊

  • 驗(yàn)證碼
    • 產(chǎn)生驗(yàn)證碼
      • 初始化產(chǎn)生100個(gè)驗(yàn)證碼,每次按照當(dāng)前時(shí)間ms%100獲取一個(gè)驗(yàn)證碼,保存至tair,超時(shí)為x分鐘
      • 這里的校驗(yàn)碼類似于token,每次請(qǐng)求都隨機(jī)分配一個(gè)用戶唯一的token并且保存至tair,這個(gè)token還有圖片顯示給前端
      • 用戶需要手動(dòng)輸入這個(gè)圖片里的驗(yàn)證碼
      • 這樣秒殺拼的系統(tǒng)是(分流不至于單點(diǎn)壓力,提高機(jī)器人刷單行為成本)
        1. 用戶點(diǎn)擊秒殺按鈕的速度
        2. 快速識(shí)別驗(yàn)證碼和輸入驗(yàn)證碼的速度
    • 校驗(yàn)驗(yàn)證碼
      • 發(fā)獎(jiǎng)時(shí)要拿這個(gè)token對(duì)tair內(nèi)token進(jìn)行校驗(yàn)(覺得這個(gè)流程體驗(yàn)很不好)
    • 應(yīng)該是token的生成和校驗(yàn)都是 代碼自動(dòng)做的,不需要額外的用戶交互
  • 活動(dòng)模塊信息(商品列表)
    • 一個(gè)活動(dòng)下面包含多個(gè)模塊
    • 秒殺品模塊,推薦品模塊(商品)[為了導(dǎo)流],其他模塊(主題商品館)[不一定需要],秒殺場(chǎng)次模塊時(shí)間表
    • 包含的spu類型有, 優(yōu)惠券/實(shí)物
    • 秒殺品應(yīng)該只是spu/sku的特殊類型,當(dāng)秒殺時(shí)間過期后,商品應(yīng)該自動(dòng)變?yōu)槠胀ǖ膕pu/sku(我們現(xiàn)在的系統(tǒng)并不是這樣的,而是單獨(dú)把秒殺品和非秒殺品的訂單流程分開,造成秒殺品訂單不可逆)
    • 秒殺品只能是 b2c產(chǎn)品
    • 秒殺品的庫(kù)存應(yīng)該是 spu下面的sku對(duì)應(yīng)總和,而我們的系統(tǒng)是將spu中的第一個(gè)sku作為賣品,而沒有將spu中不同規(guī)格商品進(jìn)行細(xì)分
  • 秒商品列表模塊SPU庫(kù)存信息
    • 單獨(dú)module 下 spu list 庫(kù)存信息查詢接口
    • 批量獲取一個(gè)module 下所有spu 的庫(kù)存,保存至tair
  • 獲取秒殺品詳情
    • 商品信息(但是不顯示秒殺品剩余庫(kù)存信息)
  • 準(zhǔn)備參與秒殺(京東\阿里的秒殺是不需要輸入驗(yàn)證碼)
    • 獲取校驗(yàn)碼
    • 正確輸入校驗(yàn)碼
  • 參與秒殺
    • 現(xiàn)有實(shí)現(xiàn)秒殺品到點(diǎn)前不允許搶購(gòu)
    • 點(diǎn)擊搶購(gòu)后需要校驗(yàn) token,風(fēng)控 -> 扣減庫(kù)存 -> 記錄用戶令牌 -> 記錄用戶參與信息( 這里采用單向鏈表模型,向后自動(dòng)調(diào)用)
    • toke 校驗(yàn),防止刷單,降低并發(fā)請(qǐng)求(就是一個(gè)驗(yàn)證碼)
    • 風(fēng)控 判斷用戶userId/設(shè)備deviceId是否已經(jīng)參與過,用tair保存
    • 扣取 庫(kù)存計(jì)數(shù)器 同時(shí)會(huì)將 spu 狀態(tài)也保存在tair中,如果庫(kù)存被扣完,則更新spu緩存狀態(tài),減少計(jì)數(shù)器壓力[這里由于采用@Cacheable的方法,無法立即更新,spu的狀態(tài)可能會(huì)需要本地緩存自動(dòng)更新]
    • 發(fā)放用戶令牌 生成用戶唯一令牌
    • 記錄用戶/設(shè)備記錄 防止用戶重復(fù)參與,15分鐘內(nèi)不允許再使用
  • 創(chuàng)建秒殺訂單
    • 我們將秒殺品下單獨(dú)立了一個(gè)判斷
    • 秒殺品不允許使用 健康金/優(yōu)惠券/購(gòu)物卡(京東是允許使用)坑比[非秒殺品, 是可以調(diào)用促銷中心計(jì)算促銷后訂單金額]
    • 正常下單后,對(duì)用戶進(jìn)行風(fēng)控(同一個(gè)設(shè)備,同一個(gè)用戶,同一個(gè)spu,同一天內(nèi),n分鐘內(nèi),只允許購(gòu)買n次)[比較合理的控制是,一個(gè)秒殺品,只允許用戶購(gòu)買n次]
    • 由于采用同步調(diào)用創(chuàng)建訂單服務(wù),失敗有多種原因,如果由于庫(kù)存/商品不可用的原因,則立即清空緩存內(nèi)的庫(kù)存計(jì)數(shù)器。(這種原因是使用分桶策略,有可能有些分桶還存在庫(kù)存,但是總庫(kù)存已經(jīng)不足,這時(shí)候應(yīng)該馬上清空全部分桶庫(kù)存,同時(shí)將整個(gè)spu/sku置為不可用)

第三方組件選型

  • 緩存 Spring-Cache管理
    • 本地緩存 EhCache
      • 場(chǎng)次產(chǎn)品信息緩存全量至本地 每隔 n分鐘, 重新從 db/第三方緩存 更新一次[這里面有n分鐘的管理信息同步問題]
        • 可以做一個(gè)全局監(jiān)控,當(dāng)管理端刷新后,監(jiān)控觸發(fā)自動(dòng)更新本地緩存[我們還沒做這一個(gè)]
        • 采用 spring 4.2.x,存在 expire 后穿透至第三方緩存問題
    • 第三方緩存 Tair[支持持久化和非持久化]
      • 持久化 重要數(shù)據(jù), 秒殺商品,庫(kù)存(保存總庫(kù)存/按策略分桶保存庫(kù)存)
      • 非持久化
  • MQ RocketMQ
    • HessianUtils 對(duì)數(shù)據(jù)進(jìn)行壓縮
    • 注意 consumer/producer 之間序列化Object的問題,package path不對(duì)無法匹配

特殊活動(dòng)應(yīng)用設(shè)計(jì)的內(nèi)容

  • 場(chǎng)次+獎(jiǎng)品(商品/現(xiàn)金)=活動(dòng)
    • 獎(jiǎng)品分為 商品現(xiàn)金,優(yōu)惠券
      • 獎(jiǎng)品 綁定場(chǎng)次,獎(jiǎng)品不能多個(gè)場(chǎng)次共用(個(gè)人覺得不合理),現(xiàn)有方案認(rèn)為運(yùn)營(yíng)的工作量能忍受,我個(gè)人覺得模型上有問題
      • 獎(jiǎng)品 有時(shí)效性
        • 我的理解,當(dāng)前獎(jiǎng)品的時(shí)效性和優(yōu)惠券的時(shí)效性沖突(如何確定真實(shí)時(shí)效性),但是實(shí)物(現(xiàn)金)又沒有時(shí)效性需要獎(jiǎng)品時(shí)間來控制(沒理解)。
        • 業(yè)務(wù)的時(shí)效性 又被理解為活動(dòng)后臺(tái)允許獲取獎(jiǎng)品的時(shí)間段,細(xì)分了每個(gè)獎(jiǎng)品適用的范圍段
    • 商品(spu)
      • 實(shí)物
        • 以抵用券的形式發(fā)放
      • 虛擬物(具體的物品詳細(xì)到 sku)
        • 主客優(yōu)惠券(使用) - 賣家承擔(dān)成本
        • 話費(fèi)充值卡
        • 流量充值卡
        • 主客無門檻券 - 商城承擔(dān)成本
        • 抵用券 協(xié)商商戶
    • 現(xiàn)金
      • 需要獨(dú)立現(xiàn)金紅包系統(tǒng)
      • 需要實(shí)現(xiàn) 賬本 等等實(shí)現(xiàn)
    • 優(yōu)惠券
      • 優(yōu)惠券系統(tǒng)
      • 一個(gè)場(chǎng)次只會(huì)有一類優(yōu)惠券
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容