黃 凱,羅 陳
(上??萍拣^ 上海 200127)
傳統(tǒng)票務(wù)系統(tǒng)不同模塊采用不同技術(shù)架構(gòu)進(jìn)行搭建,單個模塊升級迭代都會影響到其他模塊業(yè)務(wù)和數(shù)據(jù),模塊不方便獨(dú)立設(shè)計和上線,使用起來十分煩瑣,開發(fā)和運(yùn)維的工作量大。為了降低用戶使用難度,提高平臺集群化管理能力,因此需要對老舊系統(tǒng)進(jìn)行改造[1]。
系統(tǒng)軟件架構(gòu)的設(shè)計不僅關(guān)系到系統(tǒng)能否正確運(yùn)行,同時也決定系統(tǒng)未來新功能迭代過程是否順利。歷史票務(wù)系統(tǒng)多采用集中式架構(gòu)設(shè)計,雖然設(shè)計簡單,但是難以滿足時代發(fā)展需求,隨著信息技術(shù)更新迭代的出現(xiàn),弊端逐漸顯現(xiàn)。因此,本文在微服務(wù)的系統(tǒng)架構(gòu)下,設(shè)計了一套基于微服務(wù)的統(tǒng)一票務(wù)集群管理系統(tǒng),此系統(tǒng)便于項(xiàng)目進(jìn)行快速迭代和上線,不僅符合數(shù)字化管理需求的,而且有助于提升系統(tǒng)的總體性能[2]。
針對現(xiàn)有的展館票務(wù)業(yè)務(wù)流程及運(yùn)營難點(diǎn)進(jìn)行研究,發(fā)現(xiàn)各票務(wù)模塊采用不同的技術(shù)架構(gòu)進(jìn)行模塊建設(shè),本文所述系統(tǒng)通過構(gòu)建統(tǒng)一微服務(wù)票務(wù)管理框架,提供全面技術(shù)支撐和安全保障。由于老舊系統(tǒng)改造的工作量巨大,因此采取分布改造的方案[3]。現(xiàn)有場館底層業(yè)務(wù)繼續(xù)采用原有BS架構(gòu)或者CS架構(gòu),構(gòu)建成一套獨(dú)立服務(wù)對業(yè)務(wù)進(jìn)行抽象封裝,并對外提供接口能力,保證和滿足用戶實(shí)際使用需求,后續(xù)再進(jìn)行內(nèi)部重構(gòu)和優(yōu)化,且不影響系統(tǒng)總體運(yùn)行。
對于集群化運(yùn)營的不同場館之間的管理需求,該系統(tǒng)提供統(tǒng)一平臺、分層授權(quán)、屬地化運(yùn)營管控的票務(wù)管理,只需要在系統(tǒng)后臺進(jìn)行統(tǒng)一管理設(shè)置,同時該系統(tǒng)也支持各展館按照自身運(yùn)營實(shí)際情況,設(shè)置本館自身的業(yè)務(wù)參數(shù)規(guī)則、票務(wù)產(chǎn)品信息等一系列運(yùn)營管理規(guī)則,為各個展館保留了完整而獨(dú)立的業(yè)務(wù)管理功能[4]。系統(tǒng)在主館通過統(tǒng)一互聯(lián)網(wǎng)出口提供公眾服務(wù),在遇到館間網(wǎng)絡(luò)中斷的情況下,采用屬地化應(yīng)急備份系統(tǒng)來代替,需要保證不影響游客的購票、取票及檢票入館和觀看電影。
整個系統(tǒng)采用分布式架構(gòu)設(shè)計,任意一個系統(tǒng)節(jié)點(diǎn)的中斷都不會導(dǎo)致多場館的業(yè)務(wù)中斷。單場館票務(wù)核心部署在各自展館的本地機(jī)房中,通過中間機(jī)房,最終構(gòu)建一個統(tǒng)一的一體化票務(wù)平臺,實(shí)現(xiàn)對內(nèi)統(tǒng)一管理和對外統(tǒng)一服務(wù)的目的[5]。整個系統(tǒng)采用統(tǒng)一服務(wù)對數(shù)據(jù)進(jìn)行集中式處理和分布式部署,針對用戶采用分層授權(quán)策略來保證系統(tǒng)數(shù)據(jù)
本文所研究的一種基于微服務(wù)的統(tǒng)一票務(wù)管理系統(tǒng)利用微服務(wù)技術(shù)進(jìn)行系統(tǒng)構(gòu)建,多場館系統(tǒng)統(tǒng)一采用管理架構(gòu)和集群化運(yùn)行機(jī)制。針對各個展館的不同展出內(nèi)容、游客動線、業(yè)務(wù)細(xì)節(jié)的不同,各個展館運(yùn)營部門需要按照自身運(yùn)營實(shí)際情況進(jìn)行管理,系統(tǒng)需要支持各展館自行設(shè)置本館業(yè)務(wù)參數(shù)規(guī)則、票務(wù)產(chǎn)品信息等一系列運(yùn)營管理規(guī)則,因此各個展館保留自身完整而獨(dú)立的業(yè)務(wù)管理功能是重要需求。根據(jù)以上需求進(jìn)行系統(tǒng)架構(gòu)設(shè)計,系統(tǒng)主要由四層進(jìn)行構(gòu)建,即應(yīng)用層、服務(wù)層、數(shù)據(jù)層和系統(tǒng)層。系統(tǒng)的總體架構(gòu)設(shè)計圖,如圖1所示。
圖1 系統(tǒng)總體架構(gòu)圖
從圖1可知,應(yīng)用層主要對用戶提供多渠道小程序、Web和PC等主流前端交互頁面。業(yè)務(wù)分別應(yīng)用部署在取票機(jī)系統(tǒng)、閘機(jī)系統(tǒng)和業(yè)務(wù)前端業(yè)務(wù)等用戶交互場景中。應(yīng)用層統(tǒng)一采用Nginx進(jìn)行反向代理服務(wù)設(shè)置。服務(wù)層主要針對業(yè)務(wù)系統(tǒng)和通用系統(tǒng)進(jìn)行服務(wù)能力封裝并且進(jìn)行業(yè)務(wù)能力輸出,業(yè)務(wù)系統(tǒng)主要是指票券業(yè)務(wù)、供應(yīng)商業(yè)務(wù)和終端業(yè)務(wù)等等[6]。通用業(yè)務(wù)主要是OTA服務(wù)、支付系統(tǒng)、監(jiān)控系統(tǒng)和日志系統(tǒng)等等。數(shù)據(jù)層主要負(fù)責(zé)系統(tǒng)中數(shù)據(jù)業(yè)務(wù)相關(guān)處理,系統(tǒng)數(shù)據(jù)庫采用主流的MySQL和MongoDB進(jìn)行設(shè)計,數(shù)據(jù)中間件采用Redis、Kafka和Zookeeper等,主要用于處理經(jīng)常需要讀取而不是寫入的數(shù)據(jù)并緩存在Redis中,如場館場地信息、票務(wù)信息、場次信息等,以此加快系統(tǒng)的處理效率。
該票務(wù)系統(tǒng)為了防止庫存超賣的分布式事務(wù)鎖、配置數(shù)據(jù)的同步等操作交給Zookeeper。數(shù)據(jù)存儲及中間件主要由數(shù)據(jù)庫、中間件、大數(shù)據(jù)三部分組成,是系統(tǒng)所有的核心數(shù)據(jù)所在,且為將來大數(shù)據(jù)挖掘和分析提供數(shù)據(jù)基礎(chǔ)。另外系統(tǒng)還集成大數(shù)據(jù)處理能力,后期可以進(jìn)行數(shù)據(jù)分析和利用數(shù)據(jù)預(yù)估場館流量等分析內(nèi)容[7]。大數(shù)據(jù)主要使用Hadoop和Spark主流框架進(jìn)行構(gòu)建。系統(tǒng)層是直接和硬件服務(wù)進(jìn)行交互的,硬件底層需要保證系統(tǒng)的穩(wěn)定性、安全性、通用性和易維護(hù)性的要求,統(tǒng)一采用JAVA開源開發(fā)環(huán)境,運(yùn)行在Ubuntu或Centos等Linux操作系統(tǒng)環(huán)境下,采用開源軟件保證后續(xù)系統(tǒng)的安全運(yùn)行。
本文所研究的一種基于微服務(wù)的統(tǒng)一票務(wù)管理系統(tǒng)采用微服務(wù)技術(shù)對票務(wù)系統(tǒng)進(jìn)行模塊化設(shè)計,在保證多系統(tǒng)平穩(wěn)運(yùn)行的情況下,保證系統(tǒng)可以進(jìn)行業(yè)務(wù)快速迭代開發(fā),并且兼顧滿足不同場館票務(wù)個性化要求。
多場館票務(wù)系統(tǒng)之間架構(gòu)連接主要由網(wǎng)售系統(tǒng)、數(shù)據(jù)中心系統(tǒng)、后端支撐系統(tǒng)和用戶中心系統(tǒng)組成,相關(guān)的應(yīng)用統(tǒng)一部署在主館的機(jī)房,這也是從安全角度出發(fā),畢竟外網(wǎng)的安全級別低、容易受到攻擊,內(nèi)網(wǎng)的安全級別要求高,因此提供統(tǒng)一的對外網(wǎng)絡(luò)出口以及對內(nèi)服務(wù),有效保護(hù)各館底層票務(wù)系統(tǒng)的安全[8]。具體部署的應(yīng)用還包括自營票務(wù)業(yè)務(wù)、OTA渠道售票應(yīng)用和自營分銷渠道售票應(yīng)用、公共服務(wù)系統(tǒng)等等。具體的系統(tǒng)多場館應(yīng)用架構(gòu),如圖2所示。
圖2 系統(tǒng)多場館應(yīng)用架構(gòu)圖
主館所需的票務(wù)核心系統(tǒng)均部署在主館機(jī)房,包括票務(wù)系統(tǒng)、票檢系統(tǒng)、本館結(jié)算系統(tǒng)等,本地的所有票務(wù)硬件設(shè)備通過局域網(wǎng)與相應(yīng)的系統(tǒng)進(jìn)行聯(lián)通,保證安全穩(wěn)定,同時在館間網(wǎng)絡(luò)故障時仍然能支持本地化現(xiàn)場票務(wù)服務(wù)[9]。具體的系統(tǒng)模塊應(yīng)用關(guān)系圖,如圖3所示。分館也需要在本館部署相關(guān)備份系統(tǒng)業(yè)務(wù),同時為保證數(shù)據(jù)安全,數(shù)據(jù)庫設(shè)置預(yù)定備份策略并進(jìn)行本地備份,有條件可做異地備份。數(shù)據(jù)訪問嚴(yán)格按用戶級別授權(quán)對數(shù)據(jù)進(jìn)行訪問,關(guān)鍵數(shù)據(jù)的修改記錄應(yīng)記錄詳細(xì)的操作日志,以備后續(xù)追查。數(shù)據(jù)傳輸與關(guān)鍵的敏感數(shù)據(jù)存放進(jìn)行一定的加密處理,以防用戶誤操作和介質(zhì)失效而造成的數(shù)據(jù)損失。
圖3 系統(tǒng)模塊應(yīng)用關(guān)系圖
系統(tǒng)核心技術(shù)架構(gòu)主要由三部分進(jìn)行組成,分別是網(wǎng)絡(luò)接入、中間件和大數(shù)據(jù)。具體的系統(tǒng)技術(shù)架構(gòu),如圖4所示。票務(wù)系統(tǒng)的網(wǎng)絡(luò)接入主要選擇LVS和Nginx作為負(fù)載均衡服務(wù),保證更大的訪問并發(fā)量。中間件主要使用分布式文件系統(tǒng),對文件進(jìn)行管理,功能包括存儲、同步和訪問等,解決大容量存儲和負(fù)載均衡的問題。票務(wù)系統(tǒng)把處理頻繁和經(jīng)常需要讀取而不是寫入的數(shù)據(jù)緩存在Redis中,如場館場地信息、票務(wù)信息、場次信息等,以此加快系統(tǒng)的處理效率。大數(shù)據(jù)層需要保證數(shù)據(jù)高可靠性、高性能的結(jié)構(gòu)化數(shù)據(jù)分布式存儲系統(tǒng),Hbase 隨著數(shù)據(jù)量增多可以通過節(jié)點(diǎn)擴(kuò)展進(jìn)行支撐[10]。因此票務(wù)系統(tǒng)把HBase當(dāng)做存歷史數(shù)據(jù)的平臺,業(yè)務(wù)流程上除了訂單數(shù)據(jù)庫外,還有其他交易相關(guān)的數(shù)據(jù)庫,它們都有同一個問題,容量很容易爆滿,為了將HBase發(fā)揮更大的用處,在特定的場景下,比如幾個月前的歷史數(shù)據(jù),就會先從HBase查尋,將其寫入MySQL,核心的交易流程和支付流程直接在MySQL做,這樣對業(yè)務(wù)的影響最小,方便業(yè)務(wù)操作,提升總體數(shù)據(jù)處理效率[11]。
圖4 系統(tǒng)技術(shù)架構(gòu)示意圖
和傳統(tǒng)票務(wù)系統(tǒng)相比,統(tǒng)一票務(wù)系統(tǒng)接入了主流渠道“小程序”應(yīng)用,提升了游客購票的便捷度與友好度,用戶無需下載App應(yīng)用進(jìn)行即可使用。另外系統(tǒng)采用圖形驗(yàn)證碼、統(tǒng)一賬號管理、檢票直接使用身份證驗(yàn)證,限制了黃牛運(yùn)用刷票軟件刷票、倒票的行為。系統(tǒng)的購票全流程都可以在線上進(jìn)行,實(shí)現(xiàn)了預(yù)約、下單、出票全程無紙化操作,業(yè)務(wù)管理工作人員直接使用電腦或平板設(shè)備來進(jìn)行現(xiàn)場游客信息確認(rèn),極大地提高了工作效率。同時系統(tǒng)后臺可以查詢和報表實(shí)時知曉現(xiàn)場的進(jìn)館情況。為了打通用戶的支付渠道,系統(tǒng)支持多種支付渠道,包括但不限于微信、支付寶、云閃付等常見支付方式,有助于改善游客購票付款的使用體驗(yàn),并減輕了財務(wù)每日在后臺需要進(jìn)行多賬戶人工對賬的工作量[12]。具體的統(tǒng)一票務(wù)實(shí)際小程序使用效果圖,如圖5所示。
圖5 統(tǒng)一票務(wù)實(shí)際使用效果圖
與傳統(tǒng)的票務(wù)系統(tǒng)比較,多場館票務(wù)資源的整合可以給用戶的使用體驗(yàn)方面帶來質(zhì)的提升,用戶無需進(jìn)行多系統(tǒng)注冊,使用一個賬號即可完成多場館購票服務(wù)。為了保證安全和公平,購票統(tǒng)一使用實(shí)名制購票,對票務(wù)進(jìn)行統(tǒng)一限制,同時系統(tǒng)還會對用戶特殊證件進(jìn)行校驗(yàn),保證不同證件類型用戶可以享受自有的權(quán)益。另外,游客在進(jìn)館時使用身份證或者小程序中的票據(jù)二維碼在閘機(jī)檢驗(yàn),用戶系統(tǒng)進(jìn)行身份核驗(yàn)和場館人員記錄管理,系統(tǒng)所記錄和統(tǒng)計的場館內(nèi)游客數(shù)量可以供管理人員進(jìn)行場館管理和采取相對應(yīng)的服務(wù)預(yù)案,根據(jù)游客數(shù)量進(jìn)行流量控制,保證場館運(yùn)行安全和游客的安全。
針對傳統(tǒng)票務(wù)業(yè)務(wù)冗余,更新復(fù)雜的問題,本系統(tǒng)采用微服務(wù)即使,搭建了四層整體架構(gòu)設(shè)計。其中應(yīng)用層用來給用戶提供各種交互入口,不同的交互入口彼此獨(dú)立對應(yīng)不同的數(shù)據(jù)庫和系統(tǒng)層。這些數(shù)據(jù)層經(jīng)由服務(wù)層進(jìn)行統(tǒng)一封裝,搭建成為統(tǒng)一的入口,入口內(nèi)包含不同的模塊界面,為用戶提供多種交互。該系統(tǒng)實(shí)現(xiàn)有助于為用戶提供統(tǒng)一業(yè)務(wù)平臺,減少業(yè)務(wù)冗余,便于后期升級。該系統(tǒng)目前已經(jīng)在上??萍拣^上線使用,上線至今為數(shù)十萬用戶提供便利。