
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2025)08-0100-06
Abstract: WiththedevelopmentofInternet technologyandtheupgrading ofuser needs,seckillsystemandraffeactivities have becomeanimportant means forthe platformto atract new usersand increase the numberofusers.Among them,raffle activitiesareoreenttoetoatefseffctstoughcialsotwareaingHoweer,igoncurecyprocigha become a keychallenge tothe succssof these activities,testing thesystem stabilityanduser experience.Therefore,this paper designsahigh-concurrencyAPPseckilloterysystembasedonRediscluster.Throughloadbalancing,three-end(resourceend,clientddsepaoigaiptrololgyodistrol algorithmandother technical means,itensures thestableoperationof thesystem,improves theuser experience,and provides a solid technical foundation for the smooth development of platform activities.
Keywords:Redis; high-concurrency; seckill system; system design
0 引言
隨著互聯(lián)網(wǎng)技術(shù)的爆發(fā)和用戶需求的升級,秒殺與抽獎活動成為平臺用戶量增長的催化劑,尤其是抽獎活動借助社交軟件的分享實(shí)現(xiàn)病毒式擴(kuò)散,高效吸引新用戶并引爆裂變效應(yīng),與傳統(tǒng)廣告方式相比,自發(fā)分享更能激發(fā)用戶興趣。但高并發(fā)處理成為技術(shù)攔路虎,考驗(yàn)著系統(tǒng)的穩(wěn)定性與用戶體驗(yàn),瞬時(shí)高并發(fā)流量的處理決定了活動的成敗。
面對這一核心挑戰(zhàn),設(shè)計(jì)了一款基于Redis集群的高并發(fā)APP秒殺抽獎系統(tǒng),以F5和Nginx構(gòu)建系統(tǒng)入口的負(fù)載均衡和高可用性,配合資源端、客戶端、服務(wù)端三端分離設(shè)計(jì),確保系統(tǒng)流量的平衡負(fù)載;結(jié)合Redis單線程與高并發(fā)的優(yōu)勢,通過Lua腳本控制技術(shù)保障命令的原子性,實(shí)現(xiàn)活動的高可靠性;異步發(fā)獎機(jī)制有效緩解秒殺抽獎期間的壓力,數(shù)據(jù)分級存儲策略和業(yè)務(wù)流量控制算法,使得系統(tǒng)運(yùn)行高效且穩(wěn)定,為活動成功提供堅(jiān)實(shí)的技術(shù)護(hù)航。
本文聚焦于系統(tǒng)在高并發(fā)下的穩(wěn)定運(yùn)行,旨在通過技術(shù)創(chuàng)新,優(yōu)化用戶體驗(yàn),為平臺活動的順利開展奠定技術(shù)基礎(chǔ)。
1高并發(fā)解決方案
鑒于公司業(yè)務(wù)特性和中國移動龐大的用戶規(guī)模,本文聚焦秒殺抽獎活動中的高并發(fā)、大流量挑戰(zhàn),優(yōu)化系統(tǒng)設(shè)計(jì),構(gòu)建高性能秒殺抽獎系統(tǒng)。關(guān)鍵技術(shù)點(diǎn)包括:
1)Redis緩存策略。Redis作為高性能鍵值存儲系統(tǒng),其單節(jié)點(diǎn)讀寫速度分別可達(dá)110000次/秒和81000次/秒[],所有操作具備原子性,確保了數(shù)據(jù)一致性。
2)F5硬件負(fù)載。F5設(shè)備用于網(wǎng)絡(luò)流量轉(zhuǎn)發(fā)與監(jiān)控,通過檢測后端狀態(tài)按策略(輪詢、最少連接、IP哈希)均衡分發(fā)請求,提升系統(tǒng)穩(wěn)定性和響應(yīng)速度。
3)Nginx軟負(fù)載。Nginx是一款高性能的HTTP和反向代理Web服務(wù)器,能經(jīng)受住高負(fù)載的考驗(yàn),通過輪詢算法將客戶端請求轉(zhuǎn)發(fā)到不同的后端服務(wù)器上[2],實(shí)現(xiàn)流量的負(fù)載均衡,提高服務(wù)的并發(fā)能力。
4)Kafka分布式流處理。Kafka是一個(gè)基于Zookeeper的分布式消息系統(tǒng),它具有高吞吐、低延遲、可靠性好、容錯(cuò)能力強(qiáng)的良好特性[3]。在高流量場景下通過Kafka緩存請求,確保下游服務(wù)按需處理,維持系統(tǒng)穩(wěn)定。
2 需求分析
秒殺抽獎系統(tǒng)主要包含兩部分功能需求,分別是用戶端的功能需求和運(yùn)營管理端的功能需求。用戶端的主要功能包括獎品查看、獎品使用、獎品列表、活動規(guī)則、活動分享等,使用戶可以了解活動的規(guī)則和參與方式,界面設(shè)計(jì)要求簡單、實(shí)用,方便用戶進(jìn)行抽獎和活動分享。運(yùn)營管理端主要供后端普通用戶和管理員使用,普通用戶可以創(chuàng)建、修改抽獎活動,活動創(chuàng)建好后提交管理員審核。管理員主要負(fù)責(zé)活動的審核,審核通過后抽獎活動即可正常進(jìn)行。
3 系統(tǒng)設(shè)計(jì)
活動總體架構(gòu)是基于面向服務(wù)(Service-OrientedArchitecture,SOA)的架構(gòu)設(shè)計(jì)[4],前后端分離部署,邏輯解耦,同時(shí)滿足B/S架構(gòu),跨平臺靈活展示,服務(wù)可擴(kuò)展性強(qiáng)。系統(tǒng)技術(shù)架構(gòu)如圖1所示。
前端通過瀏覽器進(jìn)行業(yè)務(wù)展示和配置,通過HTTP請求后端服務(wù)接口數(shù)據(jù),使用Vue框架進(jìn)行頁面邏輯編排和UI渲染。后端采用Java語言編寫,基于業(yè)務(wù)需求進(jìn)行模型歸類,分成不同的服務(wù)模塊,可同時(shí)提供給前端、模塊間及其他業(yè)務(wù)使用,模塊服務(wù)間依靠HTTP或RPC框架進(jìn)行通信。
數(shù)據(jù)存儲和記錄采用三級模式,將數(shù)據(jù)分為熱數(shù)據(jù)、活躍數(shù)據(jù)和持久化數(shù)據(jù)[5],分別采用不同數(shù)據(jù)庫進(jìn)行支撐。Redis高性能數(shù)據(jù)庫集群用于承載用戶熱數(shù)據(jù),作為緩存數(shù)據(jù)庫使用,支撐用戶高并發(fā)、高頻寫入、高響應(yīng)的使用場景,滿足用戶的體驗(yàn)需求。Elasticsearch(ES)實(shí)時(shí)引擎數(shù)據(jù)庫,用來存儲用戶獎品記錄、參與記錄等活躍數(shù)據(jù),滿足大數(shù)據(jù)量[、高寫入的場景。MySQL集群數(shù)據(jù)庫用來存儲核心配置數(shù)據(jù)、用戶獎品訂單等需要長期保存的數(shù)據(jù),保證數(shù)據(jù)的準(zhǔn)確、安全、可靠。
4功能設(shè)計(jì)
系統(tǒng)主要分為兩個(gè)部分:前端抽獎秒殺功能和后端管理功能。前端主要用于介紹抽獎活動、抽獎規(guī)則、秒殺抽獎、獎品使用等,幫助用戶了解具體的活動內(nèi)容以及進(jìn)行秒殺抽獎活動,前端功能如圖2所示。后端管理功能用于進(jìn)行抽獎活動的配置、抽獎活動發(fā)布審核、中獎名單的查看等,配合前端功能形成一個(gè)完整的秒殺抽獎系統(tǒng),后端功能如圖3所示。
抽獎秒殺系統(tǒng)用戶登 查看中獎獎品模塊 活動分享模塊 抽獎秒殺模塊 獎品使用模塊 引流功能模 評價(jià)管 系統(tǒng)管理錄 理
抽獎秒殺系統(tǒng)中獎明細(xì)查看模塊 抽獎活動列表模塊 抽獎活動創(chuàng)建模塊 獎品配置模塊 抽獎活動審核模塊 訪問統(tǒng)計(jì)模塊
4.1 前端秒殺抽獎功能設(shè)計(jì)
前端秒殺抽獎功能具體設(shè)計(jì)如下:
1)用戶登錄模塊。默認(rèn)的登錄機(jī)制是通過采用中國移動的移動認(rèn)證服務(wù),該服務(wù)能在移動網(wǎng)絡(luò)環(huán)境中自動鑒別用戶身份[7,一鍵登錄方式提升了用戶體驗(yàn)并增加了系統(tǒng)的安全性。
2)查看中獎獎品模塊。用戶可以查看秒殺活動中獎獎品,包括中獎活動、中獎時(shí)間、中獎的物品、獎品兌換使用日期、獎品是否已經(jīng)使用或者兌換。如果用戶沒有中獎記錄,則提示用戶暫時(shí)沒有中獎信息;獎品快到期未兌換時(shí),提示用戶及時(shí)進(jìn)行兌換。
3)抽獎秒殺模塊。用于顯示秒殺抽獎活動信息,包括秒殺的開始時(shí)間、結(jié)束時(shí)間、秒殺抽獎倒計(jì)時(shí)、活動的狀態(tài)信息(待開始、秒殺中、已結(jié)束),同時(shí)提供活動倒計(jì)時(shí)刷新校準(zhǔn)功能。在抽獎過程中增加用戶正在排隊(duì)的提示,中獎后提示用戶已秒殺成功,獎品正在發(fā)放,請稍后;對未中獎用戶推薦參與其他活動,增加頁面的引流用戶量。
4)獎品使用模塊。用來進(jìn)行獎品的兌換和使用,同時(shí)可以查看歷史獎品使用記錄,包括中獎活動信息、中獎信息、獎品是否使用、兌換時(shí)間等。
5)活動分享模塊。當(dāng)用戶觸發(fā)分享動作時(shí),后端接收到分享請求,根據(jù)活動ID、用戶ID信息生成一個(gè)唯一的分享碼(使用UUID + 時(shí)間戳)。將分享碼拼接到基礎(chǔ)分享URL之后,形成完整的分享鏈接。通過分享的鏈接,接收方可以解析URL直接訪問或了解活動詳情。
6)引流功能模塊。通過引流模塊可以加掛自己平臺的相關(guān)鏈接,增加系統(tǒng)或品牌的知名度,提升平臺的訪問量。
4.2 后端功能設(shè)計(jì)
系統(tǒng)后端功能具體設(shè)計(jì)如下:
1)中獎明細(xì)查看模塊。管理員可以查看中獎用戶的明細(xì)信息[8],包括中獎的活動名稱、中獎時(shí)間、中獎用戶的信息、獎品信息、獎品的使用時(shí)間、獎品的有效期等基本信息,可以根據(jù)關(guān)鍵字進(jìn)行搜索以及對中獎信息進(jìn)行導(dǎo)出。
2)抽獎活動列表模塊。用于管理員查看系統(tǒng)的現(xiàn)在的秒殺抽獎活動,包括抽獎活動的狀態(tài)(進(jìn)行中、已結(jié)束)、活動的運(yùn)行情況等信息。
3)抽獎活動創(chuàng)建模塊。管理員可以創(chuàng)建抽獎活動,主要包括活動的基本信息、參與條件、結(jié)果展示三個(gè)功能。活動的基本信息包括活動名稱、活動的開始和結(jié)束時(shí)間、參與方式(報(bào)名參與、邀請參與等方式);參與條件用于規(guī)定參與抽獎秒殺活動的用戶的基本條件,例如用戶活動的積分、活躍度等條件。結(jié)果展示用來控制抽獎首頁是否實(shí)時(shí)展示中獎信息。
4)獎品配置模塊。管理員可以選擇一個(gè)活動對獎品信息進(jìn)行配置,包括獎品種類、數(shù)量、價(jià)值以及中獎概率等,同時(shí)也可以對獎品信息進(jìn)行修改操作。
5)抽獎活動審核模塊。普通管理員通過平臺創(chuàng)建抽獎活動,創(chuàng)建完成后提交給系統(tǒng)超級管理員進(jìn)行審核,超級管理員可以對活動進(jìn)行修改,活動審核通過后才能正常開展。
6)訪問統(tǒng)計(jì)模塊。用于進(jìn)行活動的統(tǒng)計(jì),主要包括頁面的訪問總量、獨(dú)立訪客數(shù)量、日訪問量、通過活動新注冊的用戶量。
4.3 關(guān)鍵技術(shù)
4.3.1 Edis集群模式
為保證Redis的性能和高可用,采用5主5從的
Redis集群模式。在集群模式中,主節(jié)點(diǎn)用于提供讀寫服務(wù),從節(jié)點(diǎn)用于做冗余,有效防止單個(gè)節(jié)點(diǎn)異常造成系統(tǒng)不可用現(xiàn)象,同時(shí)數(shù)據(jù)分片到不同的節(jié)點(diǎn)上,提高數(shù)據(jù)的存儲量。
4.3.2 異步發(fā)獎模式
利用Redis單線程特性作為庫存管理器,通過Lua腳本保證多個(gè)命令的原子性,從而控制秒殺資格(即庫存)。資格秒殺成功后,修改Redis庫存,并將中獎用戶的手機(jī)號放入發(fā)獎消息隊(duì)列,由單獨(dú)的異步發(fā)獎服務(wù)進(jìn)行發(fā)獎。發(fā)獎時(shí)可以控制并發(fā)線程,從而控制發(fā)獎速率,避免對發(fā)獎系統(tǒng)造成壓力。異步發(fā)獎架構(gòu)如圖4所示。
4.3.3 三端分離設(shè)計(jì)
在大流量高并發(fā)的秒殺場景下,要盡可能分流流量,減輕服務(wù)器及網(wǎng)關(guān)的流量壓力。秒殺場景的流量主要分為核心邏輯接口流量、動態(tài)數(shù)據(jù)流量、靜態(tài)資源流量等,通過采用資源端、客戶端、服務(wù)端三端分離技術(shù)實(shí)現(xiàn)業(yè)務(wù)流量的平衡負(fù)載。
首先,將靜態(tài)資源上云,利用中國移動內(nèi)容分發(fā)網(wǎng)絡(luò)(ContentDeliveryNetwork,CDN)技術(shù)將靜態(tài)資源放在云端的CDN節(jié)點(diǎn)上,減輕了核心業(yè)務(wù)網(wǎng)關(guān)和業(yè)務(wù)服務(wù)器的壓力,實(shí)現(xiàn)了第一層的靜態(tài)流量剝離。其次,在首屏加載時(shí),將動態(tài)數(shù)據(jù)緩存在客戶端瀏覽器內(nèi),數(shù)據(jù)的生命周期為5分鐘。在生命周期內(nèi)讀取客戶端本地緩存數(shù)據(jù),數(shù)據(jù)過期后,下次頁面加載會請求最新的數(shù)據(jù)內(nèi)容。服務(wù)器動態(tài)數(shù)據(jù)的更新頻率也是5分鐘,與客戶端數(shù)據(jù)生命周期保持一致,減少了數(shù)據(jù)接口的請求頻率,實(shí)現(xiàn)了第二層的動態(tài)數(shù)據(jù)流量剝離。最后,服務(wù)端承載著核心的業(yè)務(wù)邏輯,包括定時(shí)秒殺、抽獎等邏輯,此時(shí)到達(dá)網(wǎng)關(guān)和服務(wù)器的流量已經(jīng)大大減少。
4.3.4腳本語言插入控制技術(shù)
使用Lua腳本實(shí)現(xiàn)數(shù)據(jù)一致性。Java自帶的組件需要先執(zhí)行GET操作,再根據(jù)結(jié)果執(zhí)行SET操作,這可能會出現(xiàn)條件競爭漏洞的情況,例如在執(zhí)行GET后但執(zhí)行SET之前,有其他客戶端修改了數(shù)據(jù)。Redis中的Lua腳本具有原子性[]:當(dāng)一個(gè)Lua腳本執(zhí)行時(shí),整個(gè)腳本作為一個(gè)單一的操作執(zhí)行,不會被其他命令中斷[0]。這樣可以使得腳本中的多個(gè)Redis操作被打包成一個(gè)原子操作,從而避免并發(fā)問題,確保操作的一致性。
使用Lua腳本提升操作效率。在秒殺場景中,由于并發(fā)量巨大,瞬間會有大量的請求涌入,網(wǎng)絡(luò)延遲也會影響用戶是否能夠搶到獎品。使用Java自帶組件操作Redis時(shí),如果需要執(zhí)行多個(gè)Redis操作,則需要多次調(diào)用,而使用Lua腳本可以將多個(gè)操作封裝到一個(gè)腳本中,減少操作次數(shù),節(jié)省網(wǎng)絡(luò)延遲損耗。
使用Lua腳本解決復(fù)雜邏輯問題。在操作Redis時(shí),可能會遇到一個(gè)事件動作需要多次操作Redis的邏輯。通過在Java代碼中嵌入Lua腳本,可以在Redis層面實(shí)現(xiàn)復(fù)雜的計(jì)數(shù)、過期、加鎖等操作,而無須將數(shù)據(jù)拉回Java進(jìn)行處理后再寫入Redis,從而減少數(shù)據(jù)回傳給Java應(yīng)用的必要性,能夠直接在緩存層完成一些較復(fù)雜的任務(wù)。
4.3.5業(yè)務(wù)流量控制算法
中國移動擁有上億用戶,使得抽獎秒殺活動流量存在較大的不確定性。對業(yè)務(wù)流量進(jìn)行合理控制不僅可以保證系統(tǒng)的穩(wěn)定運(yùn)行,還可以優(yōu)化用戶體驗(yàn),同時(shí)保證系統(tǒng)的安全性,防止惡意攻擊。系統(tǒng)中采用多輪概率算法和漏桶算法組合控制流量,保護(hù)下游系統(tǒng)安全。
多輪概率算法是一種基于隨機(jī)化思想的限流算法,通過多輪的概率性選擇來決定是否允許請求通過。引入隨機(jī)性使用戶請求更加公平,流量控制更加平滑。多輪概率算法如圖5所示。系統(tǒng)啟動時(shí)會設(shè)置一個(gè)初始概率
二
)。請求到達(dá)時(shí),系統(tǒng)隨機(jī)生成一個(gè)0到1之間的數(shù)
如果該數(shù)
則該請求通過,進(jìn)入秒殺業(yè)務(wù)流程;如果該數(shù)
,則將該用戶進(jìn)行標(biāo)識后放入臨時(shí)集合 S ,該集合綁定一個(gè)二輪概率
),并返回用戶再次請求的提示。當(dāng)用戶再次請求時(shí),檢查臨時(shí)集合S 中是否存在該用戶。如果存在,則再次生成一個(gè)0到1的隨機(jī)數(shù)
。如果該數(shù)
,則請求通過,并從集合 S 中刪除該用戶標(biāo)識;反之,則再次返回用戶再次請求的提示,以此循環(huán)。此算法可以根據(jù)當(dāng)前的流量、系統(tǒng)負(fù)載情況,通過人為動態(tài)調(diào)整概率閾值P 的大小和輪次,以適應(yīng)瞬時(shí)流量的變化,保護(hù)系統(tǒng)穩(wěn)定。

