秒殺操作
? 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)計。
