王奇成
(廣鐵集團 信 息技術(shù)處,廣州 5 10088)
客票余額信息發(fā)布是鐵路客票系統(tǒng)的一項關(guān)鍵業(yè)務(wù),也是客運營銷工作中的重要環(huán)節(jié)之一??推毕到y(tǒng)社會影響巨大,其客票余額(以下簡稱:余票)信息的公開發(fā)布一直是個被熱議的話題,尤其在春運期間。
余票信息發(fā)布的基本要求是及時準確。同時也是客票系統(tǒng)的核心信息,承載著復(fù)雜的業(yè)務(wù),數(shù)據(jù)量大,并發(fā)度高。因此,為了構(gòu)建滿足業(yè)務(wù)需求的余票信息發(fā)布系統(tǒng),有必要制訂一些原則策略,并遵循這些原則策略,研究具體的實施方法。
在各鐵路局的春運組織工作中,全局一盤棋,統(tǒng)一指揮調(diào)度。各站段的余票信息發(fā)布初期存在獲取方式不同、展現(xiàn)內(nèi)容不同、展現(xiàn)周期不同等問題,不好管理,也不方便旅客。隨著客票系統(tǒng)版本升級,席位集中到地區(qū)中心,為余票信息發(fā)布統(tǒng)一創(chuàng)造了基礎(chǔ)條件。隨著客運工作質(zhì)量要求的提高,對余票信息發(fā)布工作統(tǒng)一規(guī)范、統(tǒng)一規(guī)劃,便成了必然要求,也是可行的要求。
面向公眾的數(shù)據(jù),一定要及時準確。余票信息的及時準確發(fā)布為鐵路樹立信息公開透明的良好形象。
輕巧指的是不能因為余票信息發(fā)布而對客票系統(tǒng)中的其他業(yè)務(wù)如售票、營銷分析等工作造成影響,特別是窗口售票,一刻也不能停頓。
余票信息發(fā)布滿足了及時、準確的原則,面向公眾,服務(wù)一旦放開,便會被緊密依賴,受人矚目,所以一定要穩(wěn)定可靠。
具體方案為利用數(shù)據(jù)復(fù)制技術(shù)將客票系統(tǒng)中余票信息復(fù)制到獨立的統(tǒng)一余票信息發(fā)布數(shù)據(jù)庫服務(wù)器,在此余票信息基礎(chǔ)上加工計算出匯總結(jié)果,再按需分發(fā)到各個車站服務(wù)器上,達到了統(tǒng)一數(shù)據(jù)來源、統(tǒng)一數(shù)據(jù)內(nèi)容和統(tǒng)一更新頻度的要求。余票信息統(tǒng)一發(fā)布平臺的系統(tǒng)結(jié)構(gòu)如圖1。
系統(tǒng)功能包括統(tǒng)計和分發(fā)兩大功能。統(tǒng)計功能主要負責余票匯總數(shù)據(jù)的統(tǒng)計,由數(shù)據(jù)庫存儲過程完成。分發(fā)功能分成兩部分:(1)數(shù)據(jù)更新功能,由數(shù)據(jù)庫存儲過程完成。(2)并發(fā)調(diào)用功能,由Java程序完成。這樣的功能技術(shù)結(jié)構(gòu),可以提高運行效率;界面清晰,可以提高開發(fā)效率;可以提高系統(tǒng)穩(wěn)定性;方便監(jiān)控數(shù)據(jù)處理的各個環(huán)節(jié)。
統(tǒng)一數(shù)據(jù)發(fā)布平臺一次統(tǒng)計滿足全集團需要,減少了數(shù)據(jù)統(tǒng)計的運算量,保證了數(shù)據(jù)的統(tǒng)一性,減輕了維護工作量,也利于跟隨業(yè)務(wù)數(shù)據(jù)變化,適應(yīng)客票系統(tǒng)日后的版本升級,能及時發(fā)現(xiàn)紕漏和修正算法,保證數(shù)據(jù)的準確性。
為保證數(shù)據(jù)的及時性,需要提高統(tǒng)計程序的效率。統(tǒng)計程序用存儲過程來完成,程序效率關(guān)鍵在于SQL(Structured Query Language) 語句的優(yōu)化。SQL優(yōu)化技術(shù)包括:(1) 創(chuàng)建適當?shù)乃饕?。?)減少游標的使用。(3)臨時表應(yīng)用優(yōu)化。
臨時表是一種非常方便快捷的SQL語句技術(shù)。但在應(yīng)用臨時表做多表關(guān)聯(lián)查詢時,需要注意臨時表對存儲過程預(yù)編譯計劃的影響,在數(shù)據(jù)量大時,需要采用T-SQL語句技術(shù)進行處理,否則存儲過程效率低下。臨時表在存儲過程被保存并編譯的時候,并不能確定表里存放多少數(shù)據(jù),數(shù)據(jù)庫編譯器就按默認規(guī)則假設(shè)存放100行數(shù)據(jù),并據(jù)此生成查詢計劃。而對于余票信息,臨時表里往往要存放幾千、幾萬行數(shù)據(jù),跟100行數(shù)據(jù)量存在很大差別。在數(shù)據(jù)庫默認生成并保存的查詢計劃里,查詢引擎采取的最佳策略,可能是對臨時表做n遍全表掃描,而不是依據(jù)索引去取數(shù)據(jù),這樣,當臨時表里存放幾萬行記錄的時候,n遍全表掃描的性 能比依據(jù)索引去取數(shù)就會明顯低很多?;蛘唠S著業(yè)務(wù)的變化,臨時表里面數(shù)據(jù)有所變化,引起查詢引擎重新選擇執(zhí)行計劃。針對此問題,使用Sybase數(shù)據(jù)庫特定的T-SQL語句,給予查詢引擎優(yōu)化提示,保證編譯時生成并保存的查詢計劃,執(zhí)行時也依照進行。這樣,不管臨時表數(shù)據(jù)變化跨度如何,查詢計劃都是穩(wěn)定的,性能不會陡降。
經(jīng)過優(yōu)化,只要10 s就統(tǒng)計合并完廣州鐵路集團所有余票數(shù)據(jù)的效率,而且性能穩(wěn)定。
該系統(tǒng)由一個中心服務(wù)器和多個車站服務(wù)器組成。車站服務(wù)器利用車站客票主機,中心服務(wù)器則利用一臺單獨主機承擔,跟客票系統(tǒng)主應(yīng)用分開,稱為余票發(fā)布平臺,其數(shù)據(jù)復(fù)制自客票系統(tǒng),由它統(tǒng)計生成余票匯總數(shù)據(jù),分發(fā)到各車站服務(wù)器上。各車站電子屏連接車站服務(wù)器查詢余票結(jié)果。
這些服務(wù)器之間組成一個可遠程透明訪問的網(wǎng)絡(luò)。在中心服務(wù)器上,可往車站服務(wù)器上的數(shù)據(jù)表遠程透明寫入最新數(shù)據(jù)。這種多數(shù)據(jù)庫服務(wù)器之間的直連,避免了多級應(yīng)用程序間的連接。
中心服務(wù)器向多個車站服務(wù)器分發(fā)數(shù)據(jù)時,如果采取發(fā)完一個車站再發(fā)下一個車站的串行方式,則存在時延較長,如果中間某站網(wǎng)絡(luò)質(zhì)量或者某個站群服務(wù)器性能方面出現(xiàn)問題,后續(xù)處理均受影響,整個運行間隔將不可控。一臺服務(wù)器停機,會引起整個集團余票數(shù)據(jù)分發(fā)終止。
所以在系統(tǒng)開發(fā)時,引入了多線程技術(shù),對多個站群服務(wù)器同時分發(fā),不僅性能好,而且保證局部故障不影響全局,取得了很好的效果。
表1 考察某段時間內(nèi)分發(fā)整理操作2 000次
由表1可見,并行工作耗時只有13.4 s(最大值),如果對所有服務(wù)器串行處理,則需要85.1 s,存在6倍以上的差距。
為避免運行分發(fā)程序的機器出現(xiàn)停機故障而帶來整個集團余票信息數(shù)據(jù)不能更新,是保證應(yīng)用程序穩(wěn)定性。分發(fā)程序用Java語言編寫,除了靠Java虛擬機來保證穩(wěn)定外,還利用監(jiān)視進程、自動重啟等編程技術(shù)加強可靠運行。另外,還應(yīng)用雙機并行技術(shù),利用兩臺機器分別運行分發(fā)程序,間隔定為2 min,并錯開1 min啟動,從而使得分發(fā)間隔定為1 min ,但實際上是兩個程序并行,各自間隔2 min。當一臺機故障時,另外一臺還在運行,數(shù)據(jù)刷新間隔從1 min增加到2 min,對業(yè)務(wù)基本沒有影響。這樣就實現(xiàn)了冗余。
為了監(jiān)控數(shù)據(jù)的統(tǒng)計和分發(fā)效率,便于發(fā)現(xiàn)問題及時定位故障,對中心級統(tǒng)計匯總、向車站分發(fā)數(shù)據(jù)、維護車站基礎(chǔ)數(shù)據(jù)等等各環(huán)節(jié)實施了連續(xù)監(jiān)控。還有,不僅在數(shù)據(jù)庫一級記錄了各環(huán)節(jié)運行日志,在操作系統(tǒng)一級也記錄了分發(fā)程序的運行日志,以方便故障查找。
另外,余票信息形成流程涉及環(huán)節(jié)較多,首先是客票系統(tǒng)中動態(tài)變化的席位信息,然后由數(shù)據(jù)庫觸發(fā)機制生成余額信息,再復(fù)制成余票發(fā)布平臺中余額信息,跟著被統(tǒng)計匯總歸并為匯總余票信息,最后分發(fā)到各站群服務(wù)器上。為了及時排除數(shù)據(jù)不準一類故障,設(shè)計了核對數(shù)據(jù)操作界面,支持層層追查數(shù)據(jù),提供給車站維護人員使用。
客票余票信息發(fā)布有著重要意義,要統(tǒng)一規(guī)劃實施并達到好效果,具有較高的挑戰(zhàn)性。在每年的春運業(yè)務(wù)高峰,對客票系統(tǒng)及所有其他客票相關(guān)應(yīng)用都是一個考驗,廣鐵集團余票信息發(fā)布系統(tǒng)能輕松應(yīng)對2010年春運,功能穩(wěn)定,性能優(yōu)異,表明它具備良好設(shè)計,具有推廣價值。
[1]王奇成. Sybase數(shù)據(jù)庫的存儲過程性能優(yōu)化[J]. 鐵路計算機應(yīng)用,2005(3).