通過漏桶算法來平滑流量并限制數(shù)據(jù)傳輸速率,確保流量在較長時(shí)間內(nèi)保持穩(wěn)定。其實(shí)現(xiàn)原理是把請求流量比作水流,水流入桶中,桶有固定的容量 c 超過容量的請求將被丟棄。桶底有個(gè)小孔,請求以固定速率 r 從孔中流出,如果沒有請求流入,桶中的請求會逐步流出直至流空為止。在系統(tǒng)啟動時(shí)會提前預(yù)設(shè)秒殺庫存,此庫存可以認(rèn)為是桶的容量,秒殺邏輯就是向桶中加水的過程,加到桶中的請求即為秒殺成功,桶滿后的請求均為庫存耗盡,秒殺失敗。系統(tǒng)會單獨(dú)啟動一個(gè)或多個(gè)線程從桶中取出對應(yīng)的請求用戶進(jìn)行異步發(fā)獎,線程數(shù)量和間隔時(shí)間可以人工設(shè)定,從而控制發(fā)獎速率。在秒殺業(yè)務(wù)場景中,發(fā)獎系統(tǒng)是下游系統(tǒng),無法承受大流量高并發(fā)的沖擊。使用漏桶算法可以人工控制請求以恒定的速率流出,因此即使請求到達(dá)速率是突發(fā)的,系統(tǒng)的處理速率依然保持穩(wěn)定。這種流量可控、平滑的特性,避免了系統(tǒng)因突發(fā)流量而超載。
4.4 系統(tǒng)高可用設(shè)計(jì)
4.4.1 活動入口高可用
活動入口是一個(gè)公網(wǎng)域名,通過這個(gè)公網(wǎng)域名映射到公司內(nèi)部網(wǎng)絡(luò)的兩臺F5設(shè)備上,通過域名輪詢的方式將流量轉(zhuǎn)發(fā)到后端不同的F5設(shè)備上。通過這種方式可以保證入口的高可用性,同時(shí)可以防止系統(tǒng)流量過大導(dǎo)致入口壓力過大,影響系統(tǒng)可用性。此外,雙入口F5的設(shè)計(jì)還可以有效避免單臺F5故障導(dǎo)致的系統(tǒng)不可用,提高系統(tǒng)的穩(wěn)定性。系統(tǒng)入口架構(gòu)如圖6所示。
4. 4. 2 數(shù)據(jù)庫高可用
數(shù)據(jù)庫高可用結(jié)構(gòu)如圖7所示。系統(tǒng)數(shù)據(jù)庫采用了MySQL雙主架構(gòu)的設(shè)計(jì),雙主之間進(jìn)行數(shù)據(jù)的實(shí)時(shí)同步。為了避免數(shù)據(jù)庫出現(xiàn)循環(huán)復(fù)制現(xiàn)象,在兩臺主機(jī)上安裝了Keepalived,系統(tǒng)訪問數(shù)據(jù)庫通過Keepalived的虛擬IP地址(VirtualIPAddress,VIP)進(jìn)行訪問,實(shí)現(xiàn)數(shù)據(jù)庫的單向?qū)懭霃?fù)制。


