基于p2p的分布式文件系统p2pfs的实现构想

这篇日志最早是保存在Evernote中,后来写到了QQ邮箱的记事本里用发送给了导师,今天贴到CSDN博客上公布。

创建时间:2014年5月11日(星期天) 晚上7:25 | 分类:书签 | 天气:广州大雨-暴雨转大雨 | 字数:1930  | 发送到我的Qzone | 另存为... | 打印 | 添加到日历

一个分布式文件系统

简介

本文提出了一个基于P2P的分布式文件系统的构想。它采用蜂群思想(受《失控》启发),最大化单个节点的智能性来实现群体存储的智能性。它的优点是支持无限扩容,动态添加和删除节点,自动优化存储,以及超强的容灾能力。

主要思路

普通文件系统都需要一个NameNode,维护文件列表,客户端访问时先跟NameNode通信,获取存取文件的实际位置,再与data server通信得到文件内容,这里client与NameNode一直处于通信状态,需要得到文件位置再与之通信,这种系统的问题就在于如果NameNode挂掉,整个文件系统也会瘫痪。现有的方法是热备份NameNode,牺牲了一些性能,且在特殊条件下并不能保证效果。

因此设想一种去中心化的分布式文件系统,全部由data server组成。每个data server维护自身保存的文件和目录,并通过与其他Server之间的频繁通信来支持文件系统的正常功能,类似于全球路由转发系统。下面详细介绍不同的文件系统功能的实现:

P2PFS示例,蓝色表示访问请求,绿色表示请求转发,红色表示找到文件并执行文件通信

读取:

client可以从任何位置接入集群,只需要给通信的data server提交文件访问请求,请求只需包含文件名信息和client的地址,如果dataserver本机上有文件数据则直接发送给客户端,如果没有则转发访问请求,其他data server继续查找本机,没有则继续转发,转发之前与client通信确认client还在监听,有则根据请求信息与client发起连接,传输数据。

client接收到传输请求之后则关闭监听,开始传输数据,此时有可能其他data server还在转发该请求,但一旦监测到client已经启动连接则不再转发

client提出文件访问请求之后即相当于一台server,可以接收任意dataserver发起的连接而接收数据。它设置一个等待超时,超过该时间没有任何data server与这连接,说明这个文件是不存在的,client返回读文件失败

为了实现多次查找的优化。client请求时有一个参数,记录上次访问成功的节点作为参考,如果附加了这一字段,文件访问时会优先查找该主机,以便实现更快的查找。同时接入的server会缓存成功的连接,并在一定时间后失效,这样做的目的是如果文件访问比较频繁,省去了多次查找的麻烦。

data server转发时每次转发3台主机,总体上经过8次转发,就可以覆盖6500多台主机。但是要考虑如何避免请求的重复发送。

存储:

client接入任意一个data server即可写文件。首先发送写请求,该data server直接将文件写入本机,并发送备份给上行和下行的不同主机,文件描述信息和文件备份的保存位置一同保存,至少三份写完之后,client成功返回。

data server定期与保存自己文件备份的data server列表中的服务器通信,当有节点失效没有响应时,该data server就广播失效的节点。接收到失效通知的节点,包括上述节点,发送缺失备份的文件信息到其他的节点并更新备份信息。

查询:

查询文件系统中文件大小、是否存在、所有者,权限等信息时,只需要发送文件请求广播,收到请求的节点将文件描述信息,而不用返回文件数据。

本文件系统主要是依据文件名存取,文件夹可通过文件名加分隔符的形式实现。当查询文件夹下有哪些文件时,需要使用通配方式返回文件描述信息。

修改:

以同样的机制查找到文件位置之后,data server对文件执行增删改等操作,并根据自身文件的存储分布新增或释放(最终由驻守进程回收磁盘空间),当所有保存文件备份的data server返回成功信息时,client成功返回。

删除:

首先广播查找文件位置,应答的dataserver删除文件标记,并根据文件记录的备份信息发送删除通知,当data server接收到第一个响应地关闭监听,接收到3个响应时成功返回。

——负载均衡

当节点访问量较大时选择只接收可承载的服务,被拒绝的文件访问请求经过转发自动发送到其他备份节点,并由这些节点发送数据给client

问题:

如何加载频繁被访问的文件的访问速度?包括固定client频繁访问和大规模频繁访问?

client访问时携带上次成功访问的dataserver信息,接收请求的server可据此快速定位。从而实现single client快速访问

接收client的data server的出口节点缓存成功的连接列表,当大量client通过该data server入口访问时,可快速定位

如何应对扫描,重命名,空间计算等标准文件系统需要的操作?

访问文件时支持通配符,获取文件夹下的文件列表可通过该方式解决。除此之外,文件头保存文件的容量,存储块地址(节点地址),文件名等信息,重命名等不涉及文件数据的操作时只需要修改这部分信息

如何应对大文件和小文件的存储要求?

大文件。大文件分成多个块存在不同的位置,访问文件时只需找到存放文件头信息的节点,该节点数据发送完成之后再通知下一个保存数据的节点继续发送,原理同内存中的非连续地址的连续访问

小文件以长字符串形式存储成大块,请求访问时定位到该大文件,通过大文件头保存文件信息将文件数据发送给client

