当某些机器出现故障的时候,即使得不到全部N块,也能得到完整的数据。
这里冗余打散和组装是用的特殊的矩阵变换,在达到可靠性的同时,也满足了安全性。
加密解密模块
由于冗余打散和组装过程中数据块已经有加密的成分,所以这里的加密解密模块只需考虑传输的时候一些关于索引信息,用户名,密码等传输控制的信息。
版本管理模块
前面提到了增量备份的概念,即当用户反复备份某一大部分内容相同的文件数据的时候,系统只备份在上一次备份后被增加、改动的部分数据。
增量备份可分为多级,每一次增量都源自上一次备份后的改动部分。
举例如下,某用户做开发工作,昨天将源代码上传备份,今天做了一些工作,又将源代码上传了一次。
那么今天只需上传增加改动的部分。
新版本的索引信息需要记录哪些是改动的文件,哪些是引用前一个版本的文件。
由于不同版本之间拥有公共数据,因此我们需要一个版本管理模块。
上传模块
根据用户需求,完成上传指定文件目录的工作。
下载模块
用户从网络备份系统中下载需要的文件。
删除模块
用户从网络备份系统中删除不再需要的文件。
2.2.2文件服务模块
响应请求模块
当客户端或者其他服务器发出各种请求时,文件服务器给予相应的响应。
相当于一个功能管理中心。
传输模块
传输模块具体实现类似ftp的传输功能,完成传输任务。
垃圾清理模块
按照前面的引用计数,当文件服务器上面的数据块的引用计数为0时,清除该数据块。
修复模块
文件服务器自发探测,发现并修复损坏服务器上的数据块。
当一个文件服务器彻底损坏时,它上面的数据块再也无法读取。
这时,文件服务器会与其他相关的文件服务器相互通信,从中取得数据,利用冗余机制将坏块重建。
信息统计模块。
每个文件服务器自己统计自己的一些系统信息,如磁盘空间,网络负载等等,将这些信息提交给索引数据库。
2.2.3索引服务模块
响应请求模块
处理客户端上传,下载,删除,创建目录,传送索引等种种请求。
索引服务器将对这些请求给出相应的响应,相当于一个功能管理中心。
调度模块
根据文件服务器提交的信息,调度模块计算选择合适的文件服务器,提供给用户用以存储或下载。
解密模块。
当和客户端交互的时候,要将一些传输控制的信息解密出来,例如索引信息,用户名等等。
2.2.4系统管理模块
系统管理员通过管理模块进行一些管理工作。
主要是用户的管理,服务器群的管理。
用户管理模块
管理用户的诸如帐户,密码,是否在线等信息。
服务器群管理模块
包括服务器群的网络负载,CPU负载等信息的管理。
消息管理模块
针对用户反馈信息,广告消息,系统通知消息进行管理
2.3性能需求分析
性能要求:
⏹资源的访问效率和公平性
要求系统设计能够保证海量数据备份、大规模数据传输的效率性,并保证多用户使用时的公平性。
⏹网络连接可拓扑性需求
要求系统设计要能够满足大范围网络传输带来的时延、带宽等限制。
同时要求系统具有规模可扩性,即可以提供某些策略支持,以保证在用户人数和系统规模急速增长的情况下,以最少的改动适应系统新的资源压力。
可用性要求:
资源的维护
备份系统必须具有高度的可用性,需要提供冗余支持以便维持系统运行健壮性,还需要提供可靠的数据备份机制,确保灾难发生时能够正确进行数据的恢复。
能够方便地进行系统扩展。
可修改性要求:
⏹系统结构灵活性
系统还需要具有良好的服务器扩展功能,支持多种服务器扩展模式,可根据用户量的大小及分布情况,选择相应的服务器扩展模式。
⏹平台和资源的相对独立
要求系统具有平台独立性,能够屏蔽平台的影响,实现系统的跨平台构建。
安全性需求:
要求系统能够对恶意攻击作出判断和反应,能够提供基本的防御操作并能够支持防御功能的升级。
3.网络备份系统体系结构设计
3.1体系结构风格选择
3.2我们使用4+1视图来指导体系结构设计,以逻辑视图,开发视图,场景视图为重点,辅助以进程视图和物理视图,通过功能行为,将整个大系统划分为三个子系统:
用户使用,管理员使用,系统管理.以下是对这三个子系统进行体系结构分析.
由于网络备份系统是一个面向个人用户的系统,当用户使用该系统时,最关心的两个问题就是备份数据的安全性与可靠性,特别是涉及到网络上的数据的传输,这些问题就显得十分重要。
因此,我们采用了这么两个策略来保证数据的安全性与可靠性:
1.采用数据加密传输机制来保证数据的安全性。
2.将文件打散为多个冗余碎片,存放到不同的服务器数据库上来保证数据的可靠性。
要实现这两个策略,需要用户在本地机器上运行复杂的代码,而不只是简单的上传下载的功能,而简单的浏览器并不能满足这个需要,因此,我们选用了C/S架构。
然而,传统的C/S架构有这么几个缺点:
●多个Client端与Server端数据库直连,会给Server端数据库带来很大的压力。
●Server端的业务与数据混合在一起,耦合度太高,不易修改。
为了解决这个问题,我们采用了改进的3层C/S架构,将服务器端的控制与数据分离,形成用户层——服务层——数据层的三层C/S体系结构。
这么一个C/S架构基本能满足用户的需求。
然而,除了用户,我们还需要为管理员提供管理接口。
由于管理员不需要上传下载文件,因此,对于管理员而言,他无须安装客户端。
并且,管理员必须能够方便快捷地管理系统。
因此,对于管理员,采用B/S架构是一个合适的选择。
除此以外,还有一个不容忽视的问题,那就是如果文件服务器发生永久性损坏,那么文件碎片的冗余度就会降低,这将会降低整个系统的可用性。
如果损坏的服务器数目超过了阈值,文件则无法恢复。
对于这个问题,我们的解决办法是将所有的文件服务器组织成一个P2P架构的机群,每台文件服务器可以自发地发现损坏的机器,然后将该机器上的数据恢复出来。
因此,网络备份系统最终的设计方案就是一个集合了C/S,B/S,P2P三种架构的混合体系结构。
3.2体系结构设计
3.2.1C/S体系结构
该体系结构是用来描述用户如何通过客户端获得系统的服务。
当客户需要备份文件时,客户端向索引服务器发送请求,索引服务器通过访问数据库,利用调度算法找出对该客户端而言速度最快最合适的几台文件服务器,将这些文件服务器列表返回给客户端,然后客户端直接将打散的文件传送到这些文件服务器上。
当客户需要下载文件时,也是同样一个过程。
客户端先向索引服务器发出请求,索引服务器访问数据库,利用调度算法找出最快最合适的几台文件服务器,将这些服务器列表返回给客户端,客户端直接从这些服务器上下载文件碎片,重新将文件组装起来。
体系结构如下图:
用户访问三层C/S架构
3.2.2B/S体系结构
该体系结构描述的是管理员如何通过web页面访问系统进行管理。
当管理员要管理整个系统时,他可以通过web页面登录。
Web服务器会给管理员提供一个管理界面。
主要管理功能有这么三种:
1.用户管理
Web服务器可以从索引数据库中读取所有用户的信息,管理员可以针对用户的信息,执行增、删、查、改的操作。
如添加用户,删除用户,设定用户空间等功能。
2.服务器管理
管理员可以对文件服务器群进行管理,加入或移出文件服务器。
并且,管理员可以通过索引数据库中的信息,查看文件服务器的状态,了解各个服务器指定时段的负载和使用情况。
3.通知管理
在该系统中,存在这么几种消息:
用户反馈消息;广告消息;系统通知消息。
管理员可以对这些消息进行管理。
体系结构如下图:
管理员管理B/S架构
3.2.3P2P体系结构
该体系结构是描述文件服务器之间如何自组织完成数据修复工作。
尽管我们采用了冗余机制,使得我们的系统在某几台文件服务器发生故障时,依然能够提供可靠的服务。
但是,如果文件服务器损坏的数目超过了阈值,那么文件将无法恢复。
所以,当一台文件服务器发生永久性故障,无法再恢复时,其他的文件服务器应该主动将损坏服务器上的数据重建出来。
步骤如下:
1.文件服务器周期性自发访问索引数据库,看看是否有其他服务器永久损坏。
2.寻找损坏服务器上适合自己修复的数据,加入自己的任务列表。
3.执行任务列表里的任务,从其他文件服务器上将相关的文件碎片下载到本地,通过冗余机制重建出被损坏的碎片。
体系结构如下:
文件服务器P2P体系结构
3.2.4混合体系结构
将以上3个不同的体系结构混合在一起,就是我们整个系统的混合体系结构。
混合体系结构
3.3其他的体系结构设计分析
3.3.1为客户提供的服务的体系结构
除了前面说过的C/S体系结构,我们还有这么一种B/S体系结构的设计:
将客户端的功能转移到服务层,设计作一个代理服务器。
这样客户端就可以通过web界面,利用http协议上传文件到代理服务器,由代理服务器将文件打散,再分别传送到文件服务器上。
下载时,通过代理服务器将文件组装完成,再利用http协议传送回客户端。
体系结构如下:
B/S体系结构
优点:
1.客户端只需要是用浏览器即可访问系统。
2.系统维护、升级方便。
缺点:
1.代理服务器必须处理所有客户的备份和下载请求,将他们所需的文件打散和组装。
代价很大。
是系统瓶颈。
2.用户通过http协议上传下载文件,没有经过加密处理,缺乏安全性。
3.利用http协议传送文件速度慢,无法获得质量保证。
3.3.2文件服务器修复数据的体系结构
除了前面的P2P体系结构,我们还有这么一种C/S体系结构的设计:
将修复文件的任务交给一台代理服务器,由它去发现需要修复的文件,并将该文件碎片从新生成。
最后再将生成的碎片传到文件服务器上。
这样就是一个C/S结构。
体系结构如下:
文件服务器C/S体系结构
优点:
文件服务器端代码简单,易于维护。
修复机制集中在代理服务器上。
修改方便。
缺点:
代理服务器负载太大,是系统瓶颈。
3.4构件设计与连接
基于前面的体系结构设计,我们可以从面向对象的角度出发,在一个比较大的粒度上,将网络备份系统划分为客户模块,索引服务器模块,文件服务器模块以及web服务器模块共4个大构件。
这些构件在整体上被分为3层:
客户层,服务层与数据层。
由于这是一个实时交互的系统,因此不同层次的构件通过自定义的协议进行RPC连接。
而在每个构件中,根据上面的需求分析,我们可以在一个小粒度下,将相互独立的功能模块设计为其中的子构件。
总的构件设计与连接如下:
构件设计与连接
4.网络备份系统框架设计
4.1领域需求分析
网络备份系统是一个面向个人用户的系统,其用户相当广泛,而且用户类型并不固定,但不管对于怎样的用户,当用户使用该系统时,最关心的两个问题就是备份数据的安全性与可靠性,以及数据存取的效率问题。
在这里,我们抽取了对于使用网络来进行数据备份的时候,不同角色关注的需求:
普通网络用户比较关注的需求:
●系统的数据安全性。
本地数据丢失时可以通过网络备份系统得到很好的恢复;存放在网络上的文件信息不被其他人窃取和篡改;当部分数据损坏或丢失时,并不影响数据的恢复;系统能够及时地修复数据,防止信息丢失。
●系统的数据可用性。
“可用性”主要讲两方面的问题,一是确保能够随时取得备份的数据,二是保证数据的一致性(版本同步)。
系统管理员比较关注的需求:
●系统可扩展性。
能够支持任意多的系统用户,需要解决两方面的问题:
空间和索引服务器负载能力。
“空间”问题通过分布式结构能够得到很好的解决,索引服务器负载则需要通过索引分布化解决。
●系统可用性。
这主要是针对系统的服务,系统能够在用户需要的时候提供备份,下载和修改等服务。
●数据操作高效性。
“数据操作”包括本地的数据处理以及网络数据传输,系统能够快速的进行文件碎片处理等数据准备工作,在网络传输时系统能够选取一组高效的存储线路同时在策略上考虑备份系统的特性,备份系统的备份和下载操作的非均衡性。
●数据高效性。
这里主要指数据空间的高效性,系统在确保数据安全可用的前提下,避免同样的数据重复存储,在增量备份的前提下使得数据得到更大的重复引用。
●系统负载均衡性。
系统包括多个文件服务器以及分布的索引服务器,系统能够保证这些负载均衡。
●系统低成本。
“低成本”包括两方面的内容,一方面是用户希望得到免费的网络备份服务,另一方面服务上希望通过很低的硬件成本就能提供服务。
●系统兼容性。
支持比较多的系统平台,网络备份系统充分利用了JAVA的平台无关性。
●数据移动性。
包括两方面的要求,一是系统保证用户在任何安装了网络备份系统客户端的环境下备份/恢复数据,二是系统的存储模块可以将存储的数据转移而不丢失。
4.2框架设计
客户端的结构框架图:
系统端的结构框架图:
底层公共框架说明:
基类和通用服务层
这一层主要是为了整个系统所需的基本服务提供基础设施,是整个系统开发中最基础最常用的部分.主要内容包括:
•对象模型基类
–JAVA类库
提供应用开发所需的无关具体应用背景的基本基类。
•通用服务(基本的机制)
–对象创建、复制、删除等服务
–消息机制
–数据传输
–安全维护
–冲突控制
–同步管理
这些通用服务以不完全实现的方式提供出来,应用开发者还可以根据实际应用的需要进一步完善开发。
公共对象层
提供系统范围内应用可能都需要的一组公共对象,这些对象所基于的类都可以在实际的应用开发中被继承,它们只是定义了公共对象最基本的属性和操作。
当然,应用开发者也可以绕过这些公共对象,定义自己所需要的对象。
提供这些公共对象的目的一方面是为了方便应用开发者的开发,另一方面也可以使得基于框架的应用开发能够具有较高的一致性。
按这些公共对象间的相关程度,可以分为如下的一些类组:
•类组0:
日历类
–自然日历
•类组1:
用户操作记录
–用户ID
–用户操作时间(日历)
–用户操作类型(上传/下载/删除/备份等)
•类组2:
用户组
–用户ID
–用户权限
–用户操作记录
•类组3:
系统管理员组
–管理员ID
–管理员权限
–管理员操作记录
•类组4:
传输消息组
–消息头
–消息类型
–消息内容
4.3核心业务模块及扩展机制
核心业务模块提供了网络备份系统的核心的功能,包括客户端的核心业务模块和系统端的核心业务模块,例如加密解密模块,版本管理模块,请求响应模块,文件传输模块,文件的组装打散模块,数据管理模块,垃圾清理模块,修复模块,信息统计模块,用户管理模块,服务器群管理模块,调度模块,消息管理模块等核心功能,并且提供了基于类和通用服务层以及公共对象层的扩展机制,使得应用的开发者可以基于基类与通用服务,或者公共对象层来完成新增业务的开发.核心业务模块层的目的在于创建一个良好的面向对象的体系结构,和一个易于扩展的具有基础应用结构和行为的实现。
应用的开发者可以对核心业务模块提供的这些功能进行扩展,增加用户界面、具体应用场景的特定需求、特殊规则、具有竞争力的应用特色,以及补充的应用功能。
比如对客户端进一步扩展自动升级功能,自动备份功能,自动监控文件夹的功能;系统管理员端对服务器端扩展出监控报警功能等.
客户端的核心业务模块:
✧加密解密模块
−功能:
这里涉及到在文件传输的时候一些关于用户名,密码,索引信息等传输控制的信息的加密解密,以保证文件传输的安全性。
−主要操作:
索引信息加密解密,传输加密,传输解密
−扩展