武小波,李建林
(1.中國電信山西分公司,太原 030006;2.山西應用科技學院,太原 030006)
漫游話單是用戶離開本省使用移動終端通話產生的使用記錄,因記錄落在漫游省,需要通過編碼處理后,利用特殊途徑回傳給用戶歸屬省進行處理。隨著用戶數量和出省使用量的增加,漫游話單量持續增加,對本地處理系統的性能考驗越來越高,目前的漫游話單處理系統以集中物理數據庫為基礎,對漫游話單數據進行統一解碼處理,需要將配置文件預先設置在數據庫,處理話單時批量讀取配置到緩存進行讀取,整體處理時效在分鐘級,其性能會隨著數據量的增加而逐漸降低,且系統擴充涉及到的修改量和擴容費用龐大,影響了系統對漫游話單的解碼處理速度[1]。
本文提供了一種基于云平臺的快速處理批量編碼話單的方法,利用分布式計算技術和文件存儲技術,取消傳統物理庫加緩存機制,達到快速處理編碼話單的能力。
云平臺是應用廉價的服務器,在不同機房搭建的分布式處理集群,云平臺搭建時采用分層架構,即Iaas、Paas、Saas 三層。Iaas 層屬于硬件資源層,使用統一的管控平臺進行資源管理;Paas 層是組件層,統一搭建數據庫、緩存、中間件等,進行組件資源的統一分配;Saas 層部署應用,采用主備方式進行應用的搭建,確保應用使用的安全[2]。
本文討論的云平臺是使用內網方式組網,通過內部交換機安全、可靠地傳輸數據[3]。云平臺分為三層四個部分,最下面的一層為Iaas的硬件資源層,包括基礎硬件資源層和資源調度層,基礎硬件資源層提供服務器資源、網絡資料、存儲資源等系統運行的基礎硬件環境,資源調度層實現對基礎硬件的管理和控制,可以實現對硬件資源使用率的彈性計算,能根據應用的需求實現資源的靈活分配,可以對資源進行動態的擴縮容管理;第二層為組件運行的Paas 層,有進行數據存儲的分布式數據庫,文件存儲的分布式文件系統,用于處理消息的分布式消息中間件,實現數據臨時訪問的分布式緩存,進行任務調度的組件,還有用于平衡應用處理的負載均衡組件;第三層為應用部署的Saas 層,應用有采集中心、預處理中心、剔重中心、批價中心四個,其構成了系統對外的統一應用能力;除了三層功能外,系統架構還設計了運維管理部分,用于對各層的監控,建立規范約束,進行日常的安全管理,實現運維操作。其結構如圖1所示。

