秒殺系統(tǒng)設(shè)計

秒殺操作

? 1.秒殺流程

一.詳情頁面操作

? ? ? CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))加速用戶獲取數(shù)據(jù)的系統(tǒng),部署會在最近的網(wǎng)絡(luò)節(jié)點上,當(dāng)命中CDN不會需要訪問后端服務(wù)器(公司可搭建也可租用電信)

二、秒殺地址接口

? ? 1.無法靜態(tài)化無法使用CDN緩存

? ? 2.適合使用服務(wù)器端緩存redis服務(wù)器等

? ? 3.一致性成本(超時穿透、主動進(jìn)行更新)

三、秒殺操作優(yōu)化分析

? ?1.無法使用CDN緩存2. 后端緩存困難:庫存問題

? ? ? ?執(zhí)行方案:執(zhí)行秒殺并執(zhí)行成功時,會發(fā)生減庫存使用原子計數(shù)器(Atomic)可以使用redis服務(wù)器進(jìn)行操作,同時要記錄誰購買了商品使用技術(shù)分布式MQ進(jìn)行發(fā)送,將消息寫入MySQL數(shù)據(jù)庫中

? ? ? ? 難點:數(shù)據(jù)一致性問題,購買失敗回滾方案,冪等性保證防止同一個用戶多次執(zhí)行秒殺。Java控制事務(wù)分析。

? ? ? ?存在問題:更新完庫存后進(jìn)行記錄商品明細(xì),每一次數(shù)據(jù)庫都得等待mysql行級鎖。

? ? ? ?當(dāng)減庫存update和記錄商品購買情況,將客戶端邏輯放在mysql服務(wù)器端,減少網(wǎng)路之間延遲和GC影響。

? ?解決方案:使用存儲過程,整個事務(wù)在mysql端進(jìn)行完成。

? ?優(yōu)化:1將靜態(tài)頁面存放在CDN節(jié)點上,頁面可以控制用戶多次點擊

? ? ? ? ? ? ? 2.查詢商品秒殺開始/結(jié)束時間、查詢商品庫存量等可使用redis服務(wù)器進(jìn)行操作

? ? ? ? ? ? ? 3.當(dāng)進(jìn)行秒殺時,要減庫存和添加商品的購買明細(xì)(誰購買商品),主要是商品的競爭優(yōu)化:減少事務(wù)鎖時間

編碼操作:

? 1.查詢操作 :

? ? ?使用商品ID進(jìn)行查詢數(shù)據(jù)庫存量,通過redis服務(wù)器進(jìn)行熱點商品的訪問。當(dāng)存在直接返回,不存在再進(jìn)行訪問數(shù)據(jù)庫,數(shù)據(jù)庫存在時將查詢的數(shù)據(jù)放在redis中。

? ? Java使用jedis客戶端進(jìn)行訪問redis服務(wù)器,使用ID查詢redis時需要將ID進(jìn)行序列化操作(使用ProtostuffIOUtil進(jìn)行序列化和反序列化)

? ?2.使用存儲過程完成一組sql的執(zhí)行,減少網(wǎng)路延遲和GC。Mybatis進(jìn)行調(diào)用存儲過程

? ? ? ? ? 總結(jié):請求被CDN緩存攔截將靜態(tài)化的頁面放入cdn節(jié)點上,然后使用智能DNS解析主要找到nginx地址,通過用戶Ip進(jìn)行智能解析到最近的服務(wù)器,然后進(jìn)行負(fù)載均衡,然后進(jìn)行邏輯集群redis,訪問數(shù)據(jù)庫對關(guān)鍵的ID進(jìn)行分庫分表(mod seckilled),對用戶購買情況進(jìn)行分析統(tǒng)計。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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