王義嘉
(武漢郵電科學研究院湖北武漢430070)
基于分布式ETL和Django的終端運營管理系統(tǒng)
王義嘉
(武漢郵電科學研究院湖北武漢430070)
針對終端運營商的龐大數(shù)據(jù)的高實時性更新和需求快速變化的要求,采用了一種基于分布式ETL和基于Django網(wǎng)絡開發(fā)框架的供應鏈管理系統(tǒng)。本系統(tǒng)ETL部分采用分布式的方案,用以處理龐大且來源復雜的數(shù)據(jù)源,基于Django的網(wǎng)絡框架提供了豐富的組件,適用于需求多變的應用場景,能夠對需求變化做出快速響應。實際應用表明,在龐大數(shù)據(jù)量和需求多變的要求下,該系統(tǒng)可以實時更新運營商數(shù)據(jù),并滿足快速響應需求變化的要求,達到了設計的要球。
ETL;分布式;敏捷發(fā)開;Django
自2008年11月27日天翼電信終端有限公司掛牌成立以來,電信的終端業(yè)務突飛猛進。2016年上半年終端銷售情況為,整體收入增加6.3%,收入增加9.7%,都超行業(yè)平均水平;移動用戶凈增量達到31%,終端業(yè)務占整體行業(yè)的份額躍居行業(yè)第二,上半年3G+4G銷售4 700萬;移動用戶規(guī)模突破2億。隨著業(yè)務量的迅猛增長,傳統(tǒng)人工管理終端的業(yè)務模式明顯已力不從心。而傳統(tǒng)的供應鏈系統(tǒng)在面對如此龐大的數(shù)據(jù)源時和快速多變的業(yè)務模式,系統(tǒng)的實時性和效率低下的計算能力,已無法滿足當下業(yè)務需求,業(yè)務多變,這就需要系統(tǒng)能夠隨著業(yè)務變化而迅速變更,具體體現(xiàn)在:首先,傳統(tǒng)供應鏈系統(tǒng)數(shù)據(jù)更新周期較長,通常為日更或者更長,不能做到實時更新,原因在于,傳統(tǒng)供應鏈系統(tǒng)的ETL(ETL,Extraction-Transformation-Loading的縮寫,即數(shù)據(jù)抽取(Extract)、轉換(Transform)、裝載(Load)的過程,它是構建數(shù)據(jù)倉庫的重要環(huán)節(jié))通常為非分布式計算方式,從更新數(shù)據(jù)源,到數(shù)據(jù)的規(guī)范化、轉化等操作計算量龐大,在硬件性能上,單機系統(tǒng)計算性能有限,更新通常數(shù)據(jù)量龐大,在做ETL的過程時,通常采用以時間換空間的策略,這樣必然導致效率底下,就會造成數(shù)據(jù)更新耗時較長,無法做到系統(tǒng)數(shù)據(jù)實時更新。其次,終端市場競爭日益激烈,業(yè)務生命周期短,電信業(yè)務模式變化迅速,以相應市場變化,這就造成需求的快速變化,因此,要求軟件開發(fā)能夠快速響應需求的變化,而傳統(tǒng)供應鏈系統(tǒng)開發(fā)周期較長,不能快速響應需求變化。
可見,現(xiàn)有供應鏈系統(tǒng)無法滿足電信業(yè)務的需求。為了滿足當下電信業(yè)務大數(shù)據(jù)量的ETL的實時性和需求變化的快速響應,提出一套分布式ETL和基于敏捷開發(fā)[1]的基于django的供應鏈管理系統(tǒng),以解決傳統(tǒng)供應鏈系統(tǒng)的不足。
系統(tǒng)總體設計分為ETL設計和系統(tǒng)設計,整體結構如圖1所示。由于數(shù)據(jù)源文件存儲的數(shù)據(jù)龐大,因此使用HDFS來分布式存儲[2]這些龐大的數(shù)據(jù)源文件,HDFS不僅高效,而且可靠;數(shù)據(jù)的ETL過程采用spark[3],做分布式數(shù)據(jù)的抽取、轉換和載入;數(shù)據(jù)載入到MySQL數(shù)據(jù)庫中進行存儲;最后,客戶端通過HTTP協(xié)議,與系統(tǒng)后端交互,系統(tǒng)后臺訪問MySQL數(shù)據(jù)庫,查詢或者更改數(shù)據(jù)庫中的展示數(shù)據(jù)或用戶數(shù)據(jù)。
圖1 系統(tǒng)總體結構圖
整體的ETL的設計由數(shù)據(jù)抽取、數(shù)據(jù)轉換、數(shù)據(jù)載入MySQL3個步驟組成,ETL流程圖如圖2所示。HDFS提供了分布式存儲的解決方案,可以將龐大的數(shù)據(jù)自動切分存入分布式系統(tǒng);利用spark優(yōu)良的性能,可以輕松完成ETL過程的數(shù)據(jù)的抽取、數(shù)據(jù)的復雜計算和轉換、轉換后的數(shù)據(jù)載入MySQL,整個過程分布式計算,極大地加快了數(shù)據(jù)的計算速度。
圖2 ETL總體設計圖
HDFS提供了龐大數(shù)據(jù)文件分布式存儲的解決方案,HDFS非常適合處理超大文件,而且,非常適合部署在廉價的商業(yè)機群上。
為了滿足對大量數(shù)據(jù)的實時處理,本系統(tǒng)采用spark作為ETL過程的處理工具。首先,spark提供了一個完善的框架用于管理不同性質(zhì)的數(shù)據(jù)集和數(shù)據(jù)源的大數(shù)據(jù)處理的需求;其次,spark可以將Hadoop集群中的應用在內(nèi)存的運行速度提升100倍,或者在磁盤上運行時速度提升10倍[4],提升大量數(shù)據(jù)的處理速度。
該系統(tǒng)的數(shù)據(jù)源龐大且復雜,數(shù)據(jù)來源于不同的部門或組織,而各個部門或組織又會以不同的架構、格式、方法儲存數(shù)據(jù)資料,這就造成了數(shù)據(jù)源的復雜性和多樣性。而這些原始資料通常會具有以下特性:通常為距現(xiàn)在時間較近的、較及時的交易性資料;為了能夠將資料較快的給前端使用者,通常已針對資料結構進行最佳化的微調(diào);資料已進行過正規(guī)或者反正規(guī)化的過程。在數(shù)據(jù)抽取階段,需要針對資料做兩方面的處理:資料格式轉換和初步資料的校驗[5]。
由于存在有各種各樣的原始資料來源和不同的資料格式,利用spark工具把原始資料轉化成統(tǒng)一的資料格式。在本系統(tǒng)中,需要將不同來源的數(shù)據(jù)規(guī)范成key-value的形式,同時,需要編碼格式統(tǒng)一成UTF-8的形式。只有在統(tǒng)一的格式和編碼的情況下,才能在數(shù)據(jù)轉換中,在數(shù)據(jù)之間做相對應的轉換和比較。
對獲取到的數(shù)據(jù),對比其格式和結構是否符合所需,例如:是固定位長的數(shù)據(jù)還是在特定規(guī)則下定義的數(shù)據(jù),或者是區(qū)隔符號定義的數(shù)據(jù),如果不符合,則依照對應的游戲規(guī)則已決定采取何種反應,如:在遇到不符合規(guī)范的手機串號編碼形式時,該數(shù)據(jù)就可以認為是無效數(shù)據(jù),需要丟棄,并做記錄。
在經(jīng)過前兩步的處理后,將經(jīng)過規(guī)范化和校驗的數(shù)據(jù)存儲在Hbase中。Hbase非常適合用于大量插入同時又有大量讀出的情況,能夠應對單表數(shù)據(jù)量在TB級別的情況[6],同時,Hbase適用于ETL過程對大數(shù)據(jù)量高并發(fā)的操作。
不論是因為數(shù)據(jù)分散在不同部門,對于相同商業(yè)含義的數(shù)據(jù),以各自不同的格式、方法存儲數(shù)據(jù)資料,因此需要整合;還是基于商業(yè)邏輯的需求,必須依照應用邏輯的特性來分類、轉換數(shù)據(jù)形態(tài);或者是把經(jīng)年累月所聚積的歷史數(shù)據(jù)來做合并、統(tǒng)計、分析及計算;以上這些需求都必須由數(shù)據(jù)轉化的步驟完成[7]。數(shù)據(jù)轉換所做的工作包括以下幾點:
1)過濾出想要的某些數(shù)據(jù),清除一些不要的數(shù)據(jù),或者是按照某些規(guī)則去驗證數(shù)據(jù)。
2)轉換或設定不同欄位的數(shù)據(jù)值,或者是使用原欄位值經(jīng)過固定規(guī)則產(chǎn)生新欄位的數(shù)據(jù)值。
3)針對數(shù)據(jù)的某些欄位做排序、分組或者是數(shù)據(jù)分組后的加總之類的數(shù)據(jù)運算以得到新的欄位數(shù)據(jù)值。
4)同質(zhì)或異質(zhì)數(shù)據(jù)來源的數(shù)據(jù)做關聯(lián)或者合并運算。
5)對數(shù)據(jù)增加序列值或者唯一辨識值。
6)依據(jù)不同的欄位的數(shù)據(jù)值來做數(shù)據(jù)切分,或者將多個數(shù)據(jù)流做合并。
數(shù)據(jù)載入的目的地通常是數(shù)據(jù)倉庫或者是數(shù)據(jù)市集(Data Mart),在本系統(tǒng)中,目的地是MySQL。
系統(tǒng)設計分為權限設計和系統(tǒng)設計。本設計中系統(tǒng)框架選用Django網(wǎng)絡框架,而數(shù)據(jù)庫則選擇MySQL,由于兩者都是免費的開源工具,有效地降低了成本。Django是基于Python語言最著名的Web Framework,眾多著名網(wǎng)站都是基于Django開發(fā)。同時,Django一些既定的程式骨架加快了開發(fā)進程[8],符合敏捷開發(fā)方式。敏捷開發(fā)是一種在上世紀九十年代受到關注的新型開發(fā)方法,該方法的特點就是應對快速變化的需求[9]。電信業(yè)務變化周期短,且市場變化不可預測,這就要求軟件開發(fā)短周期迭代交付。
1)系統(tǒng)管理
系統(tǒng)管理是整個系統(tǒng)的基礎和核心,決定著用戶的管理權限和數(shù)據(jù)權限[10]。該模塊的功能包括:創(chuàng)建用戶(包括創(chuàng)建用戶和分配角色),修改用戶,設置密碼,刪除用戶。
2)竄貨監(jiān)控
該模塊的功能是監(jiān)控銷售出去的終端的流向。通過監(jiān)控終端的激活地點,來判斷終端最終的使用地點。根據(jù)業(yè)務人員需求,設置監(jiān)控模式。例如:第一次激活在省外的情況;第一次激活在省內(nèi)同時第二次激活在省外的情況。
3)產(chǎn)品信息
終端的性能打分、銷量統(tǒng)計、銷售地域分析、銷售對比分析等,多重維度計算終端的信息。
4)客商信息
展示監(jiān)控客商的庫存變化、采購情況和銷售情況,是業(yè)務人員管理客商的有效依據(jù)。
5)供應商
通過監(jiān)控供應商的供貨數(shù)量、機型偏好等數(shù)據(jù),業(yè)務人員可以實時把控供應鏈的供應端情況。
6)獎勵規(guī)則
業(yè)務人員需要根據(jù)市場變化不定時制定獎勵策略,以激勵客商銷售終端的積極性,增加機型銷量。該模塊輸入獎勵規(guī)則,輸出客商的獎勵情況和獎勵詳情。
權限設計又分為管理權限和數(shù)據(jù)權限[11]。對于經(jīng)營分析系統(tǒng)來說,數(shù)據(jù)安全始終放在第一位的,倘若系統(tǒng)的安全得不到保障,造成泄露,則后果是不堪設想的[12]。而一個好的權限系統(tǒng)應該對每一類或者每一個用戶分配不同的操作權限,并且具有可擴展性。
管理權限包括:菜單管理、功能權限管理、創(chuàng)建用戶權限管理、用戶授權管理。根據(jù)電信運營商的業(yè)務特點,可分配以下幾個角色:
1)超級管理員:擁有所有的管理權限,但是不具備數(shù)據(jù)權限。
2)省級管理員:擁有所有菜單權限和功能權限,有權創(chuàng)建省級一下的管理員、所管轄區(qū)域內(nèi)的代理商和供應商,但不包括省級管理員。
3)市級管理員:擁有所有菜單權限和功能權限,有權創(chuàng)建市級一下的管理員、所管轄區(qū)域內(nèi)的代理商和供應商,但不包括市級管理員。
4)區(qū)縣級管理員:擁有所有菜單權限和功能權限,有權創(chuàng)建所管轄區(qū)域內(nèi)的代理商、供應商。
5)代理商:只擁有與其相關的菜單權限和功能權限。
6)供應商:只擁有與其相關的菜單權限和功能權限。
同時,根據(jù)需求,該系統(tǒng)不提供匿名用戶訪問權限,匿名用戶無法登錄該系統(tǒng)。為了簡化管理權限設計的難度,本設計采用了國際流行的基于角色的權限管理模型。該模型的特點是通過控制角色的分配和取消,來完成對用戶管理權限的權限的授予和取消。目前提供以上6種角色,并設置相應的管理權限,用戶根據(jù)其級別和所在區(qū)域再被指派為不同的角色。這樣,整個管理控制過程就分成兩個部分,即訪問權限與角色相關聯(lián),角色再與用戶關聯(lián),從而實現(xiàn)了用戶與訪問權限的邏輯分離[13],如圖3所示,角色可以看成是一個表達訪問控控制策略的語義結構,它可以表示承擔特定工作的資格。
圖3 權限管理模型
在邏輯上,該系統(tǒng)實現(xiàn)了用戶與權限的分離,這樣的設定策略簡化了權限管理的實現(xiàn)。除此之外,基于角色、權限分離的控制方法還可以清晰地表達角色之間的層次關系,實現(xiàn)權限簡化的原則和職責分離的原則。
與管理權限相同,數(shù)據(jù)權限也是同角色相關聯(lián)的,用戶被授予角色的時,同時被授予管理權限和數(shù)據(jù)權限。數(shù)據(jù)權限的目的,是限制某些角色去訪問某些數(shù)據(jù)行,在本系統(tǒng)中,市級管理員就只能看本市相關經(jīng)營數(shù)據(jù),而不能看其他市的。該系統(tǒng)的數(shù)據(jù)來自各個不同的部門,經(jīng)營數(shù)據(jù)對于任何公司來說都是十分重要和敏感的,這就要求對于不同部門和不同崗位的人員,只能看到其權限范圍內(nèi)的數(shù)據(jù),而不能越級越區(qū)查看其權限之外的數(shù)據(jù)[14]。各個角色的數(shù)據(jù)權限分配如下:
1)省級管理員:可查詢所在省范圍內(nèi)的所有數(shù)據(jù)。
2)市級管理員:可查詢所在市范圍內(nèi)的所有數(shù)據(jù)。
3)區(qū)縣級管理員:可查詢所在區(qū)縣范圍內(nèi)所有數(shù)據(jù)。
4)代理商:可查詢與自身業(yè)務相關數(shù)據(jù)。
5)供應商:可查詢與自身業(yè)務相關數(shù)據(jù)。
Django是基于Python語言最著名的Web Framework,眾多著名網(wǎng)站都是基于Django開發(fā)。Django有以下特色:首先是免費開放源碼,節(jié)約項目成本;其次,Django著重快速開發(fā)和高效能;同時,Django遵循DRT(Don't Repeat Yourself)守則,致力于代碼的簡潔易懂。Django是走大而全的方向,它最富盛名的就是其全自動化的后臺管理,只需要按個性化需求加以修改,就可以滿足大部分場景的權限需求,開發(fā)速度極快。Django的ORM使用起來簡單易行,做簡單的對象定義就行生成數(shù)據(jù)庫結構和全功能的管理后臺,Django提供方便的同時,也意味著Django內(nèi)置的ORM跟框架內(nèi)的其他模塊耦合程度很高,所以,在開發(fā)過程中通常都會使用Django內(nèi)置的ORM[15],否則就享受不到該框架所給予的基于ORM的種種便利。
Django的架構以為是基于MVC(Model-View-Controller,模型-視圖-控制器)開發(fā)而來,但Django的設計模式與MVC也不盡相同[16]。Django采用了MTV的架構模式,詳情參考表1。
表1 架構對比表
客戶端(Web Browser)會發(fā)送HTTP請求給服務器端,Django在接受請求后,會通過urls.py來決定該請求是發(fā)送給哪個View。請求發(fā)送給View后,由View根據(jù)Request的參數(shù),連接數(shù)據(jù)庫,來查詢所需要的數(shù)據(jù),最后通過對數(shù)據(jù)進行運算,將運算后的得到的數(shù)據(jù)放在Response,返回給客戶端。View的作用是決定呈現(xiàn)哪一個資料給客戶端。Model是系統(tǒng)的數(shù)據(jù)唯一的、權威的數(shù)據(jù)源[16]。它包含該系統(tǒng)所儲存數(shù)據(jù)的必要字段和行為,通常,一個模型對應數(shù)據(jù)庫唯一的一張表。
該系統(tǒng)采用的分布式ETL,分布式處理的過程適用于龐大的數(shù)據(jù)量和極為復雜的數(shù)據(jù)計算邏輯,極大地提高了數(shù)據(jù)更新的實時性;基于Django的網(wǎng)絡框架提供了豐富的開發(fā)組件和簡潔的ORM,開發(fā)周期大大縮短,能夠快速響應需求變化。在實際應用中,該方案解決了目前終端運營商的數(shù)據(jù)實時性和快速響應需求的難題,系統(tǒng)運行穩(wěn)定可靠,達到了設計的目的。
[1]陳楠,陳文培.敏捷開發(fā)中相關技術的應用[J].計算機應用與軟件,2011,28(4):202-204.
[2]逄利華,張錦春.基于Hadoop的分布式數(shù)據(jù)庫系統(tǒng)[J].辦公自動化,2014(5):47-49.
[3]閆德生,佟敏.云存儲技術在支撐系統(tǒng)中的應用[J].中國新通信,2016,18(8):58-59.
[4]馬志程,楊鵬,王寶會.面向大數(shù)據(jù)的數(shù)據(jù)管理平臺架構研究與應用[J].網(wǎng)絡新媒體技術,2015,4(4):22-27.
[5]阮夢黎.大數(shù)據(jù)挑戰(zhàn)下的NoSQL系統(tǒng)研究[J].聊城大學學報:自然科學版,2015(1):88-93.
[6]陳慶奎,周利珍.基于HBase的大規(guī)模無線傳感網(wǎng)絡數(shù)據(jù)存儲系統(tǒng)[J].計算機應用,2012,32(7):1920-1923.
[7]崔黎,佟本尚,何可,等.數(shù)據(jù)倉庫模型建設思路與方法[J].金融電子化,2012(4):75-77.
[8]曾浩.基于Python的Web開發(fā)框架研究[J].廣西輕工業(yè),2011(8):124-125.
[9]張孟.敏捷開發(fā)中原則與過程的分析與研究[J].科技傳播,2013(2):197-198.
[10]韓道軍,高潔,翟浩良,等.訪問控制模型研究進展[J].計算機科學,2010,37(11):29-33.
[11]劉龍,陳建斌,薛銳思.數(shù)據(jù)權限管理的研究和設計[J].價值工程,2013(31):215-216.
[12]王永祥.論企業(yè)數(shù)據(jù)安全保護方案[J].網(wǎng)絡安全技術與應用,2011(6):12-14.
[13]王偉全,張學平.基于崗位抽象的角色權限控制模型設計與實現(xiàn) [J].軟件導刊,2012,11(1):107-108.
[14]王蕾.基于B/S應用的通用權限管理系統(tǒng)的研建[D].北京:北京林業(yè)大學,2011.
[15]劉志凱,張?zhí)t.Django框架在web開發(fā)中的應用[J].農(nóng)業(yè)網(wǎng)絡信息,2015(2):51-52.
[16]王磊,危建國.基于Django的實驗室設備管理系統(tǒng)設計與實現(xiàn).軟件導刊,2014(12):99-101.
[17]安彩霞.基于Python和MySQL的企業(yè)營銷管理系統(tǒng)[J].電腦編程技巧與維護,2014(16):47-49.
Design of terminal management system based on distributed ETL and Django
WANG Yi?jia
(Wuhan Research Institution of Telecommunication,Wuhan430070,China)
In order to solve the terminal operator's demand for high real?time updating huge data and rapidly changing requirements,a Design ofTerminal Management System based on Distributed ETL and Django is designed in this paper.The ETL part of the system uses a distributed solution to handle large and complex data sources.Django web framework provides a rich set of components which are suitable for the changing needs and can respond quickly to changes in demand.The application result demonstrates that the system can real?time update operator's data and rapidly response to changes in demand in the requirements of the huge amount of data and changing needs.
ETL;distribution;agile development;Django
TN919.85
A
1674-6236(2017)22-0045-04
2016-09-08稿件編號:201609087
王義嘉(1990—),男,河北石家莊人,碩士研究生。研究方向:通信、互聯(lián)網(wǎng)。