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