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