一種提供票務(wù)支持的票池中間件的構(gòu)建、購(gòu)票及鎖票方法
【專利說(shuō)明】一種提供票務(wù)支持的票池中間件的構(gòu)建、購(gòu)票及鎖票方法
[0001]
技術(shù)領(lǐng)域
[0002]本發(fā)明涉及中間件領(lǐng)域,特別涉及一種提供票務(wù)支持的票池中間件的構(gòu)建、購(gòu)票及鎖票方法。
[0003]
【背景技術(shù)】
[0004]很多商業(yè)活動(dòng)中都存在一種業(yè)務(wù)一一憑票入座,比如車票、電影票、熱門演唱會(huì)的門票等等。它們有兩個(gè)共同的特點(diǎn):一是稀缺性,票是有限的,越是熱門的票爭(zhēng)搶越激烈;二是準(zhǔn)確性,票與座要一一對(duì)應(yīng),一張票只能賣給一個(gè)人。這類售票系統(tǒng)在邏輯上往往可以抽象出一個(gè)“池”,賣方可以向這個(gè)池加票、減票,而買方可以從這個(gè)池中取票。這個(gè)池也就是J票池。
[0005]傳統(tǒng)的售票系統(tǒng)往往采用關(guān)系型數(shù)據(jù)庫(kù)(例如SQL Server、MySQL)來(lái)實(shí)現(xiàn)票池,但是面對(duì)同一票池、甚至是對(duì)同一張票的大量并發(fā)操作,往往在高吞吐量和高可靠性之間難以兩全,極有可能會(huì)出現(xiàn)一張票被賣給多個(gè)人、實(shí)時(shí)性低、響應(yīng)速度非常慢、不支持靈活的票務(wù)操作的情況。因此非常有必要設(shè)計(jì)一種支持高并發(fā)、高可用的健壯的票池中間件,在支持各類票務(wù)操作的同時(shí),能夠以中間件的形式,適用于各種票務(wù)活動(dòng)場(chǎng)景。
[0006]
【發(fā)明內(nèi)容】
[0007]針對(duì)現(xiàn)有技術(shù)存在的缺陷和不足之處,本發(fā)明提供了一種提供票務(wù)支持的票池中間件的構(gòu)建、購(gòu)票及鎖票方法,同時(shí)適用于大范圍(比如全省聯(lián)網(wǎng)、全國(guó)聯(lián)網(wǎng))的票務(wù)需求。
[0008]為了解決上述技術(shù)問(wèn)題,提出了一種提供票務(wù)支持的票池中間件構(gòu)建方法,如下所述:
搭建單個(gè)票池集群;通過(guò)構(gòu)建底層的一個(gè)主票池服務(wù)器和至少一個(gè)從票池服務(wù)器,η個(gè)中間層的哨兵應(yīng)用服務(wù)器,η為奇數(shù)且大于3,至少2個(gè)上層的監(jiān)視器構(gòu)成主從機(jī)制和哨兵機(jī)制;所述的票池中間件包括多個(gè)票池集群;具體包括如下步驟;
步驟1:在票池集群中采取相應(yīng)的數(shù)據(jù)結(jié)構(gòu)表示各類票務(wù)數(shù)據(jù);將各項(xiàng)票務(wù)操作活動(dòng)的讀寫屬性,在票池中間層的哨兵應(yīng)用服務(wù)器的配置文件中進(jìn)行配置;
步驟2:在從票池服務(wù)器的配置文件中配置主票池服務(wù)器的IP地址和端口號(hào),以至少一個(gè)底層的從票池服務(wù)器對(duì)一個(gè)主票池服務(wù)器的方式進(jìn)行配置;
步驟3:在至少一個(gè)底層的從票池服務(wù)器對(duì)一個(gè)主票池服務(wù)器配置基礎(chǔ)上,使用η個(gè)中間層的哨兵應(yīng)用服務(wù)器對(duì)主從票池服務(wù)器的監(jiān)視與管理,η為奇數(shù)且大于3 ;
步驟4:設(shè)置至少2個(gè)上層的監(jiān)視器檢測(cè)每個(gè)服務(wù)器的狀態(tài);并向外發(fā)布信息;單個(gè)票池集群搭建完成,所述的票池中間件包括多個(gè)票池集群,每個(gè)票池集群有唯一的ID標(biāo)識(shí),票池中間件構(gòu)建完成。
優(yōu)選的,所述的票池集群基于Redis內(nèi)存數(shù)據(jù)庫(kù)作為構(gòu)建票池的存儲(chǔ)基礎(chǔ)。
[0009]優(yōu)選的,所述的步驟I中的票池服務(wù)器數(shù)據(jù)結(jié)構(gòu)特征如下:
1.車票信息使用“日期、班次號(hào):座位號(hào)”的鍵值形式進(jìn)行標(biāo)識(shí);
2.日期班次有3個(gè)集合,使用的鍵值分別是:“日期:班次號(hào)”、“日期:班次號(hào):SaleLocked”、“ 日期:班次號(hào):CommandLocked” ;
其中,“日期:班次號(hào)”表示某個(gè)日期班次的余票集,“日期:班次號(hào)-SaleLocked”表示某個(gè)日期班次的售票鎖票集,“日期:班次號(hào)KommandLocked”表示某個(gè)日期班次的管理鎖西隹
[0010]一種利用權(quán)利要求3所述票池中間件的購(gòu)票方法,票池中間件接收售票客戶端的票務(wù)請(qǐng)求,票池集群之間由VPN互聯(lián),票務(wù)請(qǐng)求由票池中間件代理服務(wù)器進(jìn)行代理路由,然后定位到票池集群上;票池中間件再完成購(gòu)票請(qǐng)求,返回購(gòu)票或查詢列表;
具體包括下述步驟:
步驟1:售票客戶端首先根據(jù)日期、出發(fā)和到達(dá)站點(diǎn)信息,就近查詢分布式緩存,獲取到具體的日期班次信息;然后,向票池中間件,發(fā)起查詢余票的請(qǐng)求,輸入數(shù)據(jù)是出發(fā)站點(diǎn)的ID、以及一組日期班次集;
票池中間件根據(jù)請(qǐng)求中的票池集群ID,對(duì)于請(qǐng)求進(jìn)行路由,將請(qǐng)求重定位到票池集群中水平分割之后、存儲(chǔ)了指定始發(fā)站所有票據(jù)信息的票池集群,同時(shí)將一組日期班次集傳入,作為進(jìn)一步查詢余票信息的輸入數(shù)據(jù);
票池集群將根據(jù)輸入的日期班次集,逐一地在內(nèi)存數(shù)據(jù)庫(kù)中查找指定班次對(duì)應(yīng)的班次余票集、對(duì)應(yīng)班次的售票鎖票集、對(duì)應(yīng)班次的管理鎖票集,將所有集合的內(nèi)容匯總描述指定日期班次集;
步驟2:售票客戶端根據(jù)票池集群中獲取到日期班次集,在本地進(jìn)行指定座位號(hào)、或者隨機(jī)選座方式,進(jìn)行購(gòu)票;對(duì)于指定座位號(hào)的購(gòu)票方式,將日期班次集、以及每個(gè)日期班次集關(guān)聯(lián)的一個(gè)座位號(hào)的列表傳遞給票池集群;對(duì)于隨機(jī)選座方式,指定購(gòu)票信息,然后將日期班次集、以及每個(gè)日期班次集關(guān)聯(lián)的待購(gòu)張數(shù)信息傳遞給票池集群;
步驟3:票池集群根據(jù)售票客戶端傳入的購(gòu)票信息,對(duì)待購(gòu)票據(jù)進(jìn)行售票鎖票操作;對(duì)于指定座位號(hào)的購(gòu)票方式,在接收到日期班次集、以及每個(gè)日期班次集關(guān)聯(lián)的一個(gè)座位號(hào)的列表后,對(duì)票池集群中的實(shí)時(shí)票據(jù)進(jìn)行逐張售賣活動(dòng);
對(duì)于隨機(jī)選座方式,票池集群將根據(jù)連續(xù)優(yōu)先原則,從低號(hào)段開(kāi)始,為售票客戶端請(qǐng)求生成一個(gè)座位號(hào)列表,對(duì)車票進(jìn)行加鎖處理,并將成功鎖定的票據(jù),返回給售票客戶端;在票池集群中,以會(huì)話Sess1n的形式記錄每個(gè)售票客戶端的所有鎖票請(qǐng)求,作為下一步售票的依據(jù);
步驟4:售票客戶端根據(jù)請(qǐng)求繼續(xù)進(jìn)行票據(jù)的購(gòu)買或者放棄票據(jù)的購(gòu)買;
步驟5:票池集群將根據(jù)售票客戶端的請(qǐng)求,逐張進(jìn)行票據(jù)售賣;對(duì)于每一張票據(jù),首先將待售車票從相應(yīng)的日期班次集中移除、從相應(yīng)的日期班次售票鎖票集中移除,完成單張車票的售賣;
步驟6:如果進(jìn)行售賣活動(dòng)時(shí)鎖定成功的票超過(guò)了售票鎖的時(shí)限,自動(dòng)回到票池中變成待售狀態(tài);否則,票池集群將會(huì)在售票客戶端提交購(gòu)票請(qǐng)求后,返回給售票客戶端完整的、成功購(gòu)票的列表;
步驟7:鎖定成功之后,票池中間件將成功購(gòu)得的票加入到對(duì)應(yīng)日期班次集的售票鎖票集;
步驟8:結(jié)束。
[0011]一種利用權(quán)利要求3所述的票池中間件的鎖票方法,具體包括下述步驟:
步驟1:管理客戶端根據(jù)起始站點(diǎn)、日期、班次號(hào)、所屬票池集群ID查詢班次計(jì)劃;選擇要管理的班次計(jì)劃,所述的班次計(jì)劃包括日期和班次號(hào)標(biāo)識(shí),查詢所有票的狀態(tài),包括被售票鎖定、被管理鎖定、可用、異常;對(duì)被售票鎖定、被管理鎖定和異常狀態(tài)的票,不進(jìn)行下一步操作;
步驟2:對(duì)于選擇指定座位號(hào)的管理員請(qǐng)求,指定數(shù)目,生成請(qǐng)求的座位號(hào)列表,請(qǐng)求票池中間件進(jìn)行鎖定;票池中間件遍歷輸入座位號(hào)列表,逐張進(jìn)行鎖定操作,如鎖票不成功,則返回鎖定成功的座位號(hào)列表,得到管理鎖票集;
步驟4:對(duì)于隨機(jī)鎖票,票池中間件先查詢?cè)摪啻斡?jì)劃的余票集,遍歷余票集,逐張鎖定,直至達(dá)到指定數(shù)目或者余票集遍歷結(jié)束,同樣返回鎖定成功的座位號(hào)列表;票池中間件以隨機(jī)的方式選擇出指定數(shù)據(jù)的余票,得到管理鎖票集;
步驟5:票池中間件對(duì)管理鎖票集中的所有票,進(jìn)行鎖定操作;在鎖定時(shí),指定鎖定時(shí)間,并且記錄臨時(shí)鎖票的用戶姓名;
步驟6:結(jié)束。
[0012]優(yōu)選的,所述的管理客戶端的權(quán)限包括鎖定和解鎖票,以管理員鎖的形式預(yù)留或者放棄預(yù)留票。
[0013]本發(fā)明的有益效果是:一種提供票務(wù)支持的票池中間件構(gòu)建方法購(gòu)票及鎖票方法,通過(guò)搭建一種高并發(fā)、高可用的健壯的票池中間件,在支持各類票務(wù)操作的同時(shí),能夠以中間件的形式,適用于各種票務(wù)活動(dòng)場(chǎng)景。
[0014]
【附圖說(shuō)明】
[0015]圖1-1本發(fā)明中鎖票過(guò)程第一步驟的示意圖;
圖1-2本發(fā)明中鎖票過(guò)程第二步驟的示意圖;
圖1-3本發(fā)明中鎖票過(guò)程第三步驟的示意圖;
圖2本發(fā)明中票池集群設(shè)計(jì)圖;
圖3本發(fā)明的票池中間件構(gòu)建的流程圖。
[0016]
【具體實(shí)施方式】
[0017]一種提供票務(wù)支持的票池中間件構(gòu)建方法,包括:
搭建票池集群;通過(guò)構(gòu)建底層的一個(gè)主票池服