在Keepalived配置文件中加入了vrrp_script模塊,用來執(zhí)行數(shù)據(jù)庫腳本,檢測數(shù)據(jù)庫的狀態(tài)。一旦檢測到數(shù)據(jù)庫異常,觸發(fā)Keepalived切換,自動實(shí)現(xiàn)VIP的切換漂移,從而實(shí)現(xiàn)數(shù)據(jù)的高可用性。同時(shí),數(shù)據(jù)庫采用分庫分表的方式,對請求量較大的表一一獎品配置表和中獎記錄表進(jìn)行分庫分表,提升數(shù)據(jù)庫的訪問效率。
keepalive組件vrrp_script配置
vrrp_scriptcheck_mysql{ script \"/etc/keepaiived/scripts/check mysql.sh\" interval 5 fail 15 rise1 timeout 60 weight -10
了
mysql狀態(tài)檢測腳本
#!bin/bash
/usr/bin/curl-basic127.0.0.1:3637
4.4.3 應(yīng)用雙中心部署
中國移動用戶量巨大,為了保障活動的高可用,系統(tǒng)在公司兩地機(jī)房同時(shí)部署,其中A機(jī)房作為主中心,B機(jī)房作為備中心使用。兩地機(jī)房數(shù)據(jù)庫數(shù)據(jù)通過公司數(shù)據(jù)同步平臺進(jìn)行實(shí)時(shí)同步。當(dāng)其中一個(gè)機(jī)房出現(xiàn)故障時(shí),可以通過修改公網(wǎng)域名映射地址,快速將流量切換到另一個(gè)機(jī)房,并同步切換兩機(jī)房數(shù)據(jù)庫的數(shù)據(jù)同步方向,保證數(shù)據(jù)庫的高可用性。應(yīng)用雙中心部署架構(gòu)如圖8所示。

4.5 系統(tǒng)安全設(shè)計(jì)
4.5.1 防止外掛刷接口設(shè)計(jì)
活動之前,秒殺相關(guān)的核心接口均隨機(jī)生成URL反饋給前端錯(cuò)誤的URL地址,在秒殺時(shí)刻動態(tài)給前端返回正確的接口URL。同時(shí)加上需要登錄操作,可以有效限制或減少外掛直接調(diào)接口秒殺對系統(tǒng)庫存造成的影響。
4.5.2 Nginx限流設(shè)計(jì)
在核心轉(zhuǎn)發(fā)Nginx上配置限流,當(dāng)流量過載時(shí)返回引導(dǎo)安撫頁,提高用戶體驗(yàn)和系統(tǒng)穩(wěn)定性。總體限制次數(shù),限制總量,快速失敗降級運(yùn)行,熔斷隔離防止雪崩。
4.5.3 系統(tǒng)監(jiān)控與日志審計(jì)
相關(guān)組件和服務(wù)統(tǒng)一接入公司監(jiān)控平臺,全鏈路實(shí)時(shí)監(jiān)控系統(tǒng)的運(yùn)行狀態(tài),并對運(yùn)行異常的服務(wù)進(jìn)行短信告警。系統(tǒng)的接口訪問日志和運(yùn)行日志統(tǒng)一上傳到公司日志平臺中長期保存。
5 系統(tǒng)應(yīng)用效果
該秒殺抽獎系統(tǒng)架構(gòu)已在“中國移動APPXXX充值日抽獎秒殺推廣”中使用。根據(jù)監(jiān)控?cái)?shù)據(jù)來分析,活動當(dāng)日最大支撐14萬/秒的并發(fā),系統(tǒng)運(yùn)行正常。Redis集群每秒查詢次數(shù)(QueriesPerSecond,QPS)峰值約61.2萬,其中單個(gè)節(jié)點(diǎn)最大15.5萬,期間獎品秒殺服務(wù)各節(jié)點(diǎn)負(fù)載正常,接口數(shù)據(jù)返回正常。Redis集群QPS和節(jié)點(diǎn)QPS如圖9、圖10所示。目前,該系統(tǒng)已陸續(xù)推廣至“中國移動XXX先鋒”“移動雙XXX”“新春XX節(jié)”“中國移動618”等活動中。在全網(wǎng)大型營銷活動中,整體為中國移動APP帶動拉新促活用戶共513萬戶/月。
6結(jié)論
本文探討了基于Redis集群的高并發(fā)APP秒殺抽獎系統(tǒng)的設(shè)計(jì)與實(shí)踐,提出了一種綜合性的解決方案。通過引入Redis緩存、軟硬負(fù)載均衡、Kafka分布式流處理、三端分離設(shè)計(jì)等技術(shù),構(gòu)建了高性能、高并發(fā)的秒殺抽獎系統(tǒng)架構(gòu)。針對秒殺抽獎系統(tǒng)瞬時(shí)高并發(fā)的特點(diǎn),采用多輪概率算法來控制高并發(fā)流量平滑進(jìn)入后端服務(wù)。秒殺過程中通過使用Lua腳本實(shí)現(xiàn)原子操作,秒殺成功后通過漏桶算法動態(tài)控制發(fā)獎速度,降低系統(tǒng)壓力。在系統(tǒng)的安全性和高可用方面,采用雙中心主備模式部署、核心接口URL隨機(jī)生成、系統(tǒng)全鏈路實(shí)時(shí)監(jiān)控和操作審計(jì),提升了系統(tǒng)的高可用性。下一步將在該秒殺抽獎系統(tǒng)的基礎(chǔ)上,深入研究Redis熱點(diǎn)數(shù)據(jù)的自動化監(jiān)控和請求動態(tài)均衡,進(jìn)一步提升Redis的性能。
參考文獻(xiàn):
[1]張積存,宋雪萍,費(fèi)繼友,等.基于車輛信息的大數(shù)據(jù)分析系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2023,40(1):11-16+37.
[2]胡科,陳勇.基于Nginx+Keepalived實(shí)現(xiàn)高可用集群及負(fù)載均衡配置與分析[J].微型電腦應(yīng)用,2022,38(5):200-202.
[3]趙潤發(fā),婁淵勝,葉楓,等.基于Flink的工業(yè)大數(shù)據(jù)平臺研究與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2022,43(3):886-894.
[4]王逸涵.基于SOA的政府?dāng)?shù)據(jù)開放平臺設(shè)計(jì)與建構(gòu)[D].哈爾濱:黑龍江大學(xué),2021.
[5]趙力帥,李耕宇,武振宇,等.基于分層異構(gòu)數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)歸檔技術(shù)[J].電信科學(xué),2018,34(S1):174-178.
[6]丁煜.“藍(lán)莓云超市”融媒電商小程序平臺設(shè)計(jì)與實(shí)現(xiàn)[J].廣播電視信息,2021,28(8):33-35.
[7]廖卓,姚敏,余筱,等.基于Keepalived和Mycat的MySQL數(shù)據(jù)庫高可用性設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2022,6(11):27-29+33.
[8]閆保正.基于微服務(wù)架構(gòu)之電商秒殺系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].上海:華東師范大學(xué),2021.
[9]李林飛.基于內(nèi)存數(shù)據(jù)庫的持久化方案的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2020.
[10]李詩云.基于內(nèi)存數(shù)據(jù)庫Redis的眾包系統(tǒng)性能優(yōu)化[D].杭州:浙江大學(xué),2016.
作者簡介:賈業(yè)武(1985—),男,漢族,河南信陽人,高級工程師,本科,研究方向:運(yùn)維管理體系建設(shè)、數(shù)字化標(biāo)準(zhǔn)化運(yùn)維體系建設(shè);通信作者:湯澤宇(1990一),男,漢族,河南孟州人,工程師,碩士研究生,研究方向:系統(tǒng)可用性架構(gòu)設(shè)計(jì);張國順(1992—),男,漢族,河南安陽人,工程師,碩士研究生,研究方向:智能化運(yùn)維;王旭峰(1980一),男,漢族,河南嵩縣人,工程師,碩士研究生,研究方向:計(jì)算機(jī)軟件與理論;馬世毓(1988一),男,漢族,河南焦作人,工程師,本科,研究方向:計(jì)算機(jī)軟件開發(fā);李政錫(1995一),男,漢族,河南焦作人,工程師,本科,研究方向:智能化運(yùn)維。