沈驁,王磊,王西點,徐晶
(中國移動集團設(shè)計院有限公司,北京 100080)
網(wǎng)管支撐系統(tǒng)作為移動運營商的IT支撐平臺組成部分之一,在運營商日常網(wǎng)絡(luò)運營,管理和質(zhì)量保障中發(fā)揮著重要作用。
在日常工作中,網(wǎng)絡(luò)管理和優(yōu)化人員使用網(wǎng)管支撐系統(tǒng)對網(wǎng)絡(luò)中數(shù)據(jù)進行各類管理,比如分析、統(tǒng)計、監(jiān)控和優(yōu)化等。由于每天產(chǎn)生的數(shù)據(jù)量巨大,故需要系統(tǒng)具備良好的性能,定期收集和統(tǒng)計海量數(shù)據(jù),對數(shù)據(jù)結(jié)果做出準(zhǔn)確分析,以便網(wǎng)管網(wǎng)優(yōu)人員能夠及時發(fā)現(xiàn)并解決網(wǎng)絡(luò)中出現(xiàn)的問題。通過對問題的處理,實現(xiàn)網(wǎng)絡(luò)運營的可靠保障。
而目前對系統(tǒng)進行大量數(shù)據(jù)分析時,底層技術(shù)廣泛采用的語言是Java。和Java相比,Jython不但繼承了Java的優(yōu)勢,同時在效率,性能等方面還具備更多優(yōu)勢。非常適合目前大型網(wǎng)管支撐系統(tǒng)中對數(shù)據(jù)分析的要求。
Jython是一種完整的語言,而不是一個Java翻譯器或僅僅是一個Python編譯器。Jython是基于Python語言的,先引入Python語言。
Python作為一種功能強大且通用的編程語言而廣受好評,它具有非常清晰的語法特點,適用于多種操作系統(tǒng),目前在國際上非常流行,正在得到越來越多的應(yīng)用。
Python強大的功能主要表現(xiàn)在:
編程語言:Python語言可以用來作為批處理語言、函數(shù)語言、過程語言、面向?qū)ο笳Z言。
數(shù)據(jù)庫:可以和多種數(shù)據(jù)庫進行連接,進行數(shù)據(jù)處理,從商業(yè)型的數(shù)據(jù)庫到開放源碼的數(shù)據(jù)庫都提供支持。例如:Oracle,Ms SQL Server等等。
Windows編程:Python不僅可以在UNIX類型的操作系統(tǒng)上應(yīng)用,同樣可以在Windows系統(tǒng)里有很好的表現(xiàn)。
多媒體:利用PIL、Piddle、ReportLab等模塊,可以處理圖像、聲音、視頻、動畫等。動態(tài)圖表的生成、統(tǒng)計分析圖表都可以通過Python來完成。
網(wǎng)絡(luò)編程:Python可以非常方便地完成網(wǎng)絡(luò)編程的工作,提供了眾多的解決方案和模塊,可以非常方便的定制出自己的服務(wù)器軟件,無論是c/s,還是b/s模式,都有很好的解決方法
圖形用戶界面:Python可以非常方便地實現(xiàn)GUI編程,通過Tkinter,wxPython,QT等等模塊,可以根據(jù)需要編寫出強大的跨平臺的用戶界面程序。
Jython是Python語言在Java中的完全實現(xiàn),故Jython有很多從Python中繼承的模塊庫。Jython不像Python或其他任何高級語言,它提供了對其實現(xiàn)語言的一切存取。所以Jython不僅給提供了Python的庫,同時也提供了所有的Java類。這使其有一個巨大的資源庫。
Python與Jython的區(qū)別見表1。另外,Jython還有如下特點:
Python解釋器shell的Jython版本可以對某些想法和API作便利的實驗和研究。而不必經(jīng)歷一般的Java編譯運行周期。
Python被設(shè)計成動態(tài)且通用的,不必通過使用復(fù)雜的庫(如用于Java反射和內(nèi)省的庫)來添加這些特性。這使開發(fā)更簡單,而且它在自動測試框架中特別有用。
部署簡捷,提供了及時部署能力,無需花大量時間在打包和編譯周期上。
易于學(xué)習(xí)和使用,技術(shù)門檻低,可以輕松地找到大量的使用者。
Jython由于繼承了Java和Python二者的特性,Jython性能顯得很優(yōu)秀。和Java相比,Jython也具有很多優(yōu)勢,包括: 對Java類的無縫存取;效率更高;使用動態(tài)類型;對象內(nèi)省和動態(tài)執(zhí)行;使用第一類函數(shù)和函數(shù)編程;具備Java安全性;代碼清新性。
網(wǎng)管支撐系統(tǒng)按功能類別分為運維管理,業(yè)務(wù)開通,網(wǎng)絡(luò)監(jiān)控和質(zhì)量保障。對應(yīng)的系統(tǒng)有:綜合資管、專業(yè)網(wǎng)管、綜合監(jiān)控,網(wǎng)優(yōu)平臺等。
各個系統(tǒng)均存儲了大量的數(shù)據(jù)。系統(tǒng)從底層的數(shù)據(jù)庫中將數(shù)據(jù)提取出來后,管理人員每天對數(shù)據(jù)做分析處理,及時發(fā)現(xiàn)網(wǎng)絡(luò)中存在的問題,最終以報告或者表格等方式將數(shù)據(jù)核查結(jié)果通知相關(guān)人員處理。
大型的網(wǎng)管支撐系統(tǒng)從不同的應(yīng)用層面大致可以分為:
(1)UI 層。該層比較穩(wěn)定,或者說它的變化對于整個系統(tǒng)的運行不會帶來特別嚴重的影響。
(2)接口層。該層與上層的UI以及底層的實現(xiàn),都有著緊密的聯(lián)系,會牽一發(fā)而動全身。作為一位大型應(yīng)用系統(tǒng)的架構(gòu)師或是系統(tǒng)設(shè)計人員,往往會出于維護成本以及開發(fā)成本的考慮,盡可能會讓這個層面的設(shè)計與定義相對靈活。
表1 Jython與Python的區(qū)別
(3)業(yè)務(wù)層。該層是網(wǎng)管支撐系統(tǒng)最核心的層面,整個系統(tǒng)的核心處理邏輯都會放在這一層面上。而往往該層,在實際使用過程中也是最不穩(wěn)定的,最容易從需求角度發(fā)生變化。
(4)數(shù)據(jù)層。該層就是數(shù)據(jù)庫層,用于用戶數(shù)據(jù)的查詢、組裝、更新等等,提供持久的數(shù)據(jù)服務(wù),可以認為它也是個比較穩(wěn)定的層面。
從上分析可知,問題焦點也就是應(yīng)用業(yè)務(wù)層,如何讓業(yè)務(wù)層更加靈活成為核心問題所在。需要注意,引入Jython進行應(yīng)用的前提是:接口層和數(shù)據(jù)層已經(jīng)提供了完整的接口和數(shù)據(jù)供應(yīng)用業(yè)務(wù)層調(diào)用。在一般的網(wǎng)管支撐系統(tǒng)中,在進行上層應(yīng)用前,接口已經(jīng)基本定義完畢,可以直接調(diào)用;數(shù)據(jù)層的數(shù)據(jù)已經(jīng)存儲在數(shù)據(jù)庫中,可隨時存取。同時,在相應(yīng)的系統(tǒng)服務(wù)器安裝時,已經(jīng)將Python所需的各種包和庫文件導(dǎo)入到了系統(tǒng)中。以下應(yīng)用和測試均基于此前提。
一般來說,系統(tǒng)的應(yīng)用業(yè)務(wù)層會干這些事情。第一步:接收通過接口傳遞過來的用戶數(shù)據(jù);第二步:依據(jù)一定的業(yè)務(wù)邏輯,處理用戶數(shù)據(jù);第三步:將處理結(jié)果更新到數(shù)據(jù)庫中(可選);最后,將處理結(jié)果響應(yīng)給 UI層并渲染出來。
由上可知,如何提高數(shù)據(jù)處理效率,將接口獲取的數(shù)據(jù)盡快分析,并將結(jié)果顯示出來是我們需要關(guān)注的重點問題。
Jython在效率,性能等方面的優(yōu)勢,使得它在處理數(shù)據(jù)時更高效,更方便。故將Jython應(yīng)用于大型系統(tǒng)的數(shù)據(jù)分析,能夠更好的響應(yīng)系統(tǒng)任務(wù),提高數(shù)據(jù)管理效率,提升用戶感知度。下面以網(wǎng)優(yōu)平臺為例。
網(wǎng)優(yōu)平臺一般包含數(shù)據(jù)采集導(dǎo)入,數(shù)據(jù)管理和數(shù)據(jù)應(yīng)用。
最底層數(shù)據(jù)采集層,將數(shù)據(jù)從現(xiàn)網(wǎng)中進行采集,生成接口文件,數(shù)據(jù)解析導(dǎo)入到系統(tǒng)中后,進行數(shù)據(jù)管理。最上層的應(yīng)用業(yè)務(wù)層利用獲取的數(shù)據(jù),利用Jython實現(xiàn)各類規(guī)則的統(tǒng)計分析,比如基本的查詢與核查,缺少的網(wǎng)元或參數(shù)核查,或者涉及到各類參數(shù)的比較,并將結(jié)果在報告中輸出。
3.3.1 JRE環(huán)境檢查
在CMD窗口中輸入:Java –version。檢查當(dāng)前系統(tǒng)的JRE版本,要求JRE版本為1.5.0以上。
3.3.2 Jython安裝
運行安裝程序中的Jython_installer-2.5.0.jar安裝Jython2.5.0。除了路徑配置外全部使用默認配置,路徑可以為合適的路徑(無特殊要求),并記錄下該路徑。
3.3.3 Eclipse配置
執(zhí)行安裝程序中的eclipse/eclipse.exe。共分為如下幾個步驟:
(1)Workspace配置。配置Eclipse的工作空間路徑,后續(xù)您可以在這里找到腳本文件。
(2)配置Jython解釋器。選擇菜單Window->Preferences。選擇左側(cè)的Pydev.Interpreter-Jython,選擇右側(cè)按鈕New…,在彈出的窗口中選擇剛才安裝Jython路徑下的jython.jar文件,并且為解釋器設(shè)置一個名稱。
點擊OK后會彈出窗口,使用默認設(shè)置,點擊OK。完成后回到如下界面,選擇右側(cè)的按鈕New Jar/Zip(s)。在彈出的窗口中選擇安裝程序的eclipse/neptune目錄下的所有Jar文件,連續(xù)點擊OK直到上面的窗口關(guān)閉。
(3)配置PyDev工程。選擇File->New->Other…,選擇新建Pydev Project,點擊next。如圖1所示。
配置工程名稱可以輸入一個,配置工程類型為Jython,配置解釋器語法版本為2.5,配置解釋器為上一步配置的解釋器。選擇Finish完成工程創(chuàng)建。如圖2所示。
3.3.4 配置服務(wù)器信息
在工程的src目錄下新建login.properties文件,內(nèi)容如圖3(安裝程序中附有樣例文件),配置登錄到的服務(wù)器、用戶名、密碼。
如果腳本文件放置在某個子目錄中,則需要在該子目錄中也配置login.properties文件,各個子目錄的login.proerties可以配置為不同的內(nèi)容。
圖1 配置PyDev工程
圖2 選擇工程類型
首先利用IDE進行開發(fā)。針對網(wǎng)優(yōu)平臺中數(shù)據(jù),用戶需求非常多,簡單的如網(wǎng)元參數(shù)的查詢核查;參數(shù)修改記錄查詢等。復(fù)雜的有如同頻同BSIC查詢;2G、3G互操作核查等。特別的,各省用戶會根據(jù)實際情況進行用戶自定義規(guī)則,部分規(guī)則涉及多個網(wǎng)元參數(shù)的交互。目前大部分的系統(tǒng)相關(guān)規(guī)則使用Java實現(xiàn)。隨著需求日益增多,志如果用Java來實現(xiàn),代碼會比較復(fù)雜,可讀性和維護性不高。故使用Jython是個很好的選擇。
3.4.1 規(guī)則編寫與測試
規(guī)則編寫時可以直接引入Java的類庫,本段以一個簡單的 Jython 方法為例,介紹如何借助 Jython 實現(xiàn)檢查某廠家小區(qū)中的BCC參數(shù)與其下載頻中的TSC參數(shù)值不相符的情況。
Jython的優(yōu)勢在此處得到充分體現(xiàn)。首先,代碼非常清晰易讀,即使非專業(yè)的人員,看代碼也比較容易;gcells和bcc等變量不需要提前聲明,因為類型是在運行時決定的。減少了代碼的行數(shù),降低了復(fù)雜性,提高了程序的效率。
其次,反射使Jython能無縫地使用任何Java類,通過引入context包(包含Java類,對數(shù)據(jù)庫操作的接口封裝),可以直接使用包中的接口getEntityByVendor,不需要額外的工作。
圖3 服務(wù)器信息配置
規(guī)則編好之后,可以在規(guī)則中添加一些網(wǎng)元和參數(shù),進行測試,測試結(jié)果在控制臺直接顯示。規(guī)則文件后綴名是.py。
將規(guī)則導(dǎo)入網(wǎng)優(yōu)平臺中進行測試,結(jié)果如圖4。
圖4 規(guī)則結(jié)果顯示
表2 Jython與Java的比較
3.4.2 與使用Java性能測試比較
同等情況下的規(guī)則用Java代碼實現(xiàn),可對兩方性能進行比較,從多方面考慮,具體如表2。
本文引入了Jython技術(shù);以網(wǎng)優(yōu)平臺為例,對在引入Jython前后對網(wǎng)優(yōu)平臺業(yè)務(wù)層性能和效率上改變進行了分析研究。
Jython除了在業(yè)務(wù)層可以提高網(wǎng)管支撐系統(tǒng)性能外,在接口層和數(shù)據(jù)層中,也可以使用該技術(shù),能夠?qū)ο到y(tǒng)各方面性能帶來較大提升。