王奇成
(廣鐵集團 信 息技術處,廣州 5 10088)
客票余額信息發布是鐵路客票系統的一項關鍵業務,也是客運營銷工作中的重要環節之一。客票系統社會影響巨大,其客票余額(以下簡稱:余票)信息的公開發布一直是個被熱議的話題,尤其在春運期間。
余票信息發布的基本要求是及時準確。同時也是客票系統的核心信息,承載著復雜的業務,數據量大,并發度高。因此,為了構建滿足業務需求的余票信息發布系統,有必要制訂一些原則策略,并遵循這些原則策略,研究具體的實施方法。
在各鐵路局的春運組織工作中,全局一盤棋,統一指揮調度。各站段的余票信息發布初期存在獲取方式不同、展現內容不同、展現周期不同等問題,不好管理,也不方便旅客。隨著客票系統版本升級,席位集中到地區中心,為余票信息發布統一創造了基礎條件。隨著客運工作質量要求的提高,對余票信息發布工作統一規范、統一規劃,便成了必然要求,也是可行的要求。
面向公眾的數據,一定要及時準確。余票信息的及時準確發布為鐵路樹立信息公開透明的良好形象。
輕巧指的是不能因為余票信息發布而對客票系統中的其他業務如售票、營銷分析等工作造成影響,特別是窗口售票,一刻也不能停頓。
余票信息發布滿足了及時、準確的原則,面向公眾,服務一旦放開,便會被緊密依賴,受人矚目,所以一定要穩定可靠。
具體方案為利用數據復制技術將客票系統中余票信息復制到獨立的統一余票信息發布數據庫服務器,在此余票信息基礎上加工計算出匯總結果,再按需分發到各個車站服務器上,達到了統一數據來源、統一數據內容和統一更新頻度的要求。余票信息統一發布平臺的系統結構如圖1。

系統功能包括統計和分發兩大功能。統計功能主要負責余票匯總數據的統計,由數據庫存儲過程完成。分發功能分成兩部分:(1)數據更新功能,由數據庫存儲過程完成。(2)并發調用功能,由Java程序完成。這樣的功能技術結構,可以提高運行效率;界面清晰,可以提高開發效率;可以提高系統穩定性;方便監控數據處理的各個環節。
統一數據發布平臺一次統計滿足全集團需要,減少了數據統計的運算量,保證了數據的統一性,減輕了維護工作量,也利于跟隨業務數據變化,適應客票系統日后的版本升級,能及時發現紕漏和修正算法,保證數據的準確性。
為保證數據的及時性,需要提高統計程序的效率。統計程序用存儲過程來完成,程序效率關鍵在于SQL(Structured Query Language) 語句的優化。SQL優化技術包括:(1) 創建適當的索引。(2)減少游標的使用。(3)臨時表應用優化。
臨時表是一種非常方便快捷的SQL語句技術。但在應用臨時表做多表關聯查詢時,需要注意臨時表對存儲過程預編譯計劃的影響,在數據量大時,需要采用T-SQL語句技術進行處理,否則存儲過程效率低下。臨時表在存儲過程被保存并編譯的時候,并不能確定表里存放多少數據,數據庫編譯器就按默認規則假設存放100行數據,并據此生成查詢計劃。而對于余票信息,臨時表里往往要存放幾千、幾萬行數據,跟100行數據量存在很大差別。在數據庫默認生成并保存的查詢計劃里,查詢引擎采取的最佳策略,可能是對臨時表做n遍全表掃描,而不是依據索引去取數據,這樣,當臨時表里存放幾萬行記錄的時候,n遍全表掃描的性 能比依據索引去取數就會明顯低很多。或者隨著業務的變化,臨時表里面數據有所變化,引起查詢引擎重新選擇執行計劃。針對此問題,使用Sybase數據庫特定的T-SQL語句,給予查詢引擎優化提示,保證編譯時生成并保存的查詢計劃,執行時也依照進行。這樣,不管臨時表數據變化跨度如何,查詢計劃都是穩定的,性能不會陡降。
經過優化,只要10 s就統計合并完廣州鐵路集團所有余票數據的效率,而且性能穩定。
該系統由一個中心服務器和多個車站服務器組成。車站服務器利用車站客票主機,中心服務器則利用一臺單獨主機承擔,跟客票系統主應用分開,稱為余票發布平臺,其數據復制自客票系統,由它統計生成余票匯總數據,分發到各車站服務器上。各車站電子屏連接車站服務器查詢余票結果。
這些服務器之間組成一個可遠程透明訪問的網絡。在中心服務器上,可往車站服務器上的數據表遠程透明寫入最新數據。這種多數據庫服務器之間的直連,避免了多級應用程序間的連接。
中心服務器向多個車站服務器分發數據時,如果采取發完一個車站再發下一個車站的串行方式,則存在時延較長,如果中間某站網絡質量或者某個站群服務器性能方面出現問題,后續處理均受影響,整個運行間隔將不可控。一臺服務器停機,會引起整個集團余票數據分發終止。
所以在系統開發時,引入了多線程技術,對多個站群服務器同時分發,不僅性能好,而且保證局部故障不影響全局,取得了很好的效果。

表1 考察某段時間內分發整理操作2 000次
由表1可見,并行工作耗時只有13.4 s(最大值),如果對所有服務器串行處理,則需要85.1 s,存在6倍以上的差距。
為避免運行分發程序的機器出現停機故障而帶來整個集團余票信息數據不能更新,是保證應用程序穩定性。分發程序用Java語言編寫,除了靠Java虛擬機來保證穩定外,還利用監視進程、自動重啟等編程技術加強可靠運行。另外,還應用雙機并行技術,利用兩臺機器分別運行分發程序,間隔定為2 min,并錯開1 min啟動,從而使得分發間隔定為1 min ,但實際上是兩個程序并行,各自間隔2 min。當一臺機故障時,另外一臺還在運行,數據刷新間隔從1 min增加到2 min,對業務基本沒有影響。這樣就實現了冗余。
為了監控數據的統計和分發效率,便于發現問題及時定位故障,對中心級統計匯總、向車站分發數據、維護車站基礎數據等等各環節實施了連續監控。還有,不僅在數據庫一級記錄了各環節運行日志,在操作系統一級也記錄了分發程序的運行日志,以方便故障查找。
另外,余票信息形成流程涉及環節較多,首先是客票系統中動態變化的席位信息,然后由數據庫觸發機制生成余額信息,再復制成余票發布平臺中余額信息,跟著被統計匯總歸并為匯總余票信息,最后分發到各站群服務器上。為了及時排除數據不準一類故障,設計了核對數據操作界面,支持層層追查數據,提供給車站維護人員使用。
客票余票信息發布有著重要意義,要統一規劃實施并達到好效果,具有較高的挑戰性。在每年的春運業務高峰,對客票系統及所有其他客票相關應用都是一個考驗,廣鐵集團余票信息發布系統能輕松應對2010年春運,功能穩定,性能優異,表明它具備良好設計,具有推廣價值。
[1]王奇成. Sybase數據庫的存儲過程性能優化[J]. 鐵路計算機應用,2005(3).