本發(fā)明涉及基于分布式無(wú)阻塞異步消息處理模式的拍賣(mài)競(jìng)價(jià)系統(tǒng)及其運(yùn)行方法,屬于電子商務(wù)技術(shù)領(lǐng)域。
背景技術(shù):
點(diǎn)拍網(wǎng)功能的核心部分是拍賣(mài)行業(yè)標(biāo)的的競(jìng)價(jià),是基于javaweb的互聯(lián)網(wǎng)實(shí)時(shí)競(jìng)價(jià)消息處理系統(tǒng)。點(diǎn)拍網(wǎng)目前采用阻塞式消息處理架構(gòu),在并發(fā)用戶量少時(shí),網(wǎng)站還可以應(yīng)付,當(dāng)用戶量大,特別是某個(gè)標(biāo)的競(jìng)買(mǎi)人多,同時(shí)競(jìng)價(jià)出價(jià)時(shí);或網(wǎng)站同時(shí)進(jìn)行多場(chǎng)拍賣(mài)會(huì)時(shí),用戶提交的信息往往得不到及時(shí)響應(yīng),系統(tǒng)負(fù)荷大,出現(xiàn)卡頓情況。
目前,點(diǎn)拍網(wǎng)目前的競(jìng)價(jià)處理核心代碼部分采用同步鎖機(jī)制,網(wǎng)站上所有標(biāo)的的競(jìng)價(jià)請(qǐng)求都要競(jìng)爭(zhēng)同一個(gè)同步鎖,即所有的競(jìng)價(jià)請(qǐng)求都要排隊(duì)等待獲得同步鎖,獲得鎖后才能得到處理,當(dāng)高并發(fā)競(jìng)價(jià)時(shí),系統(tǒng)響應(yīng)速度往往不及時(shí),用戶提交競(jìng)價(jià)請(qǐng)求后,要一直等待返回結(jié)果,用戶體驗(yàn)較差。點(diǎn)拍網(wǎng)采用單節(jié)點(diǎn)的tomcat,系統(tǒng)負(fù)載能力差,用戶量大時(shí),系統(tǒng)負(fù)載較大。
點(diǎn)拍網(wǎng)1.0版本架構(gòu)框圖如圖1所示,點(diǎn)拍網(wǎng)1.0版本用戶競(jìng)價(jià)過(guò)程示意圖如圖2所示,架構(gòu)存在的問(wèn)題:1.0競(jìng)價(jià)邏輯處理部分,使用線程同步鎖,整個(gè)網(wǎng)站,同一時(shí)刻只有一個(gè)出價(jià)請(qǐng)求被處理,其他都需要等待。在高并發(fā)競(jìng)價(jià)的情況下,用戶報(bào)價(jià)會(huì)出現(xiàn)卡頓。1.0版本用戶網(wǎng)頁(yè)競(jìng)價(jià)請(qǐng)求發(fā)送到后臺(tái)后,用戶需要一直等待后臺(tái)返回信息,獲得返回結(jié)果后,用戶終端才會(huì)顯示該消息。當(dāng)并發(fā)用戶請(qǐng)求多時(shí),由于系統(tǒng)對(duì)于每個(gè)請(qǐng)求都要查詢數(shù)據(jù)庫(kù),邏輯處理后返回,會(huì)導(dǎo)致新的請(qǐng)求無(wú)法被及時(shí)響應(yīng)。
1.0版本同步消息處理機(jī)制,后臺(tái)消息接收、處理模塊部署在同一節(jié)點(diǎn)內(nèi),模塊間是緊耦合,給升級(jí)維護(hù)代理不便,一個(gè)模塊的升級(jí)改造,必須停止其他模塊的服務(wù)。
中國(guó)專利文獻(xiàn)cn103530255a公開(kāi)了一種分布式異步事件的處理方法及系統(tǒng),該方法包括:以日志方式對(duì)各應(yīng)用服務(wù)器中的要處理的事件進(jìn)行處理,為每個(gè)要處理的事件創(chuàng)建第一日志消息并傳輸;將接收的第一日志消息存儲(chǔ)到消息隊(duì)列中;根據(jù)各訂閱服務(wù)器向中心服務(wù)器登記的要處理的消息的事件類別,將消息隊(duì)列中的與登記的事件類別相對(duì)應(yīng)的消息分別傳送至相應(yīng)的訂閱服務(wù)器;訂閱服務(wù)器對(duì)消息進(jìn)行處理并返回消息處理結(jié)果;將接收的第一日志消息和消息處理結(jié)果進(jìn)行對(duì)比,補(bǔ)償處理失敗或丟失的事件。該專利技術(shù)方案專注于消息隊(duì)列中消息是否準(zhǔn)確已送到。
中國(guó)專利文獻(xiàn)cn103856393a公開(kāi)了一種基于數(shù)據(jù)庫(kù)的分布式消息中間件系統(tǒng)及其運(yùn)行方法。該分布式消息中間件系統(tǒng)包括消息采集組件、數(shù)據(jù)庫(kù)、消息分發(fā)組件和消息交換組件,數(shù)據(jù)庫(kù)中包括消息容器;消息采集組件用于接收來(lái)自消息生產(chǎn)者的消息并交給消息交換組件;消息分發(fā)組件用于接收來(lái)自消息消費(fèi)者的消費(fèi)請(qǐng)求并交給消息交換組件;消息交換組件用于將來(lái)自消息采集組件的消息存入消息容器,還用于根據(jù)消費(fèi)請(qǐng)求從消息容器中讀出消息并交給消息分發(fā)組件以供給消息消費(fèi)者進(jìn)行消費(fèi)。該專利技術(shù)方案利用數(shù)據(jù)庫(kù)存儲(chǔ)消息,不適用于實(shí)時(shí)場(chǎng)景中。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提供了基于分布式無(wú)阻塞異步消息處理模式的拍賣(mài)競(jìng)價(jià)系統(tǒng);
本發(fā)明還提供了上述拍賣(mài)競(jìng)價(jià)系統(tǒng)的運(yùn)行方法;
本版本架構(gòu),即2.0版本,為解決1.0版本競(jìng)價(jià)模塊在應(yīng)答多用戶,高并發(fā)場(chǎng)景下遇到的問(wèn)題,采用最新的基于分布式無(wú)阻塞異步消息處理模式的技術(shù)架構(gòu)。
術(shù)語(yǔ)解釋:
1、javascript,一種直譯式腳本語(yǔ)言,是一種動(dòng)態(tài)類型、弱類型、基于原型的語(yǔ)言,內(nèi)置支持類型。它的解釋器被稱為javascript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語(yǔ)言,最早是在html(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)網(wǎng)頁(yè)上使用,用來(lái)給html網(wǎng)頁(yè)增加動(dòng)態(tài)功能。
2、socket,通常也稱作"套接字",用于描述ip地址和端口,是一個(gè)通信鏈的句柄,可以用來(lái)實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信。
本發(fā)明的技術(shù)方案為:
基于分布式無(wú)阻塞異步消息處理模式的拍賣(mài)競(jìng)價(jià)系統(tǒng),包括nginx服務(wù)器、node服務(wù)器、tomcat集群、消息隊(duì)列、競(jìng)價(jià)邏輯處理模塊集群、oracle數(shù)據(jù)庫(kù);
nginx服務(wù)器、tomcat集群、消息隊(duì)列、競(jìng)價(jià)邏輯處理模塊集群、node服務(wù)器依次連接;
用戶發(fā)起請(qǐng)求,通過(guò)所述nginx服務(wù)器發(fā)送至所述tomcat集群,所述tomcat集群將該請(qǐng)求轉(zhuǎn)換成消息,將消息存入所述消息隊(duì)列,并反饋給用戶響應(yīng),該反饋用于提示用戶請(qǐng)求已被接收并正在進(jìn)行處理,與此同時(shí),所述競(jìng)價(jià)邏輯處理模塊集群對(duì)所述消息隊(duì)列中的消息進(jìn)行處理,并將處理結(jié)果通過(guò)所述node服務(wù)器通知對(duì)應(yīng)的用戶;
所述nginx服務(wù)器還用于均衡負(fù)載,根據(jù)不同的策略進(jìn)行配置,將請(qǐng)求均衡轉(zhuǎn)發(fā)到tomcat集群上;所述oracle數(shù)據(jù)庫(kù)用于存儲(chǔ)拍賣(mài)競(jìng)價(jià)系統(tǒng)的業(yè)務(wù)數(shù)據(jù)。
nginx服務(wù)器作為http反向代理服務(wù)器,接收用戶網(wǎng)頁(yè)頁(yè)面的請(qǐng)求,轉(zhuǎn)發(fā)到tomcat集群。在oracle數(shù)據(jù)庫(kù)中建立拍賣(mài)系統(tǒng)相關(guān)業(yè)務(wù)庫(kù)表,存儲(chǔ)標(biāo)的、競(jìng)價(jià)信息等業(yè)務(wù)數(shù)據(jù)。
消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用解耦、異步消息、流量削鋒等問(wèn)題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu),是大型分布式系統(tǒng)不可缺少的中間件。點(diǎn)拍網(wǎng)1.0版本同步消息處理機(jī)制,后臺(tái)消息接收、處理模塊部署在同一節(jié)點(diǎn)內(nèi),模塊間是緊耦合,給升級(jí)維護(hù)代理不便,一個(gè)模塊的升級(jí)改造,必須停止其他模塊的服務(wù)。本發(fā)明拍賣(mài)競(jìng)價(jià)系統(tǒng),即點(diǎn)拍網(wǎng)2.0版本通過(guò)消息隊(duì)列,將消息接收、處理、消息通知模塊分開(kāi),編碼上只每個(gè)模塊只需關(guān)心與別的模塊的接口,實(shí)現(xiàn)自身的功能即可;物理上模塊間可單獨(dú)部署,方便升級(jí)、擴(kuò)容、維護(hù)。
根據(jù)本發(fā)明優(yōu)選的,tomcat集群包括若干個(gè)tomcat節(jié)點(diǎn),每個(gè)tomcat節(jié)點(diǎn)包括若干個(gè)線程,通過(guò)redis在各個(gè)tomcat節(jié)點(diǎn)之間進(jìn)行session信息共享。
通過(guò)redis在各個(gè)tomcat節(jié)點(diǎn)之間進(jìn)行session信息共享,解決了用戶請(qǐng)求被分到不同tomcat節(jié)點(diǎn),導(dǎo)致tomcat節(jié)點(diǎn)session信息不同步問(wèn)題。集群方案增加了整個(gè)系統(tǒng)的總體負(fù)載,支持用戶數(shù)量,并發(fā)數(shù)量更多;集群可以有效解決系統(tǒng)的單點(diǎn)故障問(wèn)題,一個(gè)節(jié)點(diǎn)出現(xiàn)問(wèn)題,無(wú)法提供服務(wù)時(shí),系統(tǒng)可以自動(dòng)切換到其他節(jié)點(diǎn);集群負(fù)載分擔(dān),可降低每個(gè)節(jié)點(diǎn)的壓力,增加系統(tǒng)整體的響應(yīng)速度。
根據(jù)本發(fā)明優(yōu)選的,所述競(jìng)價(jià)邏輯處理模塊集群包括若干個(gè)server節(jié)點(diǎn),每個(gè)server節(jié)點(diǎn)包括若干個(gè)線程,所述某一個(gè)線程只訂閱同一個(gè)標(biāo)的的消息。
解決了用戶請(qǐng)求被分到不同tomcat節(jié)點(diǎn),導(dǎo)致tomcat節(jié)點(diǎn)session信息不同步問(wèn)題。
根據(jù)本發(fā)明優(yōu)選的,所述拍賣(mài)競(jìng)價(jià)系統(tǒng)還包括redis內(nèi)存數(shù)據(jù)庫(kù),用于緩存競(jìng)價(jià)過(guò)程中需要的數(shù)據(jù),并在競(jìng)價(jià)完成后,將所述redis內(nèi)存數(shù)據(jù)庫(kù)中緩存的數(shù)據(jù)持久化到所述oracle數(shù)據(jù)庫(kù)中。
高并發(fā)狀況下,頻繁的數(shù)據(jù)庫(kù)訪問(wèn)、數(shù)據(jù)庫(kù)鎖機(jī)制等嚴(yán)重影響系統(tǒng)性能,用戶請(qǐng)求得不到及時(shí)響應(yīng),本發(fā)明將數(shù)據(jù)緩存在redis內(nèi)存數(shù)據(jù)庫(kù)中,數(shù)據(jù)訪問(wèn)速度大幅度提升,減輕了oracle數(shù)據(jù)庫(kù)的壓力,提高了系統(tǒng)響應(yīng)速度。
上述拍賣(mài)競(jìng)價(jià)系統(tǒng)實(shí)現(xiàn)異步消息處理、消息定向發(fā)送的方法,包括步驟如下:
(1)用戶通過(guò)用戶終端進(jìn)入目標(biāo)標(biāo)的競(jìng)價(jià)頁(yè)面,頁(yè)面采用javascript生成20位隨機(jī)碼,與所述node服務(wù)器建立長(zhǎng)連接,所述node服務(wù)器在哈希表中記錄該隨機(jī)碼與長(zhǎng)連接socket的關(guān)聯(lián)關(guān)系,即隨機(jī)碼與長(zhǎng)連接socket的映射關(guān)系;
(2)用戶通過(guò)用戶終端發(fā)起請(qǐng)求,將該請(qǐng)求以及生成的隨機(jī)碼通過(guò)所述nginx服務(wù)器發(fā)送至所述tomcat集群,所述tomcat集群接收到該請(qǐng)求后,將請(qǐng)求轉(zhuǎn)換成消息,并將該消息以及隨機(jī)碼放入消息隊(duì)列,立即返回用戶“消息已提交”;
(3)所述競(jìng)價(jià)邏輯處理模塊集群訂閱消息隊(duì)列中的消息,所述競(jìng)價(jià)邏輯處理模塊集群中的線程只訂閱同一標(biāo)的的消息,即消息隊(duì)列中的某一頻道;通過(guò)這種方式也保障了每個(gè)業(yè)務(wù)邏輯處理模塊線程只處理同一標(biāo)的的消息,從而實(shí)現(xiàn)了標(biāo)的間消息的隔離處理。
(4)所述競(jìng)價(jià)邏輯處理模塊集群對(duì)收到的消息進(jìn)行業(yè)務(wù)邏輯分析處理,將消息處理結(jié)果,發(fā)送至所述node服務(wù)器;
(5)所述node服務(wù)器解析所述競(jìng)價(jià)邏輯處理模塊集群發(fā)送的消息處理結(jié)果,從消息處理結(jié)果中解析出所述隨機(jī)碼,以此隨機(jī)碼作為key,從哈希表中獲取對(duì)應(yīng)的長(zhǎng)連接socket,采用該長(zhǎng)連接socket將消息處理結(jié)果準(zhǔn)確發(fā)送至用戶終端;
(6)用戶收到所述node服務(wù)器發(fā)送的消息處理結(jié)果后,在頁(yè)面上顯示用戶提交請(qǐng)求的處理結(jié)果。
通過(guò)nodewebsocket消息單播,實(shí)現(xiàn)了用戶消息異步處理過(guò)程中用戶請(qǐng)求定向返回的問(wèn)題。異步消息處理機(jī)制,增加了系統(tǒng)處理高并發(fā)請(qǐng)求的能力。采用消息隊(duì)列,將不同標(biāo)的處理相互隔離。
本發(fā)明的有益效果為:
1、無(wú)阻塞的異步消息處理機(jī)制:在i/o受限等情況下,異步消息處理機(jī)制能提高系統(tǒng)的吞吐量,系統(tǒng)能支持更多的用戶量,和更大數(shù)量的并發(fā)請(qǐng)求。異步消息處理能增強(qiáng)系統(tǒng)健壯性,降低了模塊間的耦合,各個(gè)模塊各司其職,分工明確,異步能改善用戶體驗(yàn),用戶請(qǐng)求能及時(shí)得到響應(yīng),尤其是在大用戶量,高并發(fā)的情景下。
2、分布式部署:通過(guò)對(duì)業(yè)務(wù)進(jìn)行拆分,將最核心的競(jìng)價(jià)邏輯處理模塊集群獨(dú)立出來(lái),與原先的后臺(tái)服務(wù)彼此獨(dú)立,單獨(dú)部署,每個(gè)模塊的功各司其職,降低了系統(tǒng)的緊耦合程度。業(yè)務(wù)邏輯架構(gòu)清晰。采用分布式部署,根據(jù)模塊的負(fù)載情況,可以橫向進(jìn)行擴(kuò)容。如果一個(gè)模塊的壓力較大,可以增加幾個(gè)節(jié)點(diǎn),對(duì)系統(tǒng)其他模塊無(wú)影響。
3、redis內(nèi)存數(shù)據(jù)庫(kù)的引入,消除了高并發(fā)場(chǎng)景下,數(shù)據(jù)庫(kù)瓶頸問(wèn)題,系統(tǒng)響應(yīng)速度加快。
4、采用消息隊(duì)列,將不同標(biāo)的處理相互隔離。
5、由原先的所有標(biāo)的競(jìng)拍同步,改為同一標(biāo)的同步處理。標(biāo)的與標(biāo)的之間的競(jìng)價(jià)彼此無(wú)關(guān)聯(lián),無(wú)需競(jìng)爭(zhēng)同步鎖,解決了高并發(fā)時(shí),用戶界面出現(xiàn)等待時(shí)機(jī)過(guò)長(zhǎng),卡頓等現(xiàn)象。
附圖說(shuō)明
圖1為點(diǎn)拍網(wǎng)1.0版本架構(gòu)框圖;
圖2為點(diǎn)拍網(wǎng)1.0版本用戶競(jìng)價(jià)過(guò)程示意圖;
圖3為本發(fā)明基于分布式無(wú)阻塞異步消息處理模式的拍賣(mài)競(jìng)價(jià)系統(tǒng)的架構(gòu)框圖。
具體實(shí)施方式
下面結(jié)合說(shuō)明書(shū)附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步限定,但不限于此。
實(shí)施例1
基于分布式無(wú)阻塞異步消息處理模式的拍賣(mài)競(jìng)價(jià)系統(tǒng),如圖3所示,包括nginx服務(wù)器、node服務(wù)器、tomcat集群、消息隊(duì)列、競(jìng)價(jià)邏輯處理模塊集群、oracle數(shù)據(jù)庫(kù);nginx服務(wù)器、tomcat集群、消息隊(duì)列、競(jìng)價(jià)邏輯處理模塊集群、node服務(wù)器依次連接;
用戶發(fā)起請(qǐng)求,通過(guò)nginx服務(wù)器發(fā)送至tomcat集群,tomcat集群將該請(qǐng)求轉(zhuǎn)換成消息,將消息存入消息隊(duì)列,并反饋給用戶響應(yīng),該反饋用于提示用戶請(qǐng)求已被接收并正在進(jìn)行處理,與此同時(shí),競(jìng)價(jià)邏輯處理模塊集群對(duì)消息隊(duì)列中的消息進(jìn)行處理,并將處理結(jié)果通過(guò)node服務(wù)器通知對(duì)應(yīng)的用戶;
nginx服務(wù)器還用于均衡負(fù)載,根據(jù)不同的策略進(jìn)行配置,例如對(duì)不同的tomcat節(jié)點(diǎn)分配權(quán)重值,將請(qǐng)求均衡轉(zhuǎn)發(fā)到tomcat集群上;oracle數(shù)據(jù)庫(kù)用于存儲(chǔ)拍賣(mài)競(jìng)價(jià)系統(tǒng)的業(yè)務(wù)數(shù)據(jù)。
nginx服務(wù)器作為http反向代理服務(wù)器,接收用戶網(wǎng)頁(yè)頁(yè)面的請(qǐng)求,轉(zhuǎn)發(fā)到tomcat集群。在oracle數(shù)據(jù)庫(kù)中建立拍賣(mài)系統(tǒng)相關(guān)業(yè)務(wù)庫(kù)表,存儲(chǔ)標(biāo)的、競(jìng)價(jià)信息等業(yè)務(wù)數(shù)據(jù)。
消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用解耦、異步消息、流量削鋒等問(wèn)題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu),是大型分布式系統(tǒng)不可缺少的中間件。點(diǎn)拍網(wǎng)1.0版本同步消息處理機(jī)制,后臺(tái)消息接收、處理模塊部署在同一節(jié)點(diǎn)內(nèi),模塊間是緊耦合,給升級(jí)維護(hù)代理不便,一個(gè)模塊的升級(jí)改造,必須停止其他模塊的服務(wù)。本發(fā)明拍賣(mài)競(jìng)價(jià)系統(tǒng),即點(diǎn)拍網(wǎng)2.0版本通過(guò)消息隊(duì)列,將消息接收、處理、消息通知模塊分開(kāi),編碼上只每個(gè)模塊只需關(guān)心與別的模塊的接口,實(shí)現(xiàn)自身的功能即可;物理上模塊間可單獨(dú)部署,方便升級(jí)、擴(kuò)容、維護(hù)。
tomcat集群由3個(gè)tomcat節(jié)點(diǎn)組成,每個(gè)tomcat節(jié)點(diǎn)均包括n個(gè)線程,具體包括tomcat1節(jié)點(diǎn)、tomcat2節(jié)點(diǎn)、tomcat3節(jié)點(diǎn),應(yīng)用程序(線程)部署在tomcat節(jié)點(diǎn)中,提供web后臺(tái)服務(wù),通過(guò)redis在各個(gè)tomcat節(jié)點(diǎn)之間進(jìn)行session信息共享。
通過(guò)redis在各個(gè)tomcat節(jié)點(diǎn)之間進(jìn)行session信息共享,解決了用戶請(qǐng)求被分到不同tomcat節(jié)點(diǎn),導(dǎo)致tomcat節(jié)點(diǎn)session信息不同步問(wèn)題。集群方案增加了整個(gè)系統(tǒng)的總體負(fù)載,支持用戶數(shù)量,并發(fā)數(shù)量更多;集群可以有效解決系統(tǒng)的單點(diǎn)故障問(wèn)題,一個(gè)節(jié)點(diǎn)出現(xiàn)問(wèn)題,無(wú)法提供服務(wù)時(shí),系統(tǒng)可以自動(dòng)切換到其他節(jié)點(diǎn);集群負(fù)載分擔(dān),可降低每個(gè)節(jié)點(diǎn)的壓力,增加系統(tǒng)整體的響應(yīng)速度。
競(jìng)價(jià)邏輯處理模塊集群包括n個(gè)server節(jié)點(diǎn),每個(gè)server節(jié)點(diǎn)包括若干個(gè)線程,某一個(gè)線程只訂閱同一個(gè)標(biāo)的的消息,線程a只能訂閱關(guān)于標(biāo)的a的消息,包括消息隊(duì)列中msga-1、msga-2;線程b只能訂閱關(guān)于標(biāo)的b的消息,包括消息隊(duì)列中msgb-1,線程c只能訂閱關(guān)于標(biāo)的c的消息,包括消息隊(duì)列中msgc-1,等等。解決了用戶請(qǐng)求被分到不同tomcat節(jié)點(diǎn),導(dǎo)致tomcat節(jié)點(diǎn)session信息不同步問(wèn)題。
拍賣(mài)競(jìng)價(jià)系統(tǒng)還包括redis內(nèi)存數(shù)據(jù)庫(kù),用于緩存競(jìng)價(jià)過(guò)程中需要的數(shù)據(jù),并在競(jìng)價(jià)完成后,將redis內(nèi)存數(shù)據(jù)庫(kù)中緩存的數(shù)據(jù)持久化到oracle數(shù)據(jù)庫(kù)中。redis內(nèi)存數(shù)據(jù)庫(kù),作為拍賣(mài)系統(tǒng)的高速緩存,緩存標(biāo)的信息,競(jìng)價(jià)信息。后臺(tái)程序競(jìng)價(jià)過(guò)程中對(duì)redis數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě),標(biāo)的競(jìng)價(jià)結(jié)束后,將redis中的相關(guān)數(shù)據(jù)保存到oracle數(shù)據(jù)庫(kù)中,同時(shí)redis中刪除該部分信息。
高并發(fā)狀況下,頻繁的數(shù)據(jù)庫(kù)訪問(wèn)、數(shù)據(jù)庫(kù)鎖機(jī)制等嚴(yán)重影響系統(tǒng)性能,用戶請(qǐng)求得不到及時(shí)響應(yīng),本發(fā)明將數(shù)據(jù)緩存在redis內(nèi)存數(shù)據(jù)庫(kù)中,數(shù)據(jù)訪問(wèn)速度大幅度提升,減輕了oracle數(shù)據(jù)庫(kù)的壓力,提高了系統(tǒng)響應(yīng)速度。
實(shí)施例2
實(shí)施例1所述拍賣(mài)競(jìng)價(jià)系統(tǒng)實(shí)現(xiàn)異步消息處理、消息定向發(fā)送的方法,包括步驟如下:
(1)用戶通過(guò)用戶終端進(jìn)入目標(biāo)標(biāo)的競(jìng)價(jià)頁(yè)面,頁(yè)面采用javascript生成20位隨機(jī)碼,與node服務(wù)器建立長(zhǎng)連接,node服務(wù)器在哈希表中記錄該隨機(jī)碼與長(zhǎng)連接socket的關(guān)聯(lián)關(guān)系,即隨機(jī)碼與長(zhǎng)連接socket的映射關(guān)系;
(2)用戶通過(guò)用戶終端發(fā)起請(qǐng)求,將該請(qǐng)求以及生成的隨機(jī)碼通過(guò)nginx服務(wù)器發(fā)送至tomcat集群,tomcat集群接收到該請(qǐng)求后,將請(qǐng)求轉(zhuǎn)換成消息,并將該消息以及隨機(jī)碼放入消息隊(duì)列,立即返回用戶“消息已提交”;
(3)競(jìng)價(jià)邏輯處理模塊集群訂閱消息隊(duì)列中的消息,競(jìng)價(jià)邏輯處理模塊集群中的線程只訂閱同一標(biāo)的的消息,即消息隊(duì)列中的某一頻道;通過(guò)這種方式也保障了每個(gè)業(yè)務(wù)邏輯處理模塊線程只處理同一標(biāo)的的消息,從而實(shí)現(xiàn)了標(biāo)的間消息的隔離處理。
(4)競(jìng)價(jià)邏輯處理模塊集群對(duì)收到的消息進(jìn)行業(yè)務(wù)邏輯分析處理,將消息處理結(jié)果,發(fā)送至node服務(wù)器;
(5)node服務(wù)器解析競(jìng)價(jià)邏輯處理模塊集群發(fā)送的消息處理結(jié)果,從消息處理結(jié)果中解析出隨機(jī)碼,以此隨機(jī)碼作為key,從哈希表中獲取對(duì)應(yīng)的長(zhǎng)連接socket,采用該長(zhǎng)連接socket將消息處理結(jié)果準(zhǔn)確發(fā)送至用戶終端;
(6)用戶收到所述node服務(wù)器發(fā)送的消息處理結(jié)果后,在頁(yè)面上顯示用戶提交請(qǐng)求的處理結(jié)果。
在i/o受限等情況下,異步消息處理機(jī)制能提高系統(tǒng)的吞吐量,系統(tǒng)能支持更多的用戶量,和更大數(shù)量的并發(fā)請(qǐng)求。異步消息處理能增強(qiáng)系統(tǒng)健壯性,降低了模塊間的耦合,各個(gè)模塊各司其職,分工明確,異步能改善用戶體驗(yàn),用戶請(qǐng)求能及時(shí)得到響應(yīng),尤其是在大用戶量,高并發(fā)的情景下。