java信用分秒杀系统设计思路,秒杀系统设计思路
秒殺特性:
1. 商品個(gè)數(shù)有限
2. 時(shí)間分布集中
3. 流量超級(jí)大
整體方案:
1. 產(chǎn)品策略
a. 分離核心流程與其他可以延后處理的流程
b. 針對(duì)異常情況進(jìn)行文案引導(dǎo)
2. 技術(shù)策略
a. 客戶(hù)端、接入層、應(yīng)用層、存儲(chǔ)層 各層整個(gè)鏈路梳理。任何一個(gè)環(huán)節(jié)異常,都可能導(dǎo)致整體服務(wù)不可用。
b. 客戶(hù)端重試策略的合理設(shè)計(jì)。固定超時(shí)時(shí)間+隨機(jī)時(shí)間長(zhǎng),遞增的超時(shí)時(shí)間,防止自我DDOS情況的發(fā)生。
c. 接入層是所有流量的入口,因此這里需要根據(jù)下游應(yīng)用層處理能力,做好相應(yīng)的限流。接入層可以使用 nginx, 性能有保障,配合 限流模塊 實(shí)現(xiàn)。 其中包括 粗細(xì)管道。
c1. 提前把符合條件的uid ,加入cache, 在接入層快速鑒權(quán),過(guò)濾不符合條件的用戶(hù)。
c2. ip 頻次 限制,設(shè)備檢測(cè),防止黑產(chǎn),過(guò)濾無(wú)效用戶(hù)。
c3. 針對(duì)秒殺商品總數(shù)有限,每個(gè)接入點(diǎn)放入的有效請(qǐng)求數(shù)超過(guò)總數(shù)后,直接返回結(jié)果。
d. 在應(yīng)用層分離核心流程,在秒殺時(shí),先處理核心流程,非關(guān)鍵流程延后處理,同時(shí)支持失敗補(bǔ)償機(jī)制,以及相應(yīng)的冪等重試。
e. 存儲(chǔ)層 緩存 redis 、消息隊(duì)列 kafka, 最終記錄寫(xiě)入mysql
f. 針對(duì)秒殺商品的庫(kù)存,可以存入redis,更進(jìn)一步可以再把這個(gè)總值提前拆分到N個(gè)節(jié)點(diǎn)上。
f1. 在redis中記錄是否領(lǐng)取成功,用于用戶(hù)實(shí)時(shí)查看結(jié)果。
g. 領(lǐng)取成功后,把對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入消息隊(duì)列(kafka),kafka的寫(xiě)入性能在極限情況下,可以可以配置到非常高的,因此性能問(wèn)題不必?fù)?dān)心。
h. 異步消費(fèi)隊(duì)列數(shù)據(jù),補(bǔ)齊之前的整個(gè)秒殺中未完成的邏輯。
3. 可用性
a. 靜態(tài)資源的cdn部署,動(dòng)態(tài)服務(wù)分地區(qū)部署,加速整個(gè)服務(wù)的響應(yīng)時(shí)間。
b. 接入層、應(yīng)用層 、存儲(chǔ)層容災(zāi),都至少部署在2個(gè)IDC,標(biāo)準(zhǔn)的做法是 2地3中心,或者3地5中心。
c. 存儲(chǔ)層往往為了高性能,會(huì)選擇異步復(fù)制的策略,因此如果由于故障進(jìn)行主備切換,可能會(huì)造成備庫(kù)數(shù)據(jù)不是最新的數(shù)據(jù),造成超賣(mài)情況。如果要避免超賣(mài),勢(shì)必需要等主備同步完成,這將犧牲服務(wù)可用性。需要根據(jù)業(yè)務(wù)場(chǎng)景權(quán)衡。
d. 監(jiān)控系統(tǒng),包括服務(wù)基礎(chǔ)監(jiān)控,業(yè)務(wù)監(jiān)控,秒殺數(shù)據(jù)的監(jiān)控
e. 各種異常的預(yù)案,針對(duì)各種預(yù)案,提前寫(xiě)好執(zhí)行方案。隨時(shí)一鍵切換。
f. 秒殺相關(guān)的資源 與其他基礎(chǔ)產(chǎn)品資源隔離,避免影響主要產(chǎn)品使用。這里資源包括 域名、接入層、應(yīng)用層、緩存、數(shù)據(jù)庫(kù)等資源。
4. 驗(yàn)證
a. 全流程壓測(cè)。包括基本接口qps, 還要包括數(shù)據(jù)完整性驗(yàn)證。
b. 破壞性驗(yàn)證。比如斷掉其中一個(gè)機(jī)房的全部服務(wù),或者斷掉集群中的任意節(jié)點(diǎn)。
c. 日志信息驗(yàn)證。如果某個(gè)環(huán)節(jié)發(fā)生失敗,是否可以通過(guò)日志追蹤到數(shù)據(jù),保證最終一致性。
d. 異常預(yù)案驗(yàn)證。包括 切換的正確性驗(yàn)證,以及恢復(fù)時(shí)長(zhǎng)的驗(yàn)證 。
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java信用分秒杀系统设计思路,秒杀系统设计思路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php签名墙代码,我们是一家人(签名墙)
- 下一篇: windows c语言 pipe,pip