李建林,武小波
(1.山西應用科技學院信息工程學院,太原 030006;2.中國電信山西分公司,太原 030006)
運營商系統中,話單是用戶移動終端的使用記錄,通過對話單的處理,實現最終的收費。當前電信業務主要包括語音、短信、數據、增值等,各類話單的處理均是通過一系列的預處理程序將格式不同的話單文件,轉換成統一的標準話單格式后,傳給相應的模塊進行后續的計費處理。隨著電信業務的不斷增加和用戶數量越來越大,各種電信業務話單也越來越多。目前大多數話單處理基于讀取物理庫的表數據,將讀出的數據放在緩存中,利用對緩存的高效交互實現預處理,如圖1所示。但是,物理數據庫使用磁盤進行數據存儲,數據讀寫緩慢,即使通過緩存進行交互,效率依然不足,已經難以滿足運營商系統對話單處理的及時性要求。
本文提供了一種快速進行話單預處理的方法,通過使用PC服務器,搭建服務器集群環境,在集群的內存上部署分布式關系型數據庫[1],將預處理的信息存放在分布式內存數據庫中,應用程序直接讀取內存庫數據,取消傳統物理庫加緩存機制,達到高效進行話單預處理的能力。
話單預處理時,需要根據配置信息逐一進行話單字段的解析。傳統運營商處理話單的信息存放在集中搭建的物理數據庫上,由數據庫主機和磁盤陣列組成,數據庫主機安裝數據庫管理軟件[2],數據信息統一存放在磁盤陣列上,數據庫主機通過內部網絡訪問磁盤陣列數據。盡管當前已經出現了高性能的固態硬盤硬件,但是因為數據通過網絡傳輸,導致存在海量數據讀寫性能瓶頸、數據災備恢復時間長等問題,特別是數據量達到TB之后,磁盤讀寫的頻率加快,造成網絡I/O吞吐性能下降,嚴重影響處理效率。
隨著運營商對外服務質量要求的提升,集中式磁陣數據庫向分布式內存數據庫發展成為趨勢。采用分布式內存數據庫架構,可以滿足時間短、多進程、高并發的話單處理要求,相較在物理庫進行數據交互處理的傳統方法[3],可以大幅縮短話單處理時間。
內存數據庫是利用內存將使用的數據信息持久化,拋棄了傳統數據庫將索引信息、管理信息放在磁盤的方式,是在內存中建立數據存儲方式,將內存視為一個數據存放的資源,根據一定的規則在內存中搭建關系型數據結構,其索引結構、數據架構重新設計,特點是存取快,無I/O讀寫瓶頸。分布式內存數據庫是基于內存數據庫技術,基于一定的存儲規則,將數據放在多個集群或結點進行存取的分布式關系型數據庫系統[4]。
通常分布式數據庫系統將同一應用和所需數據存放在一個集群中,應用直接讀取服務器內存中的數據,取消了傳統通過網絡讀取磁盤陣列數據的方式,訪問性能得到倍數提高。
根據運營商業務的特點,將不同業務話單的處理程序分布式部署,所用的預處理數據進行分布式內存存儲,加載的數據量不受限制,雖強部署在網絡的多個節點上,但是對外依然提供統一的訪問接口。改變傳統將預處理信息置于物理庫,處理時存放緩存讀取的過程,直接將預處理的解析信息置于分布式內存數據庫,利用分布式內存數據庫處理速度快、并行處理的優勢,直接讀取內存數據,提升數據處理速度[5]。
業務使用后的話單按照一定的格式生成相關的文件,運營商的業務處理系統按照一定的邏輯,將話單文件采集到對應服務器的預處理入口[6]。預處理程序根據規則進行話單處理,處理規則為:S={D,H,A},其中D是業務類型,話單分配到相關目錄后,預處理程序根據業務類型,讀取內存中業務的相關配置,對話單進行逐條解析,解析后將話單文件預分配到不同處理目錄;H是號碼的歸屬,預處理程序再對目錄話單中的號碼進行解析,根據號碼的前7位數字,直接讀取內存中號碼的歸屬地,根據歸屬地進行話單文件的預分配,將完成解析的數據挪到相應的處理目錄中;A是后續流程的處理目錄,預處理程序將話單全部處理完成后,讀取內存中的信息表,將話單文件根據規則進行分割,傳輸到后續流程的處理目錄。至此整個話單的預處理過程結束,話單數據的處理只在服務器的內存和文件目錄中流轉。
分布式內存數據庫利用可靠網絡傳輸技術,將分散部署在計算機網絡各個結點的內存庫數據,邏輯上組合成屬于同一個系統的數據集合,整個架構剔除了傳統數據庫從物理磁盤到緩存的轉化過程,直接訪問內存中的關系型數據庫,利用內存進行快速的交互,避免了峰值情況下磁盤I/O讀寫的瓶頸[7]。同時,集群化的部署,一份數據多個副本,保護了數據的安全,避免數據異常情況下無法使用。
利用分布式內存數據庫技術,優化預處理程序處理不同業務話單解析邏輯,此方法已經充分考慮多類型、多數量同時間段處理的請求,在分布式內存庫處理時,支持多業務的并發處理,處理進程可以根據資源的使用情況動態調整,也可以動態進行處理節點的調整[8]。實際處理過程中,單個分布式節點集群預先的處理進程為10個,統一的調度程序會實時判斷話單量和進程處理隊列,如果話單量超過日常的兩倍或者進程隊列等待數量超過20,調度程序會自動增加預處理進程,通過和內存的快速交互對增加的話單進行高效處理。如果話單量恢復到日常水平或者進程隊列等待數量低于20,調度程序會將后臺處理進程縮減到預設的10,這樣可以釋放服務器資源。
以某運營商一個數據業務話單處理為例,數據業務的話單記錄在四個網元產生。在分布式內存庫架構未部署時,數據業務話單文件是10分鐘產生一個,一個文件中的話單記錄條數在15萬條左右,使用兩臺HP小型機進行處理。兩臺小型機分別對應采集兩個網元的話單,一個文件分配在一個固定的預處理進程處理,因為配置文件存放在物理數據庫,每次進行話單文件處理時,均需要從物理庫緩存配置信息,一個話單文件處理的時間平均5分鐘,且無法根據話單數量和業務增長情況動態調整處理進程,只能通過短信提醒等方式進行監控,如果未及時發現話單處理積壓,將嚴重影響后續流程的處理,會導致用戶使用記錄查詢的不及時。
采用分布式內存數據庫部署后,在預處理程序中首先根據話單文件頭的業務類型小類進行一次處理分配,分配到不同的分布式節點,各個節點讀取到話單文件后,直接分配到對應處理進程的隊列,處理隊列直接讀取內存庫配置,對話單進行規整。經過分析,同樣15萬條記錄的一個話單文件的處理時間縮短到了1分鐘內,達到了秒級的處理能力。同時,因為分布式處理效率的提升,在業務網元新增的情況下,預處理程序根據采集到的話單數量,動態調整處理進程,網元生成話單的時間縮短到2分鐘生成一個15萬條記錄的話單文件,預處理程序依然能在1分鐘內完成處理,整個處理效率提升了5倍。
本文探索了如何充分利用費用低廉的PC硬件,解決運營商業務支撐系統預處理批量話單效率低的問題。利用分布式內存庫快速部署、快速計算的特性,根據運營商通信業務的特點,使用一定的處理規則,將預處理的配置信息直接存放在內存中,提高了預處理解析批量話單的效率,提升了運營商對外服務的感知。
當然此設計也存在風險,如分布內存數據在硬件資源故障時數據會丟失,但是分布式內存數據庫處理技術的繼續優化,增加并行處理模塊,增加數據異地備份等方式,終會讓系統更高效、方便、安全地運行。