一种分布式文件系统及文件存储方法
技术领域
本发明涉及大数据技术,特别涉及基于memcached的分布式文件处理技术。
背景技术
截止到2012年,数据量已经从TB(1024GB=1TB)级别跃升至PB(1024TB=1PB)、EB(1024PB=1EB)级别,乃至ZB(1024EB=1ZB)级别。国际数据公司(IDC)的研究结果表明,2008年全球产生的数据量为0.49ZB,2009年的数据量为0.8ZB,2010年增长为1.2ZB,2011年的数据量更是高达1.82ZB,相当于全球每人产生200GB以上的数据。而到2012年为止,人类生产的所有印刷材料的数据量为200PB,全人类历史上说过的所有话的数据量大约为5EB。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。而到了2020年,全世界所产生的数据规模将达到今天的44倍。每一天,全世界会上传超过5亿张图片,每分钟就有20小时时长的视频被分享。然而,即使是人们每天创造的全部信息—包括语音通话、电子邮件和信息在内的各种通信,以及上传的全部图片、视频与音乐,其信息量也无法匹及每一天所创造出的关于人们自身的数字信息量。这些数据具有数据量大、类型繁多、价值密度低及速度快实效高等特征。面对如此多的数据,如何将这些价值密度低的数据更好的存储,使我们获得更高的投资回报率将是我们面临的问题。
分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
在垂直搜索领域会需要存储大量的数据,并且这些数据速度快实效高,需要能快速的响应用户需求,提升用户体验,HDFS(HadoopDistributedFilesystem,Hadoop分布式文件系统)可以满足数据的吞吐量,而HDFS却要付出高时延的代价,因此不能满足低时延的业务要求,不能快读响应用户请求。HDFS选取最优节点的方法是:以两个节点间的带宽作为距离来衡量。HDFS将整个网络看作一棵树,两个节点间的距离是他们到最近的共同祖先的距离总和。HDFS仅仅考虑系统中各个节点网络环境的差异。未考虑各个节点的存储能力,只考虑了网络环境,机械的根据网络拓扑来评估各个存储节点的存储能力,判断依据单一,但是在我们实际的应用中各个节点硬件的差异也比较明显,也是影响系统性能的一个关键因素。
发明内容
本发明的目的就是克服目前HDFS无法满足低时间延迟的数据访问要求的缺点,提供一种一种分布式文件系统及存储、读取文件方法。
本发明解决其技术问题,采用的技术方案是,一种分布式文件系统,包括多个存储节点设备和分布式内存对象缓存系统Memcached数据库,所述系统还包括协同服务器、存储引擎和日志服务器,所述多个存储节点设备分别与协同服务器及Memcached数据库连接,存储引擎分别与日志服务器、协同服务器及Memcached数据库连接,
所述协同服务器,用于负责各存储节点设备的注册,并定期向已注册的各存储节点设备发送心跳报文进行保活检测,并将各存储节点设备回应的心跳报文中所携带的当前状态日志信息,发送给日志服务器;
所述日志服务器,用于接收协同服务器发送的各存储节点设备的当前状态日志信息,计算各存储节点设备的实时存储能力,并同步给存储引擎;
所述存储引擎,用于响应协同服务器下发的文件写操作请求,在采用滑动块算法对文件进行分块后,依据通过日志服务器动态获取的各存储节点设备的实时存储能力,为每一个文件块计算出最优存储节点位置,将文件与文件块存储节点位置映射关系写入Memcached数据库后,将各个文件块存入所述最优存储节点位置所在的存储节点设备;
所述Memcached数据库,用于保存文件及文件分块存储节点位置的映射关系;
所述存储节点,用于向协同服务器进行注册,并在向协同服务器回应的心跳报文中携带其状态日志信息,并将存储引擎写入的相应的文件分块进行存储。
具体的,所述各存储节点设备的当前状态日志信息包括该存储节点的存储空间、I/O能力及网络访问速率。
具体的,所述实时存储能力是指存储节点设备当前读或写一个字节所花费的时间。
进一步的,所述存储节点设备,还用于在完成文件的写操作后生成状态日志信息,主动上报协同服务器;所述协同服务器,还用于将各存储节点主动上报的状态日志信息,同步到日志服务器。
进一步的,所述存储引擎,还用于在空闲时,根据各存储节点设备的实时存储能力,对文件存储进行优化以将文件块被均衡的分配到各个存储节点设备。
进一步的,所述存储引擎还用于统计各个文件的访问频率,且将使用频率高的文件分块保存在Memcached数据库的缓存中。
本发明另一个目的,还提供一种分布式文件系统文件存储方法,应用于上述分布式文件系统,包括以下步骤:
A、客户端发起文件写操作请求,协同服务器生成写事务ID,并将其与文件写操作请求一起下发给存储引擎;
B、存储引擎响应协同服务器下发的文件写操作请求,在采用滑动块算法对文件进行分块后,依据通过日志服务器动态获取的各存储节点设备的实时存储能力,为每一个文件块计算出最优存储节点位置;
C、存储引擎将文件与文件块存储节点位置映射关系写入Memcached数据库后,将各个文件块存入所述最优存储节点位置所在的存储节点设备,各个存储节点设备分别写入相应的文件分块。
具体的,在步骤B中,所述为每一个文件块计算出最优存储节点位置的方法包括,为每个文件块选取备份因子个存储能力最优的存储节点位置;所述备份因子是指整个文件在系统中备份的数量。
具体的,在步骤C之后还包括如下步骤:所述各个存储节点设备在完成文件的写操作后生成状态日志信息,主动上报协同服务器。
具体的,在步骤A之前还包括如下步骤:协同服务器接受各存储节点设备的注册,并定期向已注册的各存储节点设备发送心跳报文进行保活检测,并将各存储节点设备回应的心跳报文中所携带的当前状态日志信息,发送给日志服务器。
本发明的有益效果是,通过上述一种分布式文件系统及文件存储方法,利用memcached数据库,提升文件分块索引的速度,同时通过分析日志数据来动态衡量各个存储节点的存储能力,让价值高的文件享有更高的存储资源,提升用户体验,保证信息的及时性,提升存储资源的投资回报率。
附图说明
图1是本发明实施例中分布式文件系统的系统框图。
图2是本发明实施例中分布式文件系统文件存储方法的流程图。
图3是本发明实施例中分布式文件系统文件读取方法的流程图。
具体实施方式
下面结合实施例及附图,详细描述本发明的技术方案。
本发明的一种分布式文件系统,包括多个存储节点设备、高性能分布式内存对象缓存系统(memcached数据库)、协同服务器、存储引擎及日志服务器,其中,所述多个存储节点设备分别与协同服务器及Memcached数据库连接,存储引擎分别与日志服务器、协同服务器及Memcached数据库连接,所述协同服务器,用于负责各存储节点设备的注册,并定期向已注册的各存储节点设备发送心跳报文进行保活检测,并将各存储节点设备回应的心跳报文中所携带的当前状态日志信息,发送给日志服务器;所述日志服务器,用于接收协同服务器发送的各存储节点设备的当前状态日志信息,计算各存储节点设备的实时存储能力,并同步给存储引擎;所述存储引擎,用于响应协同服务器下发的文件写操作请求,在采用滑动块算法对文件进行分块后,依据通过日志服务器动态获取的各存储节点设备的实时存储能力,为每一个文件块计算出最优存储节点位置,将文件与文件块存储节点位置映射关系写入Memcached数据库后,将各个文件块存入所述最优存储节点位置所在的存储节点设备;所述Memcached数据库,用于保存文件及文件分块存储节点位置的映射关系;所述存储节点,用于向协同服务器进行注册,并在向协同服务器回应的心跳报文中携带其状态日志信息,并将存储引擎写入的相应的文件分块进行存储。
本发明的分布式文件系统文件存储方法,应用于上述分布式文件系统中,首先客户端发起文件写操作请求,协同服务器生成写事务ID,并将其与文件写操作请求一起下发给存储引擎;然后存储引擎响应协同服务器下发的文件写操作请求,在采用滑动块算法对文件进行分块后,依据通过日志服务器动态获取的各存储节点设备的实时存储能力,为每一个文件块计算出最优存储节点位置;最后存储引擎将文件与文件块存储节点位置映射关系写入Memcached数据库后,将各个文件块存入所述最优存储节点位置所在的存储节点设备,各个存储节点设备分别写入相应的文件分块。
实施例
本发明实施例中一种分布式文件系统,其系统框图参见图1,包括多个存储节点设备、高性能分布式内存对象缓存系统(memcached数据库)、协同服务器、存储引擎及日志服务器,其中,多个存储节点设备分别与协同服务器及memcached数据库连接,存储引擎分别与日志服务器、协同服务器及memcached数据库连接,日志服务器与协同服务器连接。
这里,协同服务器为系统消息处理中心,通过HTTP协议与存储引擎、各存储节点设备及日志服务器通信,负责各存储节点设备的注册、读写事务的管理及将存储节点设备的当前状态日志传输给日志服务器,并与存储节点设备之间通过心跳检测实现保活,根据存储节点设备发送来的心跳报文获取存储节点的当前状态日志信息,并将每个存储节点设备的当前状态日志信息以日志的形式传输给日志服务器,协同服务器的安全策略可以采用主从备份的方式保证系统的可靠性。存储节点设备的当前状态日志信息包括存储能力、I/O能力及网络能力。存储能力包括磁盘空间大小、占用大小、转速等信息。
日志服务器从协同服务器获取各存储节点设备的当前状态日志信息,计算各存储节点设备的实时存储能力,并将其呈现给存储引擎。实时存储能力是指存储节点当前读或写一个字节所花费的时间,即传输一个字节所花费的时间+节点读写一个字节所花费的时间。存储引擎可以根据该实时存储能力为文件制定存储策略,保证系统的性能达到最优的效果。当一个存储节点的存储状态变化时,如各存储节点完成写事务后生成日志,主动上报协同服务器,协同服务器同步到日志分析引擎。日志分析引擎会根据新的日志数据,重新计算该存储节点的实时存储能力。
日志服务器用于实时记录整个系统的操作记录及为日志分析引擎提供数据依据;memcached数据库用于保存文件及文件分块存储位置的映射关系,以及文件与备份块的映射关系,将其存入内存中,统计各个文件的访问频率,且将部分使用频率高的文件分块保存在缓存中。日志服务器还可用于保证系统维护人员在系统宕机时恢复系统。
存储引擎用于响应协同服务器下发的文件操作请求,采用滑动块(slidingblock)算法对文件进行分块,且通过日志分析引擎呈现的各存储节点的实时存储能力动态维护一个关于存储能力的表项作为存储节点的依据,并写入文件与文件块存储位置映射关系。存储引擎将文件与文件块存储节点位置映射关系写入Memcached数据库后,将各个文件块存入所述最优存储节点位置所在的存储节点设备,各个存储节点设备分别写入相应的文件分块。存储引擎还可以在空闲时,根据各存储节点设备的实时存储能力,对文件存储进行优化以将文件块被均衡的分配到各个存储节点设备。减少高并发时,单个存储节点设备的压力。
在本发明实施例中,存储引擎与日志服务器可以是位于同一个物理服务器上,也可以部署在不同的物理服务器上,不作具体限定。
使用时,本发明文件存储方法实施例的流程图参见图2,其包括以下步骤:
步骤201,客户端发起文件写操作请求,协同服务器生成写事务ID,并将其与文件写操作请求一起下发给存储引擎;
步骤202,存储引擎响应协同服务器下发的文件写操作请求,在采用滑动块算法对文件进行分块后,依据通过日志服务器动态获取的各存储节点设备的实时存储能力,为每一个文件块计算出最优存储节点位置。在本步骤中,所述为每一个文件块计算出最优存储节点位置的方法包括,为每个文件块选取备份因子个存储能力最优的存储节点位置;所述备份因子是指整个文件在系统中备份的数量。
步骤203,存储引擎将文件与文件块存储节点位置映射关系写入Memcached数据库后,将各个文件块存入所述最优存储节点位置所在的存储节点设备,各个存储节点设备分别写入相应的文件分块。在本步骤之后,所述各个存储节点设备在完成文件的写操作后生成状态日志信息,主动上报协同服务器。
另外在本发明实施例中,协同服务器负责接受各存储节点设备的注册,并定期向已注册的各存储节点设备发送心跳报文进行保活检测,并将各存储节点设备回应的心跳报文中所携带的当前状态日志信息,发送给日志服务器。
读取文件的方法流程图参见图3,其包括以下步骤:
步301,客户端发起读取请求,协同服务器响应该读取请求,同时生成对应的读取事务ID,并将其与读取请求一起下发给存储引擎。
步骤302,存储引擎根据该读取请求从memcached数据库中查找所需文件对应的文件块所存储的最优存储节点。本步骤中,所需文件对应的文件块,包括原始文件块及备份存储的文件块。
步骤303,存储引擎从选取的最优存储节点中,将对应文件块透传给客户端。本步骤中,将对应文件块透传给客户端可以为:将对应文件块以数据流的方式透传给客户端。
步骤304,文件读取完成后,存储引擎告知协同服务器,协同服务器结束本次事务。