圖1 云平臺總體結構
傳統運營商的話單存放在集中搭建的物理數據庫上,數據統一存放在磁盤上,集中部署的資源以共享為主,包括CPU 處理器、內存資源、存儲設備等,資源依賴于一個商用的操作系統進行管理。雖然已經出現的固態硬盤、閃存硬盤等高性能硬件,帶來了數據存儲、讀取的速度提升,但是依然存在海量數據讀寫性能瓶頸、數據災備恢復時間長等問題[4]。隨著對外服務質量要求的提升,利用云資源實現從集中式到分布式的變革成為新的要求,云資源可以部署在集中或分布式的數據中心上面,由物理集群或虛擬計算資源組成,實現集中式的磁陣計算向分布式云計算發展成為趨勢[5]。在分布式計算中,處理器資源和內存資源,可以相互緊耦合,也可以虛擬化實現松耦合,資源通過管理工具實現共享,分布式計算由一個分布式管理系統和眾多獨立自治的服務器組成,各自擁有獨立運行的內存,相互通過計算機網絡實現信息交互[6]。
分布式的云計算系統建立在大量自治的服務器節點上,節點之間通過SAN、LAN 或WAN 網絡,實現跨網絡層級方式的互連。本系統采用內存存取的分布式云計算系統,基于物理內存存儲和讀取數據,訪問性能高,將數據統一存放在物理內存中,可以充分利用內存訪問的超強速度優勢,實現快速的I/O 交互。分布式部署,可以承載的數據量大,應用部署在互通網絡的多個節點上,對外可以提供統一的訪問入口[7]。采用文件形式組織數據結構,文件存儲是將話單依據業務類型,直接解析放到文件中,不再放到傳統物理數據庫中,數據會以單條信息的形式存儲在文件夾中,正如將幾張紙放入一個文件袋中一樣。當需要訪問該數據時,計算機通過相應的路徑查找[8]。存儲在文件中的數據會根據數量有限的元數據來進行整理和檢索,這些元數據會告訴計算機文件所在的確切位置,它就像是數據文件的庫卡目錄[9]。
依據摩爾定律的發展,服務器的硬件費用逐年降低,其運算速度逐年提高,應用系統充分利用分布式云計算的快速部署、高速計算、動態擴展能力,加上文件存儲的豐富多樣性,將極大提升對漫游話單的處理效率[10]。
為了確保話單的安全傳輸,運營商的話單普遍采用ASN.1 編碼技術,ASN.1(abstract syn?tax notation one)是一種抽象語法標記,它定義了抽象數據類型形式標準,是一種通用的用于表示數據層次的數據結構。抽象語法讓使用者可以根據實際需要定義數據類型,并指明這些數據類型的值。ASN.1使用一整套正規的格式來描述對象的結構,實際使用過程中不管語法上的指代,也不管如何執行,這種語法標記不關心執行的應用程序。
漫游話單處理需要經過采集、預處理、剔重等環節,各個環節需要讀取配置信息,才能正確對話單進行解析。本文采用內存分層多單元并行處理方法,改變傳統漫游話單采集、預處理、剔重信息置于物理庫的方式,直接將采集、預處理、剔重的解析信息部署在云平臺,利用分布式計算速度快的優勢并行計算解碼程序,將各個環節的操作時間壓縮至秒內。
將服務器的內存塊邏輯分層,一層存放內存文件數據,將解碼信息存放此單元,用于批量話單的解碼檢索、解碼信息存放。一層存管理網絡文件數據,用于記錄通過網絡傳輸的文件信息,保障文件處理不重復。一層進行數據處理,用于根據上兩層信息快速進行文件中的話單解碼。處理過程中充分利用分布式計算的快速、安全特性,對話單文件實現類似流水操作。
本方法快速解碼話單原理圖,如圖2 所示,該系統包括20 個處理模塊M1,M2,…,M20,每個模塊中都包括內存文件數據庫單元A,網絡文件管理單元B以及相連的數據處理單元C,其中A1表示第一內存文件數據檢索單元,B1表示第二網絡文件數據管理單元,C1 表示第三數據處理單元。處理主機分為1主2備模式,一臺主機進行處理操作時,另外兩臺主機進行同時備份操作,出現主機宕機問題影響話單的解碼流程時,兩臺備份主機沒有主次備份區別,直接接管進行操作。

圖2 整體架構
處理流程為,通過兩級查詢處理生成當前索引記錄的查詢結果,將所有查詢結果發送查詢請求的網絡文件數據管理單元B。網絡文件數據管理單元B,用于存儲話單文件,以及為各數據處理單元C 分配目錄文件。數據處理單元C,用于進行解碼程序的操作和運行,以及執行分配給自身的任務,收集自身及本系統其他正常工作的數據處理單元C的執行結果。
具體處理步驟如下:
步驟1:將漫游話單文件中的通話記錄的索引存儲到云平臺的內存文件單元A中。
步驟2:將需要處理的話單文件存儲到網絡文件管理單元B中。
步驟3:數據處理單元收到查詢請求后,轉發給內存文件數據庫單元A。
步驟4:內存文件數據庫單元查找符合條件的索引記錄,返回查詢結果。
步驟5:數據處理單元C 將查詢結果作為一批次任務,分配給自身及系統中其他正常工作的數據處理單元。
最后將上述執行結果進行匯總處理后返回,結果落地為文件,之后進行剔重等環節操作。
本系統部署在高可用的集群上,采用間隔5公里的雙中心雙機房搭建集群。集群搭建需要利用一組服務器,服務器作為一個整體向用戶提供所需資源,這些單獨的服務器系統就是集群的節點。集群的部署需要具備高可用,高可用集群的部署是為了使集群的整體服務的質量高,能保障應用的連續運行,以便減少因服務器硬件和軟件的運行故障所帶來的損失。如果應用運行的某個節點故障,它的備用節點將在幾秒鐘的時間內接管業務。高可用集群通過智能調度機制,保障業務程序對外提供服務的不間斷,把因為軟件、硬件等因素出現的故障對業務的影響降低到最小程度。集群部署架構如圖3所示。

