边 霞, 赵 奎, 胡晓勤, 赵 辉
(四川大学计算机学院,四川成都610065)
计算机数据资料已成为企业开展业务的基础,其重要性不言而喻,能否保证数据的安全性对社会的发展至关重要。备份是保证数据安全的有效方法[1]。本文提到的文件备份系统是一种基于差异的远程文件备份系统[2-3],它将本地文件通过Internet备份到远程备份中心,当本地文件发生灾难时,可由远程备份中心恢复。
基于MVC[4]的文件备份后台管理系统是文件备份系统的一个子系统,采用B/S架构,对文件备份系统的远程备份中心提供全面的管理功能,以方便用户使用文件备份系统。目前基于MVC设计模式的多层架构设计思想可以很好的解决B/S系统体系结构。MVC设计模式本身比较复杂,所以在利用MVC设计模式进行系统开发时选择一个现成的MVC框架可以起到事半功倍的效果。因此本文选择了基于MVC设计模式的Joomla框架[5-7],不但缩短了系统的开发时间,而且使后台管理系统具有良好的性能。
文件备份系统可划分为本地数据中心和远程备份中心两个部分,并通过Internet连接。其架构如图1所示。
本地数据中心负责完成快照[8]的生成和管理、文件差异的计算[9]、网络传输和整个流程的控制。远程备份中心负责完成对网络控制的响应和数据存储,同时对存储数据进行归档管理。文件备份后台管理子系统运行在远程备份中心。
图1 文件备份系统架构
图2 MVC模式结构
MVC(model-view-controller)设计模式[10]是 xerox RARC 在20世纪80年代为编程语 Smalltaik80发明的一种软件设计模式,至今被广泛应用在Web应用程序开发中。它把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成3个层——模型层、视图层、控制层。它们各自处理各自的事务,很好地实现表示逻辑和业务逻辑的有机分离,从而提高各部分的可复用性同时也可以减少代码的维护量。MVC设计模式的核心是实现三层甚至多层的松散耦合,它将应用程序抽象为模型、控制器以及视图3个部分,三者既分工又合作地完成用户提交的任务。MVC结构[11-12]如图2所示。
(1)模型(Model):应用程序的核心,用来封装和显示数据对象。Model维护了系统的稳定状态,也为Controller提供了访问被Model封装了的某些应用功能的能力。
(2)视图(View):是模型的表示,提供用户交互界面。它可以从Model访问数据,并指定如何表示数据。当模型状态发生变化时,视图应该得到通知,以便更新视图。View把用户动作传递给Controller。
(3)控制器(Controller):定义应用程序的行为。它接收来自视图的请求,解释用户的动作并把它们映射为Model执行的过程。根据用户动作和Model处理的结果,选择一个View作为这个用户请求响应的一部分。
Joomla[13]是一个基于 PHP+Mysql的 MVC框架,利用Joomla框架,可以简化基于MVC的Web应用程序的开发,并能充分满足应用开发的需求,它具有跨平台性、安全性与稳定性高、开发周期短、开源等优点。
Joomla应用框架继承了MVC模式的各项特性,主要由3部分组成:JModel﹑JController和Jview,这3个部分分别对应于MVC设计模式的Model,Controller和View。应用Joomla框架进行Web组件的MVC扩展开发,都需要继承JModel类、JView类和JController类。
基于MVC的文件备份后台管理系统是采用B/S架构,基于LAMP(Linux+Apache+MySQL+PHP)平台开发[14-15]的。包括5个功能模块:用户管理模块,存储介质管理模块,告警管理模块,状态监控模块和历史备份点管理模块,系统功能模块如图3所示。整个系统利用Joomla框架开发,采用MVC设计模式的软件体系结构进行设计。
3.2.1 数据库设计
数据库是整个文件备份后台管理系统的核心,本系统采用的是Mysql数据库,定义了用户信息表(User)、介质信息表(Disk_Info)、告警信息表(Alarm_List)、告警信息分级表(Alarm_Level)、告警分级操作表(Alarm_Operation)、状态监控表(Job_info)、历史备份点状态表(ArchiveInfo)、全备份策略表(ArchiveTactics)。为了使用这些表,用Joomla框架中实现的JFactory类的getDBO方法来建立数据库的连接。
图3 系统功能模块
3.2.2 业务功能实现设计
基于MVC的文件备份后台管理系统中每个模块都是利用Joomla框架,严格按照MVC三层模式来设计的,实现了业务层和显示层的分离。下面以介质管理模块为例,详细说明系统使用MVC的实现设计方式:
(1)控制层(Controller)的实现设计
介质管理模块的控制层是由MediumController类来实现的,这个类的作用是是通过一系列方法与介质管理模块中的JModel类进行联系,从而调用介质管理模块中对应的单个问题页面将结果返回给浏览器。MediumController类除了拥有父类Jcontroller的方法外,还具有添加(addMedium())、保存(save-Medium())、删除(removeMedium())、取消(cancelMedium())等方法。方法addMedium()通过设置调用介质管理模块中相关的JView类,直接将页面返回给浏览器来实现;方法saveMedium()和removeMedium()是通过调用相关JModel类中的数据保存和删除方法来完成;方法cancelMedium()是通过地址的重新定向来实现的。MediumController类中的其它方法,都是通过调用不同的Model和View来实现,和上述实现方法类似。代码有很大的相似性,在很大程度上可以进行复用
(2)模型层(Model)的实现设计
介质管理模块的模型层是由一系列继承于 JModel的类来实现的,它们负责对单个问题进行数据逻辑处理。这些类除了有父类Jmodel的方法外,还共同拥有数据保存方法(save-Medium())和数据删除方法(removeMedium())与取消方法(cancelMedium()),代码的可复用程度得到很大提高。有些类还具有分页方法,方便用户进行浏览。
(3)视图层(View)的实现设计
View层决定如何将数据展示给用户,在该系统的MVC模式中视图部分主要是PHP页面。介质管理模块的视图层是由一系列继承于JView的类来实现的。以存储介质管理模块中的添加介质页面为例,添加时要求介质名称与介质路径未被占用,这就要求在用户输入完成后,根据数据库的内容动态检查用户名与路径是否存在,本模块在实现的过程中采用了Jquery技术来实现动态检查,Jquery是一个JavaScript框架。首先在用户输入完成后,相关函数自动触发,调用相应的JModel,JModel将处理结果返回给此函数,并显示出来,从而实现了表单的自动检查,整个过程是无闪的,大大增加了界面的友好性。
3.3.1 用户管理模块的实现
用户管理模块提供用户身份认证,用户注册,删除以及修改用户信息功能。登陆是系统的首要实现。从信息安全的角度考虑,要求进行严格的入口控制,对登录后的用户有访问权控制和操作等级限定。系统的登录页面需要口令验证通过才能进行登录,对于注册用户来说,系统将会把用户和密码跟数据库信息进行对比,符合认证才能成功登录。登陆流程如图4所示。
图4 登陆流程
对于未登陆的用户,首先进入登陆页面,Controller将得到的用户名和密码传给Model,然后Model将用户名和密码与数据库中存放的用户名和密码进行比较验证,如果验证通过,则调用相关View显示登陆成功,否则调用另一个View返回登陆页面。对于已经登陆的用户,用户可以选择强制退出或者不退出。
3.3.2 介质管理模块的实现
介质管理模块负责管理文件备份系统的存储介质,包括存储介质的增加,删除,使用信息查看以及数据迁移等。随着备份任务的增加,远程备份中心存储的数据会越来越多,当存储介质里面的数据达到或超过分配限额,或者需要更换存储介质时,需要将一部分数据或者全部数据迁移到其它存储介质上。数据迁移包括迁移用户备份数据与迁移用户历史备份点数据两部分,在迁移过程中需要执行相关XML脚本,以使用户数据迁移后不影响数据恢复。数据迁移流程如图5所示。
图5 数据迁移流程
数据迁移执行过程中每一个功能都是严格按照Joomla框架的MVC三层模式来实现的,图6为“执行迁移”的MVC实现。首先类MediumController(Jcontroller的子类)的方法transmiteMedium()接受
图6 “执行迁移”的MVC实现
用户需要执行迁移操作的请求;然后调用类TransmitModel(Jmodel子类)的方法transmitMediumModel()进行处理,此方法中利用系统调用(Exec(...))实现了数据的迁移与相关脚本的执行,并在执行完成后更新数据库信息;最后调用类Transmit-View类(Jview子类)的方法Transmit()显示结果。
3.3.3 告警管理模块的实现
告警管理模块主要是对文件备份系统中的任务失败、存储介质出错等多种系统错误,能够按照用户定义级别为告警信息分级、记录,发送告警邮件给管理员,并且记录管理员的处理情况。处理告警流程如图7所示。
首先进入模块,Controller调用Model查询数据库,看是否有告警信息,如果有则调用View将之显示出来,然后以同样的流程进入告警处理页面,并处理告警。
图7 告警处理流程
3.3.4 状态监控模块的实现
状态监控模块负责监控文件备份系统远程备份中心端当前的运行状态,包括系统状态和任务状态。可以通过查看正在执行的任务信息或者已登录用户活动情况了解远程备份中心的运行状态。其中任务状态有未完成任务,已完成任务和活动任务3种情况。每一种情况都详细记录了各个任务的任务类型,任务开始与结束时间,任务容量与流量以及用户IP地址与用户ID等。
3.3.5 历史备份点管理模块的实现
历史备份点管理模块提供历史备份点的查看,删除与恢复功能。其中历史备份点的恢复功能在文件备份系统的客户端已经实现,为了使用户能够在没有安装文件备份客户端的情况下也能进行历史备份点的恢复,在后台管理系统中加入此功能,以方便用户的操作。历史备份点恢复流程如图8所示。
图8 历史备份点恢复流程
首先进入模块,Controller得到用户的ID(uid)传给Model,Model使用uid在数据库查找出用户历史备份点信息,之后调用 View将历史备份点信息通过页面显示出来。其次以同样的流程得到xml文件并显示备份详情,最后选择某个需要恢复的历史备份点或者某一文件,点击恢复,通过第二步得到的xml信息,定位到相应文件实现下载。如果是多个文件,先进行打包然后进行下载。
随着Web应用系统规模的不断增大,架构一个高效、结构清晰的Web应用程序十分重要。MVC设计模式可以使业务逻辑与页面逻辑彼此分离,从而提高开发的效率和提高质量。采用基于MVC的框架开发,优势如下:
(1)多个视图可以对应一个模型。这样可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护。
(2)模型返回的数据与显示逻辑分离。模型数据可以应用诸如PHP等任何的显示技术,开发具有很大的灵活性。
(3)应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。
(4)控制层可以把不同的模型和不同的视图组合在一起,完成各种不同的请求。
(5)MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。
[1]李涛.网络安全概论[M].北京:电子工业出版社,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]刘丽,任岩.基于的银行中间业务系统的设计与实现[J].计算机工程与设计,2007,28(21):5282-5284.
[5]于秀金,张皓斐.基于Joomla!系统开发网站的设计与实现[J].电脑开发与应用,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].四川大学学报(工程科学版),2009,41(4):191-195.
[10]刘春花,王忠民.基于MVC模式的远程评议系统的设计与实现[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]胡前进,蔡永州,吴敏.基于MVC模式的Joomla!框架在Web系统组件扩展开发中的应用研究[J].现代教育技术,2009,19(6):97-100.
[14]杨明华,谭励,于重重.LAMP网站开发黄金组合:Linux+Apache+MySQL+PHP[M].北京:电子工业出版社,2008.
[15]刘振岩,王勇,陈立平.基于Linux的WEB程序设计[M].北京:人民邮电出版社,2008.