网络存储的实现与发展(通用3篇)
网络存储的实现与发展 篇1
0引言
网络数据流是由有序字节流组成, 字节流以报文为基本单位在网络中进行传输, 并且报文之间通常具有一定的状态联系和制约关系。关于网络数据流目前尚无统一的定义, 大体上可以把网络数据流研究分为二个方向:面向宏观的网络数据采样和面向微观的网络数据存储。数据流采样是通过定期采集网络数据流, 提取网络报文报头的特征, 实现对于网络状态分析。如 Cisco 的 Netflow 在高速网络上使用“k 取1”方法, 分析网络数据流特征使用动态采样方式提高 Netflow的精确度[1,2]。但是由于网络数据流采样时间粒度的限制, 错误地把几个不同的TCP连接聚集到一个 Netflow 中, 出现采样记录的连接数少于实际的 TCP 连接数的情况。网络数据存储主要集中在应用层, 如以 Squid 为代表的 Web cache 网络数据存储技术, Web cache 通过资源预取、缓存, 来提高客户端的响应速度, 节省带宽资源, 同时提供基于内容的资源传输管理[3]和多级缓存节点的资源协同管理等[4,5] 。但是以 Squid 为代表的 Web cache 是一种以 Object 为基本存储单位 Web Proxy 技术, 尽管 Squid 增加对部分应用协议的扩展功能, 但是仍然局限于少数的几种应用协议。
目前对于网络监控、安全预警等方面的应用, 不仅需要对网络流量进行整体的统计分析, 而且需要对每个连接状态进行记录、跟踪, 最后作出安全决策。因此如果能够实现对网络数据流的实时复制、存储, 不仅可以对关键网络业务进行精确的检测、跟踪, 而且能够实现对关键业务的备份和恢复。但是网络数据流的实时存储, 是一个在线存储过程, 面临着诸多瓶颈问题, 可以归纳如下: (1) 实际存储率低。由于网络数据流具有突发性和自相似性[6], 并且在传输过程中具有乱序传输特征[7], 加上实际存储时内存读写带宽与磁盘读写带宽的不匹配等原因, 会出现接收到数据包, 但没有实际写入磁盘中丢包现象, 造成实际存储比率低下。 (2) 缺乏有效的磁盘管理机制。传统的数据流复制, 通常是按序直接写入文件中, 不利于数据流的检索和查询。网络数据流的实时存储, 不仅需要较高的报文捕获能力, 而且更关注于网络数据流完整的复制、数据流状态维护以及磁盘数据管理。本文根据网络数据流特点提出网络数据流分段存储模型, 本模型包括基于内存的高速缓存结构和基于磁盘的多级索引结构。
1网络数据流存储模型
网络数据流存储是一个从网络数据流复制, 内存缓存, 再到磁盘文件管理的一个相互联系的复杂的过程, 为了说明方便, 首先进行如下的相关定义。
定义1 时序性 二个网络数据包a、b, 如果a 在网络传输中位于b 的前面, 即a 在时间轴上位于b 的左侧, 则称此时a 在时序上早于b, 表示为a<<b。
定义2 强时序性 设原始网络数据包序列为…l1, l2, m1, l3, m2, n1, n2, n3, m3, …, 如果数据包之间的时序性被严格地保持, 则称为数据流具有强时序性。
定义3 弱时序性 设数据流分段为 p1, p2, p3;p1= (l1, l2, l3) , p2= (m1, m2, m3) , p3= (n1, n2, n3) 。尽管p1, p2, p3 所包含数据包并没有严格的时序性, 但是每个分段的第一个数据包之间具有严格的时序性, 即l1<<m1<<n1, 称p1, p2, p3 之间具有弱时序性。为了衡量网络数据流分段后的与强时序的误差引入下面的定义。
定义4 弱时序性网络数据流的时间误差和秩 如果上例中把p1, p2, p3 数据流分段包含的数据包依次排列, 形如l1, l2, l3, m1, m2, m3, n1, n2, n3, 与原始数据流在时间上的最大的差值, 此例中的最大的差值可能发生在m3 与n1之间。把具有弱时序性的数据流分段中的数据包重新排列后, 与原始数据包序列进行比较, 其中任意二个数据包之间最大的时间差, 称为数据分段后的时间误差, 并把每个数据流分段包含的数据包的个数称为秩。
定义5 网络数据流的属主性 网络数据流通常具有明显的起始点 (源端) 或者终止点 (目的端) , 把这种性质成为网络数据流的属主性;网络数据流的属主性, 在不同应用场合使用不同的参数进行描述, 如 Cisco 通常使用七元组描述网络数据流的属主信息, TCP Session 中采用五元组描述网络数据流的属主信息。在某些场合也可以使用逻辑意义上的参数描述网络数据流属主信息。
通过上面的定义, 可以把网络数据流存储面临的基本问题描述为:如何在兼顾网络数据流属主性和时序性的前提条件下, 根据网络负载调整磁盘读写策略, 提高报文复制效率;如何为网络数据流建立体现时序性和属主性的双重索引结构, 提高磁盘数据管理效率。
由于传统模式下的按序复制、按序存储、限制磁盘读写策略, 增加了磁盘数据管理的难度。本文通过构造属主内保持强时序性、属主间保持弱时序性的数据流分段, 对构造后的网络数据流分段进行集中写入磁盘、集中建立索引等方式, 来解决传统网络数据流存储面临的问题。数据流分段之间的弱时序性是通过分段之间误差参数来控制的, 无论是网络协议栈还是网络应用程序都具有一定的时延容忍能力。例如默认的TCP 缓存区的大小是8KB, 如果能够保证各个弱时序性的分段秩小于14, 可以实现在不改变 TCP 语义的条件下, 进行网络数据流属主间的分段重组。为了实现网络数据流分段重组的目标, 本模型在内存中采用同时保证属主性和弱时序性的高速缓存结构, 在磁盘中对数据流分段建立数据流生成树的多级索引结构。
2相关算法的描述
2.1基于内存的网络数据流分段重组算法的描述
内存中的分段重组是通过散列表和循环队列实现的, 算法中的散列表保存的是不同属主的网络数据流存储位置的信息, 把同一属主内的网络报文经过散列运算后依次保存到同一个队列节点指向的数据流分段中, 通过散列运算保证网络数据流的属主性;循环队列中保存的是满足弱时序性的数据流分段, 对每个新到达的不同属主的数据流依次在队首开辟缓存空间, 而守护进程在队列尾部进行数据流分段的转存, 整个缓存和转存的过程是通过FIFO方式保证弱时序性的。对每个数据流分段之间的误差是通过每个分段的最大时间误差和秩来控制的, 当一个数据流分段超过时间误差或秩的最大限制, 设置分段满的状态标志, 表示不在本分段内继续缓存数据包, 等待守护进程进行转存数据流分段, 当仍有同一属主的网络数据流继续到达时, 重新在队首开辟缓存空间。
为了实现动态磁盘读写调度策略, 这里把循环队列分为三 个区:空闲区、工作区和转存区。空闲区是可利用的空闲队列资源;工作区是经过散列运算后, 正在写入的网络数据流分段, 工作区长度等于同时进行存储的不同属主的网络数据流数量;转存区是满足弱时序性的等待写入磁盘文件中的数据流分段, 通过观察转存区长度可以了解当时的网络流量情况, 动态调节磁盘读写速率。
算法的基本过程描述如下:
Step1 把客户端和服务器的 IP 地址经过散列运算, 得到在散列表中的表节点的索引值。如果散列表节点中没有记录, 并且冲突表为空, 在循环队列首部开辟新的队列节点, 把节点指针填入到散列表中, 进行状态记录, 把数据包数据按序插入到数据流链表结构中;如果散列表节点中有对应记录, 则取出队列节点指针。
Step2 通过队列节点的状态标志判断每个队列节点的使用状态。如果内存守护进程正在转存该节点数据, 表示内存守护进程正在转存该节点的数据, 则需要在循环队列头新开辟队列节点缓存空间, 并与散列表建立关联;如果节点为空或者正在被写入并且没有满, 表明该队列节点可用, 按序插入数据报文, 并在分段头信息中设置相应的属性值, 如果分段秩大于等于N, 设置分段满标记, 表明已达到最大数据流分段的误差, 等待内存守护进程进行数据分段转存;
Step3 在每个数据流分段转存周期内内存守护进程从队列尾部开始转存数据流分段。根据队列节点的属性值判读节点工作状态, 同时根据转存区长度‖tail-rear‖, 判断当时网络负载情况, 动态地调整转存周期的时间间隔。
Step4 定期清理散列表, 设置一个全局回收周期, 在回收周期内没有收到数据包, 则在散列表结构中清除对应项。
通过上述相关数据结构的描述和算法分析, 可以看出弱时序性的网络数据流存储结构在保持网络数据流的属主性和时序性的双重属性的前提下, 实现动态磁盘读写调度策略。对属主性的维护通过散列表实现, 对网络数据流的时序性维护通过队列的 FIFO 特性实现, 通过循环队列的分区处理, 达到对多属主数据流存储和动态调整的磁盘读写策略。弱时序性缓存结构产生的数据流分段是相同属主的网络数据报文并且报文之间具有严格的时序性, 为数据流磁盘管理提供了合理的结构。
2.2基于磁盘的网络数据流生成树的结构描述
对于由高速缓存结构产生的数据流分段, 使用数据流生成树的多极索引结构进行存储。数据流生成树是通过改进B+树来实现的。数据流生成树分为内节点和叶节点, 内节点记录索引结构数据和子树指针数据, 叶节点记录索引结构数据和数据指针数据, 数据指针指向每个分段的存储位置。数据流生成与B+树的区别是每个节点不再有最多子树的限制, 可以根据需要任意扩展子树的数目。数据流生成树不再局限于只有每个叶节点之间有兄弟指针, 内节点之间同样具有兄弟指针, 数据流生成树的高度共有五层, 每一层具有明确的逻辑含义。
设根节点为第一层, 根节点记录在一段时间内与所有Server 的通信记录;
第二层:记录每个Server 和不同的Client 之间的通信信息;
第三层:保存每个客户与服务器完整的会话的数据信息;
第四层:保存每个会话被分成的各个数据流分段的基本信息;
第五层:每个数据流分段的基本数据信息, 此时相邻数据流分段的最大时间差为最大时间误差, 每个数据流分段秩为N。
从分析可以看出, 整个数据流生成树的内节点实际上是由多级索引构成的索引树, 索引树由上到下时序性越来越强, 但是属主性越来越弱。由于网络数据流生成树在所有的内节点之间增加兄弟指针, 如果要实现针对某个节点的动态维护操作, 则整个索引树维护起来会十分复杂, 并且有些操作对于网络数据流也失去实际意义, 因此对网络数据流生成树的操作进一步限制。数据流生成树的操作仅限于数据流分段的基于状态插入和基于时序性和属主性的检索和移出, 这样把多数的对网络数据流生成树的操作转换为在同一层次上按序操作, 在满足对于数据流分段管理的同时, 也体现了网络数据流的属主性。
· 数据流基于时序性和属主性的查询 对于网络数据流的查询, 常用查询是基于时序性或者属主性的查询:
(1) 需要按照时间检索网络数据流, 可以根据第五层节点的指针依次读取各个数据流分段;
(2) 需要检索某一个客户的完整 Session 的数据流, 可以根据第四层节点指针读取各个完整 Session;
(3) 需要选择与某个服务器通信的所有客户端数据流, 可以通过第三层节点的指针依次进行查找。
上述三个查询体现网络数据流的基本特征, 是网络数据流最基本的查询操作。
· 数据流分段基于状态的插入 数据流分段的插入过程, 也是树形结构的构造过程:
Step1 如果第一层节点为空, 则根据数据流分段的头关键字, 构造第一层关键字, 并依次初始化第二层、第三层、第四层、第五层索引节点, 分配存储单元, 把数据流写入磁盘;否则进入Step2。
Step2 如果第一层节点不空, 但是没有记录, 则在第一层节点增加一条新记录, 并初始化第二层节点, 并作为第一层节点的右子树, 把原来第二层最右节点的指针指向新增节点;依次初始化第三层、第四层、第五层节点初始化, 最终把数据流分段存储在新开辟的存储单元数据块中;否则进入Step3。
Step3 第一层节点有要插入关键字记录, 根据记录进入第二层节点, 判断是否是新客户端的数据流如果是增加记录, 依次初始化其余层次的节点, 并存储数据;否则进入Step4。
Step4 第二层节点有要插入的数据流段关键字记录, 根据记录进入第三层节点, 此时判断该数据段是否是Session 建立连接状态的数据流, 如果是, 新建一个第四层节点, 作为第二层节点的右子树, 同时把该节点作为第四层节点的最右节点, 其余步骤与第三步类似;否则进入Step5。
Step5 如果不是新建连接状态的数据流, 则在第三层节点从左到右依次寻找, 找到第一个没有结束的 Session 插入数据流分段, 如果是结束 Session 的数据流, 把整个数据流标记结束, 进入第四层节点。
Step6 在第四层节点中修改节点相关信息, 建立新的第五层节点, 兄弟节点之间建立连接, 并开辟新的数据单元存储数据流, 最后返回。
· 数据流分段的移出 数据流分段的移出首先要进行查找, 然后把查找到的数据流分段进行移出, 数据流的移出操作与B+树的删除操作相似, 相区别的是不需要调整树的结构, 并且需要保持层间与右相邻兄弟之间的连接。
3系统实现及性能分析
相关算法是在基于Linux操作系统下实现的, 把Linux部署为软件路由器, 在IP层进行网络数据流复制、存储。通过在内核空间注册动态的内核模块, 挂载到Netfilter HOOK函数上, 进行网络报文捕获、过滤, 通过netlink传到用户空间, 在用户空间实现高速缓存结构。数据流分片的转存工作是由基于共享内存的守护进程来实现, 转存时间在最大的时间误差范围内, 每个数据流分段秩为N。为了便于整个系统的工作过程的跟踪和性能分析, 配置系统Log文件和系统运行Trace文件 (如图1 所示) 。
在实验中分别考察在丢包临界条件下, 本模型对于高分组速率和比特率环境下的实时存储能力。在实验中使用本文设计分段的存储模型 (PKT_s) 与传统网络报文存储模式 (PKT_t) 进行比较, 通过实验结果可以看出, 本模型无论在高报文传输速率, 还是大流量的网络背景下都具有较好地实时存储能力 (如图2所示) 。
采用网络数据流分段存储模型, 可以有效降低网络数据流存储时产生的索引数据量, 比较结果如图3所示。尽管网络数据流分段存储模型对于传统的报文存储模式具有明显的优势, 但是仍然呈现出实际存储比率随着数据流量的增加而降低的趋势, 根本原因是由于数据流分段重组时, 具有时间误差和秩的限制, 影响磁盘读写带宽的进一步提高;并且在内存中需要维护高速缓存结构, 同时增加系统的开销。
4结论
网络数据流的属主性和时序性是网络数据流存储过程中需要保持的两个基本属性, 本文根据网络数据流基本特征设计并实现网络数据流存储的基本模型。本模型包含网络数据流高速缓存结构和数据流生成树的索引结构, 进一步提高磁盘读写带宽, 并在此基础上提出同时体现网络数据流时序性和属主性的双重属性的索引结构。仿真结果表明网络数据流存储模型在高分组率和比特率的网络环境背景下, 都具有很好的实时存储能力。网络数据流存储算法模型在开封仪表有限公司生产的智能仪表中投入运用, 每年带来经济效益达1500万元, 完全符合工业现场要求, 具有很大的实际意义和应用价值。
参考文献
[1]Choi B Y, Bhattacharyya S.Observations on Cisco sampled NetFlow[C]//Proc 2005 ACM SIGMETRICS Workshop on Large Scale Net-work Inference (LSNI 2005) .Banff, AB, Canada, 2005:18-20.
[2] Zhao Q, Kummar A, Wang J.Data streaming algorithms for accurate and efficient measurement of traffic and flow matrices[C]//Proc ACM SIGMETRICS 2005.Banff, Alberta, Canada, 2005:252-255.
[3] Canali C, Cardellini V, Lancellotti R.Content adaptation architectures based on squid proxy server[J].World Wide Web, 2006, 9 (1) :70-75.
[4]Aguilar J, Leiss E L.A coherence-replacement protocol for Web proxycache systems[J].International Journal of Computers and Applica-tions, 2006, 28 (1) :12-14.
[5] Sosa V J, Gonazlez G, Navarro L.Building a flexile Web caching system[C]//Proc of the Fourth Mexican International Conference.Morelos, Mexico, 2003:61-63.
[6]Piratla N M, Jayasumana A P, Bare A A.Reorder density (RD) :a for-mal, comprehensive metric for packet reordering[C]//Proc Fourth IF-IP-TC6 Networking Conference.Ontario, USA, 2005:82-86.
[7] Iyer S, Kompella R R, Mckeown N.Analysis of a memory architecture for fast packet buffers[C]//Proc High Performance Switching and Routing Workshop.New York, 2001:368-372.
网络存储的实现与发展 篇2
本文基于作者提出的SP_Route算法[9]实现了一个分布式存储系统。该系统通过在物理网络之上叠加一个SP_Route网络层,将大量分散的节点连接成一个逻辑网络,利用每个节点贡献出来的资源,组成一个对用户透明的分布式存储系统。系统采用可扩展的体系结构,将来还可以加入用户管理、副本拷贝、访问缓存等功能。
1 体系结构
系统由地理上分布的多个节点构成,每个节点都是拥有存储空间的独立计算机,节点之间以P2P叠加网络的方式组织。
从系统功能的角度可以把系统分为5层:应用层、扩展层、数据层、路由层、物理层。
应用层 系统用户通过用户界面直接与应用层交互。通过应用层提供的文件服务接口,用户看到的将是一个虚拟的海量存储空间,用户可以上传、下载、共享自己的文件,也可以访问由其他用户上传的文件。由于应用层屏蔽了下层路由、复制、传输等技术细节,用户可以像使用本地存储系统一样访问分布式存储空间。在应用层中,可以利用系统下层提供的文件存储共享功能,开发各种应用。
扩展层 扩展层旨在提供一些除了基础路由以外的其他服务,包括用户管理、副本管理、缓存,安全机制等,使得系统可以更加安全、可靠、易用。它在基本路由和数据服务的基础上,让系统中各个节点间的联合更加紧密,让用户感觉不到底层分布的网络。
数据层 数据层通过转移节点间的负载,控制节点簇的规模,以及在节点离开,失效情况下自适应的修复路由,使得系统具有负载平衡和容错处理功能,保证向用户提供稳定的服务。
路由层 路由层使用SP_Route算法,建立节点地址空间与文件地址空间以及二者之间的映射关系,将系统中松散的节点结合到一起,形成一个二层的分布式的P2P叠加网络。主干网络之间采用基于DHT(Distributed Hash Table, 分布式哈希表)的路由定位机制[10],其他节点通过超级节点的转发,在有限跳数内能够找到目标文件。
物理层 物理层由地理上分布的具有存储空间和计算能力的计算机即系统节点以及连接它们之间的底层网络构成。各节点贡献自己的存储空间和计算资源,是构成网络的基本元素,是文件存储的实体,是路由转发的中间节点,物理层是整个系统的物理基础。
2 路由算法
SP_Route算法是以Pastry为基础,通过引入节点分级的概念形成的一种基于DHT的P2P网络路由定位算法。
它通过将节点分成超级节点和普通节点2级,在系统中形成以超级节点为中心的子网,网络中的节点以子网为单位组织路由。子网与子网之间通过类似Pastry的根据向最相近标识符前缀转移方式进行路由定位,子网内普通节点则通过超级节点转发路由信息。由于采取了“能者多劳”的策略,让超级节点承担更多的负载,避免让所有的节点直接参加主干网络的路由,使得系统能有效地避免“单点瓶颈”问题。同时,由于普通节点在加入系统时不需要构造复杂的路由表,使得节点加入时的耗费和节点加入离开对系统的影响大大降低。算法通过节点分裂和节点迁移的办法实现子网间的负载平衡,通过控制子网的规模,使得超级节点的负载基本保持平衡。同时,通过一种“ID欺骗”的策略在子网内通过自适应的副本拷贝来转移系统中的访问热点,使得算法能应对大量的访问同时集中于热点的情况。算法的详细描述见参考文献[9]。
3 底层协议与通信机制
3.1 通信机制
SP_Route是一个工作在应用层的叠加网络,其底层协议这里使用TCP/UDP协议实现。在对等网络路由和维护的过程中,节点之间需要发送大量的路由消息。这些路由消息通信量并不大,但是数量比较多,如果采用TCP协议,将引起大量的连接不断的建立和释放,通信效率不高。而UDP协议不需要预先建立连接,也不需要同时维护多个连接,适合多点之间交叉传输数据,特别适合对等网络之间的通信。所以在传递路由信息时,主要采用UDP通信,在传送大文件时为了保证文件传输的可靠性,采用TCP通信。由于UDP在通信过程中可能会丢失数据包,所以在应用层设计了通信规则,实现确认与重传,加强可靠性。
该规则参考TCP协议,采用编号实现,编号使用节点ID和节点消息序号来产生,保证整个系统惟一,因此省去了TCP建立连接时三次握手来协商编号的麻烦,另外由于在应用层发送数据是基于消息包的发送,不像TCP的流式传输,所以也不存在顺序问题;发送方发送数据报文后,等待确认报文,确认到达后认为对方已经收到发送的报文,若超时收不到确认,则认为发送的报文丢失,重传该报文,如果连续N次收不到确认报文,则停止发送,返回出错信息。对确认报文不再进行确认。
这里采用下列方法做到确认与重传:在每个节点有1个接收缓冲区和1个发送缓冲区。当发送1个数据报文时,就将该数据报文放入发送缓冲区,收到确认后,就将该数据报文从发送缓冲区中删除。接收缓冲区采用队列结构,收到一个报文时,若接收缓冲区不满,则将其加到队尾,如果接收缓冲区满了,就从队首删除一个报文,再将收到的报文加到队尾;这样做的目的是为了防止这种情况发生:接收方收到数据报文并发出确认报文,但确认报文丢失,发送方收不到确认报文,认为发送的数据报文丢失,将该数据报文重传1次,这时接收方可以根据接收缓冲来进行重复丢弃处理。由于队列长度有限,不能保证完成所有的重复丢弃处理,例如当接收的数据报文加入接收缓冲后,从队尾移动到队首,然后被删除,在这以后重发的该数据报文又到来,就不能进行重复丢弃处理。但由于队列每次都是删除其中最早收到的一个数据报文,选择一个合适的队列长度,就能将出现重复丢弃处理出错的概率降到很小。
3.2 通信协议
为了实现SP_Route的路由功能,并且保证报文的稳定传输,首先定义一套节点间的通信协议。基本的协议报文分为2种,一种为数据报报文,一种为确认报文。同时把各种命令报文以及应答报文的公共部分提取出来,作为通用协议报文的报头,而把各种具体的命令协议包含在报文的数据部分。
报文的类型由报文的第一个字节标识,若报文的第一个字节为DATA,则为数据报文,用来传递路由信息;如果报文的第一个字节为ACK,则为确认报文,用来确认给定序号的报文已经收到。
报文序号由发送报文的节点ID加上每个节点的序号产生器产生,序号产生器在0~4 000的范围内按序产生序号,由于一般来说,系统中不可能同时有属于一个节点的4 000个报文,所以采用这种方法可以保证系统中报文序号的惟一性。每个报文在系统中都有一个惟一的标识符称为Key值,报文Key值是节点转发报文的依据,节点总是在自己的路由表中找与Key值在ID空间中最接近的节点作为报文的下一跳节点。报文的Key值依据报文功能的不同而有不同的产生方法,当节点加入时,待加入节点的节点ID即为报文的key值,当查询文件时,报文把文件名的经过哈希变换得出的值作为报文的key值。报文还记录一些其他的信息,包括上一跳地址,源地址和报文长度等。
4 文件组织与节点结构
系统将文件看作对象,每个文件拥有1个全局标识符称为FID(文件标识符),文件的FID是通过对文件名进行哈希变换得到
在节点中,文件存放在指定的目录中,每个节点保留一个它所存储的文件的索引。索引以链表的方式组织,记录文件的FID、名称、存放路径、大小、关键字、描述信息等。
当每个节点加入系统时,指定一个或多个文件目录,并标明存储空间的大小,作为这个节点向系统贡献的资源。一个节点的路由信息由节点基础信息、路由信息、存储空间信息和文件索引信息4部分组成。超级节点和普通节点除路由信息不同外,其他部分具有相同的结构。节点基础信息包含了文件的各项基本信息,包括节点在系统中的节点ID,节点在网络中的IP地址,节点加入系统的时间,以及节点的一些硬件信息包括主频、存储空间、网络带宽等。节点每一项路由信息都由若干个<节点ID,IP地址>对组成,例如
5 结 语
本文介绍了基于SP_Route实现的一个分布式存储系统。系统采用可扩展的体系结构,通过在物理网络上叠加一个P2P网络层,将各个节点贡献的物理上分布的存储资源连接成对用户透明的文件存储系统,系统支持文件存储、文件查询,文件下载等功能,能为用户提供较稳定的存储服务。
参考文献
[1]Rowstron A,Druschel P.Pastry:Scalable,Distributed ObjectLocation and Routing for Large Scale Peer-to-Peer Systems[C].Proc.of the IFIP/ACM Int′l Middleware Conf.Lon-don:Springer-Verlag,2001:329-350.
[2]Rowstron A,Druschel P.PAST:A Large-scale,PersistentP2P Storage Utility[C].In:Proc.of the 8th Workshop onHot Topics in Operating Systems.New York:ACM Press,2001:75-80.
[3]Stoica I,Morris R,Karger D,et al.Chord:A Scalable Peer-to-Peer Lookup Service for Internet Applications[C].In:Proc.of the 2001 Conference on Applications,Technologies,Architectures,and Protocols for Computer Communications(SigComm).New York:ACM Press,2001:149-160.
[4]Ratnasamy S,Francis P,Handley M,et al.A Scalable Con-tent-addressable Network[C].In:Proc.of the 2001 Confer-ence on Applications,Technologies,Architectures,and Pro-tocols for Computer Communications(SigComm).NewYork:ACM Press,2001:161-172.
[5]田敬,代亚非.P2P持久存储研究[J].软件学报,2007(6):1 379-1 399.
[6]余敏,李战怀,张龙波.P2P数据管理[J].软件学报,2006(8):1 717-1 730.
[7]徐非,杨广文,鞠大鹏.基于Peer-to-Peer的分布式存储系统设计[J].软件学报,2004(2):268-277.
[8]Zhang Z,Lin S,Jin C.RepStore:A Self-managing and Self-tuning Storage Backend with Smart Bricks.In:Proc.of theInt′l Conf.on Autonomic Computing.New York:IEEEComputer Society:2004:122-129.
[9]龚星耀.基于P2P网络的路由与定位模型研究[D].南京:解放军理工大学,2006.
网络存储的实现与发展 篇3
1、网络文件存储工作原理
网络文件存储工作原理:在结构上采用流行的B/S模式, 用户通过浏览器将需要共享的资源文件存在服务器上, 还可以进行在线管理。
网络文件存储系统根据网路硬盘的需求以及工作原理分为三个主要功能模块:
(1) 共享资源文件上传下载:该模块是网络文件存储系统的核心部分, 完成文件上传下载, 划分文件存储空间和相对应目录。并将生成的文件相关信息保存的数据库当中。做为文件在线管理的基础数据。
(2) 数据查询模块:该模块的主要作用是对共享资源进行快速搜索定位。随着上传文件的逐步增多, 对下载资源文件的快速定位就显的尤为重要。该模块采用Ado。NET快速搜索模式大大提高数据查询能力。
(3) 文件在线管理模块:该模块可以让用户对上传的资源文件进行相应的编辑。对共享资源文件快速转移到相应目录功能。用户直接移动到相应目录功能。
二、网络文件存储系统的具体实现
网络文件存储系统功能实现设计到许多相关技术, 如数据库选择, 表设计, 文件上传空间开辟技术, IIS配置等, 每个细节都要认真考虑, 这里仅对网络文件存储系统实现的核心技术部分加以阐述。
1. 文件上传
文件上传使用了System。Web命名空间下的HttpPostedFile类中的SaveAs方法。该方法可以把文件上传到指定的服务器目录上。HttpPostedFile类还提供了ContentLength (获取上载文件的大小) , ContentType (获取客户端发送的文件的内容类型) 等属性。当用户点击上传文件后所使用方法的主要代码如下:
若要上传大文件可以通过修改IIS配置和Web。config文件来实现。
2、文件下载
ASP。NET中并没有相应的下载方法或者是控件。所以文件下载直接利用http的方式配合IIS设置达到文件下载目的。
3、目录管理与现实
目录管理是指对后台服务器目录的修改、创建、删除与移动。为了降低对服务器的压力, 采用了基于数据库的虚拟存储路径转移方式, 即不对已经上传的文件目录进行物理位置采取操作, 只对文件保存在数据库中的信息进行操作。创建, 删除操作这主要使用System。IO命名空间下的Directory类的CreateDirectory (创建目录) , Delete (删除目录) 等方法属性来实现。
private void CreateChildNode (DropDownList dirList, DataTable dataTable, int nParentID, string sParentName)
目录显示采用的也是数据库虚拟存储路径的方式, 通过Ado。NET把数据库中的目录路径查询出来, 根据数据库的设定所以采用递归的方式将数据添加到DropList中, 通过DropList的选择降查询出来的数据绑定到Gridview中。将文件目录显示出来。自定义Disk类中GetDirectoryFile () 方法用来获得文件目录。下面给出一个递归添加数据到DropList中的方法:
4、文件管理与显示
文件管理同目录管理相似包括对共享资源文件的编辑名称, 删除, 移动。这些操作主要使用System。IO下的File类中Copy (复制) , Move (移动) , Delete (删除) 等方法和属性来完成。文件显示是指随着当前目录的切换, 如何实现选中目录下的文件显示, 其显示包括对文件的动态排序, 分页选择等功能。这些是Web程序开发的难点所在, 要实现它的功能主要是应用Systme。Web。UI。WebControl命名空间下的Gridview控件。它是ASP。NET中一个功能强大的数据网格显示控件, 提供对数据的排序, 分页, 编辑等强大的功能, 可以按照用户的要求定制外观样式。使用GridView的关键是把数据库中存储的文件路径信息做为数据源并绑定。下面列出显示文件信息的方法。
将GridView的AllowSorting属性设置为True, 可以开启内置的类名排序功能。将AllowPaging属性设置为True, 可以开启内置的分页功能, 通过修改PageSize来实现分页时每页显示的行数。Web程序中通过语句GridView。SelectedNode。Cell[x]。Text (其中X是所在行的列标号。) 获取在界面上所选取的文件名。
结束语
文中介绍了网络文件存储的实现和原理, 如果能在此基础上加上相应的扩展将会取得另外的效果。
1、如果将用户上传文件仅限定为图片, 并制定相应的图片显示策略, 即可设计成为网络电子相册, 如腾讯QQ空间的相册功能。
2、如果加上用户权限控制方案, 那么就可以改成相对应的网络文档资料管理系统。
3、如果把网络文件存储看成一个独立的模块, 对外做出相应的接口。
摘要:随着计算机技术、网络技术和信息技术的发展, 越来越多地改善着现代人的观念。网络文件存储系统是计算机技术和网络迅速发展的一个必然趋势和解决方案, 它的主要目的是资源共享, 提供高效便捷的资源交换手段, 提高机房解决网络上传各种资料的重要工具, 让人们从局域网共享的各种安全隐患中解脱出来。