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