中國電信股份有限公司江蘇省分公司企業(yè)信息化部 李 彧 肖寶林
近年來,隨著IT規(guī)劃的縱深演進、專業(yè)細分、系統(tǒng)進化、配套完備,信息化建設投資規(guī)模持續(xù)增長,電信運營商客戶關(guān)系管理(CRM)專業(yè)領(lǐng)域所涵括的項目、系統(tǒng)、設備水漲船高。與此同時,IT(信息技術(shù))系統(tǒng)運維支撐因缺乏行之有效的工具手段,或多或少存在故障難定位、質(zhì)量難保證、數(shù)據(jù)難維護、知識難共享、新人上手難、自動化欠缺等方面的問題。
某省某電信運營商在省市一體集約化運營思想指導下,嘗試集成一系列高性能的開源框架構(gòu)建CRM專業(yè)領(lǐng)域核心生產(chǎn)系統(tǒng)——業(yè)務支撐系統(tǒng)(BSS)的統(tǒng)一維護平臺。正如項目研發(fā)明確提供標準的集成開發(fā)環(huán)境(IDE),對應系統(tǒng)運維支撐也應明確提供標準的統(tǒng)一維護平臺(UMP),從而能有助于實現(xiàn)運維支撐高度的集中化、自動化、標準化和專業(yè)化。
統(tǒng)一維護平臺整合Web服務器Nginx、Web應用框架Rails、分布式文檔數(shù)據(jù)庫mongoDB(數(shù)據(jù)庫),實施各層負載均衡(f5實現(xiàn)網(wǎng)絡負載均衡、Web服務器和數(shù)據(jù)庫均集群部署),支持多樣化的客戶端瀏覽器類型(谷歌、火狐),作為任務調(diào)度引擎的腳本運行器隔離維護終端直連生產(chǎn)數(shù)據(jù)庫、可配置數(shù)據(jù)源及解析執(zhí)行數(shù)據(jù)庫連接訪問,其體系架構(gòu)如圖1所示,相對于以往應用系統(tǒng)的傳統(tǒng)的重量級架構(gòu)而言,它集輕量級、先進性和前沿性于一體。
Rubyon Rails,簡稱Rails,是一個使用Ruby語言編寫的Web應用開發(fā)框架,編碼量更少但又完成超過其他任何語言和框架所做的工作[1]。Rails的核心是MVC(模型、視圖、控制器)架構(gòu),能從用戶界面剝離業(yè)務邏輯,易于使代碼不做重復的事,明確指出使得不同類型的代碼維護起來更容易的適用場合。
談到Rails不能不提及Ruby。Ruby是一種跨平臺、面向?qū)ο蟮膭討B(tài)類型編程語言。Ruby體現(xiàn)了表達的一致性和簡單性,其不僅是一門編程語言,更是表達想法的一種簡練方式[1]。
由于使用Rails框架,統(tǒng)一維護平臺所有的維護腳本使用簡化的Ruby語言編寫,支持中文命名,基本接近自然語言,大幅減少SQL(結(jié)構(gòu)化查詢語言)的使用,便于學習與維護。
一個NoSQL(非關(guān)系型數(shù)據(jù)庫)提供了一個簡潔、輕量級的數(shù)據(jù)存儲和檢索的機制,許多作者將之稱為“notonly SQL”是由于數(shù)據(jù)存儲一般不使用“SQL”方式存儲數(shù)據(jù)[2]。NoSQL數(shù)據(jù)庫往往高度優(yōu)化檢索和附加操作;除以松散的一致性存儲記錄外(如鍵值存儲),其提供的功能往往很少。相對于較完全的SQL數(shù)據(jù)庫而言,其通過降低實時靈活性來補償某些數(shù)據(jù)模型使其可擴展性和性能得以顯著提高。
mongoDB(源于“humongous”,字面意為堆積如山),是當前NoSQL數(shù)據(jù)庫中較熱門的一種,乃是一個高性能的、開源的、無模式的文檔型數(shù)據(jù)庫[3]。它在許多場景下可用于替代傳統(tǒng)的關(guān)系型數(shù)據(jù)庫或鍵/值存儲方式,除具高性能外,還有易部署、易使用、存儲數(shù)據(jù)非常方便等特點。
統(tǒng)一維護平臺利用mongoDB搭建NoSQL數(shù)據(jù)庫,并集群部署,用于存儲維護腳本及腳本運行記錄。
信息安全基線要求個人維護終端禁止直連生產(chǎn)數(shù)據(jù)庫,因此維護終端訪問生產(chǎn)庫是通過扎口作為中介的任務調(diào)度引擎來實現(xiàn)的。調(diào)度引擎支持數(shù)據(jù)源的靈活可配置,解析腳本并在對應的正確的數(shù)據(jù)庫中運行,其運行機制如圖2所示。
在設計之初,我們就確定了維護腳本最基本的幾個特性:一、能以最少的代碼做最多的事;二、很好的可讀性與可維護性;三、盡量減少對數(shù)據(jù)庫的依賴;四、具有全面超越SQL的功能與擴展性。從這幾個特性出發(fā),我們考察了多種語言,最終選擇了Ruby作為腳本語言的基礎(chǔ)。同時Rails所具有的強大靈活,使得統(tǒng)一維護平臺呈現(xiàn)了別具一格的嶄新特性。
BSS統(tǒng)一維護平臺的維護腳本從本質(zhì)上來說就是一段以Ruby語言為基礎(chǔ),以Rails框架為運行環(huán)境,以BSS等生產(chǎn)數(shù)據(jù)庫為基本操作目標的代碼文本。維護腳本整體上包含腳本屬性、文檔與代碼3個部分。
腳本代碼從整體上最多分為下列5個代碼段:定義參數(shù)、定義方法、準備、執(zhí)行、清理。這5個代碼段除“執(zhí)行”段外,其他代碼段為可選。每個代碼均以“代碼段名稱do”開始至對應的“end”結(jié)束。不同的代碼有不同的用途,不能重復。腳本代碼結(jié)構(gòu)示意如下:
定義參數(shù)do
參數(shù):id,:integer,name:“地區(qū)編號”
end
腳本的代碼要求使用Ruby語言編寫。與常規(guī)Ruby程序不同的是,腳本代碼需遵循固定的格式,并具有許多附加限制。同時,平臺提供了各類自定義的API(應用程序接口),并引入了許多擴展功能庫,對底層功能進行了大量的封裝。因此比普通Ruby程序具有更多貼近維護工作的功能??梢暈槠脚_專用的領(lǐng)域特定語言(DSL)。
統(tǒng)一維護平臺在采用Rails后,編寫新的應用程序和增加新功能變得更加容易。新增功能開發(fā)效率高,在線部署不影響生產(chǎn),其主要特性如表1所示。
?
統(tǒng)一維護平臺于2012年8月試點上線成功,接著利用2012年10月、11月兩個月時間在全省推廣,至2012年12月初,共完成205個手工維護腳本,遷移114個數(shù)據(jù)庫后臺定時任務,共運行123961次,成功處理120661筆異常。平臺上線后,對維護工作的總體狀況和維護人員的工作狀態(tài)等方面帶來了明顯的提升。
統(tǒng)一維護平臺極大地提升了維護工作,具體表現(xiàn)如下:首先,提供了常見異常的統(tǒng)一處理入口。維護人員能快速處理各子系統(tǒng)的障礙,能更好地安排AB角(兩個人一組,當一方因公外出,由另一方頂崗)及日常值班工作,有效地提高了新人的上手速度。其次,平臺腳本遠超過PL/SQL(過程化SQL)的表達能力,提供了更高層次的維護手段,全面促進了維護工作的自動化與標準化。再其次,通過平臺對腳本安全性的檢查和預防,極大地減少了維護過程中誤操作的可能性。此外,還提供了完善的日志及數(shù)據(jù)備份方案,方便事后的審計與恢復。
平臺在全省推廣上線后,維護人員通過熟悉磨合,掌握維護腳本的開發(fā)后,將本地日常處理故障異常的維護腳本和生產(chǎn)數(shù)據(jù)庫后臺定時任務遷移至平臺,逐步從繁雜事務處理中解脫出來,工作積極性得到極大激發(fā),在諸多方面有了較大改觀,效果如表2所示。
?
統(tǒng)一維護平臺作為強有力的“后勤”,接管BSS大部分的運維支撐工作,達到并超過了早期技術(shù)驗證的目標?,F(xiàn)在已平穩(wěn)運行數(shù)月。隨著應用的深入,維護人員提出了更多的改進意見,各級管理人員也寄予較高期望。因此,統(tǒng)一維護平臺的發(fā)展方向值得思考如下:建設成多系統(tǒng)綜合維護平臺,可為承接運營支撐系統(tǒng)(OSS)等的維護做準備;實現(xiàn)以平臺成為基礎(chǔ)的一線人員異常處理工具,如嵌入原系統(tǒng)、腳本可見性控制、時間段控制;提供外部系統(tǒng)集成能力,對外提供調(diào)用接口;增強維護文檔的管理功能,增加提問與解答的互動機制,全省共享機制,對維護文檔/腳本可以打分并發(fā)表評論等。
某省某電信運營商基于開源Web開發(fā)框架Rails,構(gòu)建BSS的集約化運營統(tǒng)一維護平臺,平臺上線后,BSS故障異常的維護效率得到提升,維護工作量化透明,初步實現(xiàn)了維護方案集中管理、維護知識庫全省共享、維護質(zhì)量可管控有保障,阻斷個人維護終端直連生產(chǎn)數(shù)據(jù)庫,保障系統(tǒng)數(shù)據(jù)安全,同時推動了故障管理、問題管理、知識管理等維護流程規(guī)范化。
[1]WhatisRails?.[EB/OL].[2013-05-28].http://guides.rubyonrails.org/getting_started.html.
[2]NoSQL.[EB/OL].[2013-05-28].http://en.wikipedia.org/wiki/NoSQL.
[3]MongoDB.[EB/OL].[2013-05-28].http://zh.wikipedia.org/zh/MongoDB.◆