圖3 集群部署架構
本實驗搭建集群測試框架整體效果,實驗基于Python3.6.8,應用Zookeeper 進行集群資源調度,話單解碼使用C++完成撰寫,使用Python作為測試編程語言。配置參數見表1。

表1 集群配置

表2 實驗結果
在實驗中,為規避數據異常丟失的風險,提高數據的安全性,服務器集群采用一主兩從部署,主服務器存儲磁盤中的文件X,另外兩個文件副本將同時存儲在備服務器。當主服務器所在物理設備發生故障,文件X 在主服務器上不能被訪問,但是存儲在另外兩個服務器上的文件副本可以被正常訪問,文件系統仍能正常對外提供文件X 的數據。由此可以增加系統的可靠性,數據的安全性。
內存文件數據檢索單元A 用于存儲話單文件中的通話記錄的索引,用于查找符合查詢條件的索引記錄,并逐條讀取符合查詢條件的索引記錄中的特征字段和文件名字段,使用地市ID 和用戶ID 組成的兩層查詢條件,精確分配給各個正常工作的網絡文件數據管理單元,以及執行分配給自身的任務,收集自身及上述其他正常工作的網絡文件數據管理單元B的執行結果。
根據當前任務,網絡文件數據管理單元中查找相應的話單文件,并在找到的話單文件中查找對應的通話記錄,即當前網絡文件數據管理單元根據收到的位置信息,讀取其中的漫游話單記錄內容并匯總,將匯總結果返回給數據處理單元C。上述漫游話單記錄的索引包括主被叫號碼、通話起止時間、通話記錄在話單文件中的偏移量以及上述話單文件在上述網絡文件管理單元中的文件名等。
數據處理單元C 通過解碼文件在本地索引記錄中查找符合查詢條件的索引記錄,逐條讀取符合查詢條件的索引記錄中的偏移量字段和文件名字段,生成解碼結果。最后判斷本次收到的任務是否執行完畢,若是,則匯總上述目錄文件的位置信息。
分布式系統運行的性能有多個衡量的指標,常用的系統吞吐量用TPS(transactions per sec?ond,每秒事務數)測量,其它度量指標還包括網絡延遲、任務響應時間等。系統自身運行的消耗通常包括指令編譯的時間、操作系統的啟動時間、I/O 讀取數據速率和程序運行時指令交互系統消耗,業務運行時還需要考慮服務的QoS、可靠性和系統可用性,以及系統安全運行的能力,這些指標都需要綜合分析。
以10 萬漫游話單處理進行對比,分布式計算采用雙節點部署,每個節點5臺服務器組成集群。對比現有整體程序單節點10臺服務器處理,新架構因為采用分布式調度,直接讀取內存庫數據,利用內存分層進行漫游話單解碼,10萬條話單的處理效率從之前的5分鐘縮短到了30秒。
本文探索了利用云平臺的分布式計算,解決運營商支撐系統處理批量漫游話單解碼效率低的問題。本方法通過分層并行的處理模式,快速將漫游數據進行分層處理解碼,各個處理單元并行處理其各自獨立信息,優化加速整體處理流程和速度。實驗表明:利用云計算快速部署、快速計算的特性,將話單全程存放在文件中,批量處理話單的效率從分鐘級提升到秒級,提升了運營商對外服務的感知。