实现

每个data server上独立运行如下几个进程:

状态监控进程status:监控节点状态

用于监控dataserver自身的磁盘占用、CPU负载、网络吞吐量、温度等信息。用于机身状态异常报警,以及在用户查询集群状态时响应。

文件信息维护进程filecontrolers:维护节点文件目录信息

响应其他node发来的文件访问请求,并查询和更新本机保存文件的信息,可以是多个进程。dataserver保存的文件信息都存储在内存中,并通过该进程进行维护。

文件数据转发进程filetransfers:传输数据

对于文件信息维护进程确认的文件通信任务,如读文件操作,节点将传输任务交给该进程,该进程负责与client发起连接并传输数据,确保数据完整性,在传输结束之后断开连接。

集群心跳进程heartbeat:检测失效节点

节点上保存了许多文件,每个文件都有在不同节点上的备份,该进程与这些保存备份的节点定时通信,当有节点失效时,查找缺失备份的文件并传输到新的节点恢复文件。

磁盘空间管理进程diskmanager:管理节点磁盘空间

节点上的文件动态地添加和删除,会在磁盘空间上留下不连续的磁盘空间,该进程在系统负载较低时扫描文件,整理磁盘空间

基于p2p的分布式文件系统p2pfs的实现构想

时间: 2024-07-30 08:55:57

基于p2p的分布式文件系统p2pfs的实现构想的相关文章

基于mogileFS搭建分布式文件系统--海量小文件的存储利器

一.分布式文件系统    1.简介 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户机/服务器模式.一个典型的网络可能包括多个供多用户访问的服务器.另外,对等特性允许一些系统扮演客户机和服务器的双重角色.例如,用户可以"发表"一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样. 当下我们处在一个互联网飞速发展的信息社会,在

基于mogileFS搭建分布式文件系统 适用于海量小文件的存储

一.分布式文件系统 1.简介 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户机/服务器模式.一个典型的网络可能包括多个供多用户访问的服务器.另外,对等特性允许一些系统扮演客户机和服务器的双重角色.例如,用户可以"发表"一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样. 当下我们处在一个互联网飞速发展的信息社会,在海量并

基于centos6.7的Ceph分布式文件系统安装指南

Ceph是加州大学Santa Cruz分校的Sage Weil(DreamHost的联合创始人)专为博士论文设计的新一代自由软件分布式文件系统.自2007年毕业之后,Sage开始全职投入到Ceph开 发之中,使其能适用于生产环境.Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,使数据能容错和无缝的复制.2010年3 月,Linus Torvalds将Ceph client合并到内 核2.6.34中. 关于Ceph的详细介绍见:Ceph:一个 Linux PB 级分布式文件

基于外部ZooKeeper的GlusterFS作为分布式文件系统的完全分布式HBase集群安装指南

(WJW)基于外部ZooKeeper的GlusterFS作为分布式文件系统的完全分布式HBase集群安装指南 [X] 前提条件 服务器列表: 192.168.1.84 hbase84 #hbase-master 192.168.1.85 hbase85 #hbase-regionserver,zookeeper 192.168.1.86 hbase86 #hbase-regionserver,zookeeper 192.168.1.87 hbase87 #hbase-regionserver,z

一键架设FastDFS分布式文件系统脚本,基于Centos6

一.使用背景 业务驱动技术需要,原来使用 FTP和 Tomcat upload目录的缺陷日渐严重,受限于业务不断扩大,想使用自动化构建,自动化部署,Zookeeper中心化,分布式RPC DUBBO等技术时,遇到文件存储的瓶颈,因此需求一个使用分布式文件系统注入新的活力. 二.环境 参考 http://blog.csdn.net/hhq163/article/details/46536895 这个博主的博客安装比较新 FastDFS 版本. 在 Docker 下 使用最小化安装的 Centos6

分布式文件系统--GFS

分布式文件系统      Google File System:是由google开发并设计的一个面向大规模数据处理的一个分布式文件系统. 我们首先来简单的说明一下这个分布式,我们都知道现在要存储的数据量越来越大,但是一台电脑的存储能力是有限的,尽管我们可以通过提高某台电脑的存储能力来解决这个问题,但是这是无法根本解决这个问题,所以我们通过很多很多台廉价的电脑来分布式存储这些数据.简单说就是把要存的文件分割成一份一份存到许多台电脑上. 为了满足Google迅速增长的数据处理需求,Google设计并

分布式文件系统--------GlusterFS最佳实战

1. 背景 GlusterFS 是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端.GlusterFS借助TCP/IP或InfiniBand RDMA(一种支持多并发链接的"转换线缆"技术)网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据.GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能. GlusterFS支持运行在任何标准IP网络上标准应用程序的标准客户端 2. 优势 * 线性横向扩展

Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

转自:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929 Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中.Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据.所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中! Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中

基于ZooKeeper的分布式Session实现(转)

1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被动 物所观赏.为了让各种不同的动物呆在它们应该呆的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才 能更加放心安全的观赏动物.回到我们企业级应用系统中,随着信息化水平的不断提高,我们的企业级系统变得越来越庞大臃肿,性能急剧下降,客户抱怨频频.拆 分系