邊 霞, 趙 奎, 胡曉勤, 趙 輝
(四川大學(xué)計算機(jī)學(xué)院,四川成都610065)
計算機(jī)數(shù)據(jù)資料已成為企業(yè)開展業(yè)務(wù)的基礎(chǔ),其重要性不言而喻,能否保證數(shù)據(jù)的安全性對社會的發(fā)展至關(guān)重要。備份是保證數(shù)據(jù)安全的有效方法[1]。本文提到的文件備份系統(tǒng)是一種基于差異的遠(yuǎn)程文件備份系統(tǒng)[2-3],它將本地文件通過Internet備份到遠(yuǎn)程備份中心,當(dāng)本地文件發(fā)生災(zāi)難時,可由遠(yuǎn)程備份中心恢復(fù)。
基于MVC[4]的文件備份后臺管理系統(tǒng)是文件備份系統(tǒng)的一個子系統(tǒng),采用B/S架構(gòu),對文件備份系統(tǒng)的遠(yuǎn)程備份中心提供全面的管理功能,以方便用戶使用文件備份系統(tǒng)。目前基于MVC設(shè)計模式的多層架構(gòu)設(shè)計思想可以很好的解決B/S系統(tǒng)體系結(jié)構(gòu)。MVC設(shè)計模式本身比較復(fù)雜,所以在利用MVC設(shè)計模式進(jìn)行系統(tǒng)開發(fā)時選擇一個現(xiàn)成的MVC框架可以起到事半功倍的效果。因此本文選擇了基于MVC設(shè)計模式的Joomla框架[5-7],不但縮短了系統(tǒng)的開發(fā)時間,而且使后臺管理系統(tǒng)具有良好的性能。
文件備份系統(tǒng)可劃分為本地數(shù)據(jù)中心和遠(yuǎn)程備份中心兩個部分,并通過Internet連接。其架構(gòu)如圖1所示。
本地數(shù)據(jù)中心負(fù)責(zé)完成快照[8]的生成和管理、文件差異的計算[9]、網(wǎng)絡(luò)傳輸和整個流程的控制。遠(yuǎn)程備份中心負(fù)責(zé)完成對網(wǎng)絡(luò)控制的響應(yīng)和數(shù)據(jù)存儲,同時對存儲數(shù)據(jù)進(jìn)行歸檔管理。文件備份后臺管理子系統(tǒng)運(yùn)行在遠(yuǎn)程備份中心。
圖1 文件備份系統(tǒng)架構(gòu)
圖2 MVC模式結(jié)構(gòu)
MVC(model-view-controller)設(shè)計模式[10]是 xerox RARC 在20世紀(jì)80年代為編程語 Smalltaik80發(fā)明的一種軟件設(shè)計模式,至今被廣泛應(yīng)用在Web應(yīng)用程序開發(fā)中。它把一個應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個應(yīng)用被分成3個層——模型層、視圖層、控制層。它們各自處理各自的事務(wù),很好地實(shí)現(xiàn)表示邏輯和業(yè)務(wù)邏輯的有機(jī)分離,從而提高各部分的可復(fù)用性同時也可以減少代碼的維護(hù)量。MVC設(shè)計模式的核心是實(shí)現(xiàn)三層甚至多層的松散耦合,它將應(yīng)用程序抽象為模型、控制器以及視圖3個部分,三者既分工又合作地完成用戶提交的任務(wù)。MVC結(jié)構(gòu)[11-12]如圖2所示。
(1)模型(Model):應(yīng)用程序的核心,用來封裝和顯示數(shù)據(jù)對象。Model維護(hù)了系統(tǒng)的穩(wěn)定狀態(tài),也為Controller提供了訪問被Model封裝了的某些應(yīng)用功能的能力。
(2)視圖(View):是模型的表示,提供用戶交互界面。它可以從Model訪問數(shù)據(jù),并指定如何表示數(shù)據(jù)。當(dāng)模型狀態(tài)發(fā)生變化時,視圖應(yīng)該得到通知,以便更新視圖。View把用戶動作傳遞給Controller。
(3)控制器(Controller):定義應(yīng)用程序的行為。它接收來自視圖的請求,解釋用戶的動作并把它們映射為Model執(zhí)行的過程。根據(jù)用戶動作和Model處理的結(jié)果,選擇一個View作為這個用戶請求響應(yīng)的一部分。
Joomla[13]是一個基于 PHP+Mysql的 MVC框架,利用Joomla框架,可以簡化基于MVC的Web應(yīng)用程序的開發(fā),并能充分滿足應(yīng)用開發(fā)的需求,它具有跨平臺性、安全性與穩(wěn)定性高、開發(fā)周期短、開源等優(yōu)點(diǎn)。
Joomla應(yīng)用框架繼承了MVC模式的各項特性,主要由3部分組成:JModel﹑JController和Jview,這3個部分分別對應(yīng)于MVC設(shè)計模式的Model,Controller和View。應(yīng)用Joomla框架進(jìn)行Web組件的MVC擴(kuò)展開發(fā),都需要繼承JModel類、JView類和JController類。
基于MVC的文件備份后臺管理系統(tǒng)是采用B/S架構(gòu),基于LAMP(Linux+Apache+MySQL+PHP)平臺開發(fā)[14-15]的。包括5個功能模塊:用戶管理模塊,存儲介質(zhì)管理模塊,告警管理模塊,狀態(tài)監(jiān)控模塊和歷史備份點(diǎn)管理模塊,系統(tǒng)功能模塊如圖3所示。整個系統(tǒng)利用Joomla框架開發(fā),采用MVC設(shè)計模式的軟件體系結(jié)構(gòu)進(jìn)行設(shè)計。
3.2.1 數(shù)據(jù)庫設(shè)計
數(shù)據(jù)庫是整個文件備份后臺管理系統(tǒng)的核心,本系統(tǒng)采用的是Mysql數(shù)據(jù)庫,定義了用戶信息表(User)、介質(zhì)信息表(Disk_Info)、告警信息表(Alarm_List)、告警信息分級表(Alarm_Level)、告警分級操作表(Alarm_Operation)、狀態(tài)監(jiān)控表(Job_info)、歷史備份點(diǎn)狀態(tài)表(ArchiveInfo)、全備份策略表(ArchiveTactics)。為了使用這些表,用Joomla框架中實(shí)現(xiàn)的JFactory類的getDBO方法來建立數(shù)據(jù)庫的連接。
圖3 系統(tǒng)功能模塊
3.2.2 業(yè)務(wù)功能實(shí)現(xiàn)設(shè)計
基于MVC的文件備份后臺管理系統(tǒng)中每個模塊都是利用Joomla框架,嚴(yán)格按照MVC三層模式來設(shè)計的,實(shí)現(xiàn)了業(yè)務(wù)層和顯示層的分離。下面以介質(zhì)管理模塊為例,詳細(xì)說明系統(tǒng)使用MVC的實(shí)現(xiàn)設(shè)計方式:
(1)控制層(Controller)的實(shí)現(xiàn)設(shè)計
介質(zhì)管理模塊的控制層是由MediumController類來實(shí)現(xiàn)的,這個類的作用是是通過一系列方法與介質(zhì)管理模塊中的JModel類進(jìn)行聯(lián)系,從而調(diào)用介質(zhì)管理模塊中對應(yīng)的單個問題頁面將結(jié)果返回給瀏覽器。MediumController類除了擁有父類Jcontroller的方法外,還具有添加(addMedium())、保存(save-Medium())、刪除(removeMedium())、取消(cancelMedium())等方法。方法addMedium()通過設(shè)置調(diào)用介質(zhì)管理模塊中相關(guān)的JView類,直接將頁面返回給瀏覽器來實(shí)現(xiàn);方法saveMedium()和removeMedium()是通過調(diào)用相關(guān)JModel類中的數(shù)據(jù)保存和刪除方法來完成;方法cancelMedium()是通過地址的重新定向來實(shí)現(xiàn)的。MediumController類中的其它方法,都是通過調(diào)用不同的Model和View來實(shí)現(xiàn),和上述實(shí)現(xiàn)方法類似。代碼有很大的相似性,在很大程度上可以進(jìn)行復(fù)用
(2)模型層(Model)的實(shí)現(xiàn)設(shè)計
介質(zhì)管理模塊的模型層是由一系列繼承于 JModel的類來實(shí)現(xiàn)的,它們負(fù)責(zé)對單個問題進(jìn)行數(shù)據(jù)邏輯處理。這些類除了有父類Jmodel的方法外,還共同擁有數(shù)據(jù)保存方法(save-Medium())和數(shù)據(jù)刪除方法(removeMedium())與取消方法(cancelMedium()),代碼的可復(fù)用程度得到很大提高。有些類還具有分頁方法,方便用戶進(jìn)行瀏覽。
(3)視圖層(View)的實(shí)現(xiàn)設(shè)計
View層決定如何將數(shù)據(jù)展示給用戶,在該系統(tǒng)的MVC模式中視圖部分主要是PHP頁面。介質(zhì)管理模塊的視圖層是由一系列繼承于JView的類來實(shí)現(xiàn)的。以存儲介質(zhì)管理模塊中的添加介質(zhì)頁面為例,添加時要求介質(zhì)名稱與介質(zhì)路徑未被占用,這就要求在用戶輸入完成后,根據(jù)數(shù)據(jù)庫的內(nèi)容動態(tài)檢查用戶名與路徑是否存在,本模塊在實(shí)現(xiàn)的過程中采用了Jquery技術(shù)來實(shí)現(xiàn)動態(tài)檢查,Jquery是一個JavaScript框架。首先在用戶輸入完成后,相關(guān)函數(shù)自動觸發(fā),調(diào)用相應(yīng)的JModel,JModel將處理結(jié)果返回給此函數(shù),并顯示出來,從而實(shí)現(xiàn)了表單的自動檢查,整個過程是無閃的,大大增加了界面的友好性。
3.3.1 用戶管理模塊的實(shí)現(xiàn)
用戶管理模塊提供用戶身份認(rèn)證,用戶注冊,刪除以及修改用戶信息功能。登陸是系統(tǒng)的首要實(shí)現(xiàn)。從信息安全的角度考慮,要求進(jìn)行嚴(yán)格的入口控制,對登錄后的用戶有訪問權(quán)控制和操作等級限定。系統(tǒng)的登錄頁面需要口令驗證通過才能進(jìn)行登錄,對于注冊用戶來說,系統(tǒng)將會把用戶和密碼跟數(shù)據(jù)庫信息進(jìn)行對比,符合認(rèn)證才能成功登錄。登陸流程如圖4所示。
圖4 登陸流程
對于未登陸的用戶,首先進(jìn)入登陸頁面,Controller將得到的用戶名和密碼傳給Model,然后Model將用戶名和密碼與數(shù)據(jù)庫中存放的用戶名和密碼進(jìn)行比較驗證,如果驗證通過,則調(diào)用相關(guān)View顯示登陸成功,否則調(diào)用另一個View返回登陸頁面。對于已經(jīng)登陸的用戶,用戶可以選擇強(qiáng)制退出或者不退出。
3.3.2 介質(zhì)管理模塊的實(shí)現(xiàn)
介質(zhì)管理模塊負(fù)責(zé)管理文件備份系統(tǒng)的存儲介質(zhì),包括存儲介質(zhì)的增加,刪除,使用信息查看以及數(shù)據(jù)遷移等。隨著備份任務(wù)的增加,遠(yuǎn)程備份中心存儲的數(shù)據(jù)會越來越多,當(dāng)存儲介質(zhì)里面的數(shù)據(jù)達(dá)到或超過分配限額,或者需要更換存儲介質(zhì)時,需要將一部分?jǐn)?shù)據(jù)或者全部數(shù)據(jù)遷移到其它存儲介質(zhì)上。數(shù)據(jù)遷移包括遷移用戶備份數(shù)據(jù)與遷移用戶歷史備份點(diǎn)數(shù)據(jù)兩部分,在遷移過程中需要執(zhí)行相關(guān)XML腳本,以使用戶數(shù)據(jù)遷移后不影響數(shù)據(jù)恢復(fù)。數(shù)據(jù)遷移流程如圖5所示。
圖5 數(shù)據(jù)遷移流程
數(shù)據(jù)遷移執(zhí)行過程中每一個功能都是嚴(yán)格按照J(rèn)oomla框架的MVC三層模式來實(shí)現(xiàn)的,圖6為“執(zhí)行遷移”的MVC實(shí)現(xiàn)。首先類MediumController(Jcontroller的子類)的方法transmiteMedium()接受
圖6 “執(zhí)行遷移”的MVC實(shí)現(xiàn)
用戶需要執(zhí)行遷移操作的請求;然后調(diào)用類TransmitModel(Jmodel子類)的方法transmitMediumModel()進(jìn)行處理,此方法中利用系統(tǒng)調(diào)用(Exec(...))實(shí)現(xiàn)了數(shù)據(jù)的遷移與相關(guān)腳本的執(zhí)行,并在執(zhí)行完成后更新數(shù)據(jù)庫信息;最后調(diào)用類Transmit-View類(Jview子類)的方法Transmit()顯示結(jié)果。
3.3.3 告警管理模塊的實(shí)現(xiàn)
告警管理模塊主要是對文件備份系統(tǒng)中的任務(wù)失敗、存儲介質(zhì)出錯等多種系統(tǒng)錯誤,能夠按照用戶定義級別為告警信息分級、記錄,發(fā)送告警郵件給管理員,并且記錄管理員的處理情況。處理告警流程如圖7所示。
首先進(jìn)入模塊,Controller調(diào)用Model查詢數(shù)據(jù)庫,看是否有告警信息,如果有則調(diào)用View將之顯示出來,然后以同樣的流程進(jìn)入告警處理頁面,并處理告警。
圖7 告警處理流程
3.3.4 狀態(tài)監(jiān)控模塊的實(shí)現(xiàn)
狀態(tài)監(jiān)控模塊負(fù)責(zé)監(jiān)控文件備份系統(tǒng)遠(yuǎn)程備份中心端當(dāng)前的運(yùn)行狀態(tài),包括系統(tǒng)狀態(tài)和任務(wù)狀態(tài)。可以通過查看正在執(zhí)行的任務(wù)信息或者已登錄用戶活動情況了解遠(yuǎn)程備份中心的運(yùn)行狀態(tài)。其中任務(wù)狀態(tài)有未完成任務(wù),已完成任務(wù)和活動任務(wù)3種情況。每一種情況都詳細(xì)記錄了各個任務(wù)的任務(wù)類型,任務(wù)開始與結(jié)束時間,任務(wù)容量與流量以及用戶IP地址與用戶ID等。
3.3.5 歷史備份點(diǎn)管理模塊的實(shí)現(xiàn)
歷史備份點(diǎn)管理模塊提供歷史備份點(diǎn)的查看,刪除與恢復(fù)功能。其中歷史備份點(diǎn)的恢復(fù)功能在文件備份系統(tǒng)的客戶端已經(jīng)實(shí)現(xiàn),為了使用戶能夠在沒有安裝文件備份客戶端的情況下也能進(jìn)行歷史備份點(diǎn)的恢復(fù),在后臺管理系統(tǒng)中加入此功能,以方便用戶的操作。歷史備份點(diǎn)恢復(fù)流程如圖8所示。
圖8 歷史備份點(diǎn)恢復(fù)流程
首先進(jìn)入模塊,Controller得到用戶的ID(uid)傳給Model,Model使用uid在數(shù)據(jù)庫查找出用戶歷史備份點(diǎn)信息,之后調(diào)用 View將歷史備份點(diǎn)信息通過頁面顯示出來。其次以同樣的流程得到xml文件并顯示備份詳情,最后選擇某個需要恢復(fù)的歷史備份點(diǎn)或者某一文件,點(diǎn)擊恢復(fù),通過第二步得到的xml信息,定位到相應(yīng)文件實(shí)現(xiàn)下載。如果是多個文件,先進(jìn)行打包然后進(jìn)行下載。
隨著Web應(yīng)用系統(tǒng)規(guī)模的不斷增大,架構(gòu)一個高效、結(jié)構(gòu)清晰的Web應(yīng)用程序十分重要。MVC設(shè)計模式可以使業(yè)務(wù)邏輯與頁面邏輯彼此分離,從而提高開發(fā)的效率和提高質(zhì)量。采用基于MVC的框架開發(fā),優(yōu)勢如下:
(1)多個視圖可以對應(yīng)一個模型。這樣可以減少代碼的復(fù)制及代碼的維護(hù)量,一旦模型發(fā)生改變,也易于維護(hù)。
(2)模型返回的數(shù)據(jù)與顯示邏輯分離。模型數(shù)據(jù)可以應(yīng)用諸如PHP等任何的顯示技術(shù),開發(fā)具有很大的靈活性。
(3)應(yīng)用被分隔為三層,降低了各層之間的耦合,提供了應(yīng)用的可擴(kuò)展性。
(4)控制層可以把不同的模型和不同的視圖組合在一起,完成各種不同的請求。
(5)MVC更符合軟件工程化管理的精神。不同的層各司其職,每一層的組件具有相同的特征,有利于通過工程化和工具化產(chǎn)生管理程序代碼。
[1]李濤.網(wǎng)絡(luò)安全概論[M].北京:電子工業(yè)出版社,2004.
[2]TANG Wei-tong,LIU Xiao-jie,LI Tao,et al.Fast differential backup method[J].Computer Engineering,2008,34(11):255-257.
[3]REN Xin,LI Tao,HUXiao-qin.Design and implementation of remote file backup and recover system[J].Computer Engineering,2009,35(10):112-114.
[4]劉麗,任巖.基于的銀行中間業(yè)務(wù)系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].計算機(jī)工程與設(shè)計,2007,28(21):5282-5284.
[5]于秀金,張皓斐.基于Joomla!系統(tǒng)開發(fā)網(wǎng)站的設(shè)計與實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2010,23(11):50-55.
[6]Barrie M North.Joomla!a user's guide-building a successful joomla!powered website[M].Prentices Hall,2007.
[7]Andy Wallace.Joomla!1.5 installationmanual[M].Prentice Hall,2007.
[8]QINSheng,LIHuai-yang,HAIJie.Design andimplementationof multi-version snapshot based on block device[J].Computer Engineering,2009,35(22):71-73.
[9]馬曉旭,胡曉勤,鄧洪敏,等.一種逆向的差異歸檔方法[J].四川大學(xué)學(xué)報(工程科學(xué)版),2009,41(4):191-195.
[10]劉春花,王忠民.基于MVC模式的遠(yuǎn)程評議系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].計算機(jī)工程與設(shè)計,2008,29(13):3468-3470.
[11]Ahmed Seffah,Taleb Mohamed.Halima Habieb-Mammar and Alain Abran.reconciling usability and interactive system architecture using patterns[J].Journal of Systems and Software,2008,81(11):1845-1852.
[12]CHEN Liang-chen,SUN Gong-xing,ZHAO Rui,et al.Research and design of food secure monitor system based on MVC[J].Application Research of Computers,2008,25(7):2091-2093.
[13]胡前進(jìn),蔡永州,吳敏.基于MVC模式的Joomla!框架在Web系統(tǒng)組件擴(kuò)展開發(fā)中的應(yīng)用研究[J].現(xiàn)代教育技術(shù),2009,19(6):97-100.
[14]楊明華,譚勵,于重重.LAMP網(wǎng)站開發(fā)黃金組合:Linux+Apache+MySQL+PHP[M].北京:電子工業(yè)出版社,2008.
[15]劉振巖,王勇,陳立平.基于Linux的WEB程序設(shè)計[M].北京:人民郵電出版社,2008.