一种基于分布式系统的文件读取方法及装置的制造方法

文档序号:9667432阅读:298来源:国知局
一种基于分布式系统的文件读取方法及装置的制造方法
【技术领域】
[0001] 本发明涉及通信技术领域,尤其涉及一种基于分布式系统的文件读取方法及装 置。
【背景技术】
[0002] 分布式系统可以包括文件接口服务器、存储服务器以及锁服务器,用于实现文件 接口服务、存储服务以及锁服务,其中文件接口服务器用于处理网络文件协议,完成元数 据处理及文件读写操作;存储服务器用于完成文件和元数据的存储;锁服务器用于完成 分布式锁的管理。在分布式系统中,为了提升文件数据的可靠性,同时提高存储空间的利 用率,文件数据的存储采用N+M保护方式,其中文件数据切分为至少N个数据块,并通过 EC(ErasureCode,数据校验擦除码)算法得到Μ个校验数据块,已知N+M个存储服务器通 过网络组成一个Ν+Μ的数据保护组,进而将Ν个数据块和Μ个校验数据块存储到该数据保 护组中。一个文件可以包括至少一个数据分条,一个数据分条可以包括至少一个数据块和 至少一个校验数据块,数据分条写入时通过Quorum事务机制保证一致性,并且在存储服务 器中每个数据块都有一个版本号,正常情况下,一个数据分条中的N+M个数据块的版本号 都是相同的。
[0003] 传统的,文件接口服务器接收到客户端发送的文件读取请求之后,从至少N个存 储服务器中读取数据块,存储服务器向文件接口服务器返回数据块和版本号,文件接口服 务器会根据Quorum事务机制,判断至少N个数据块的版本号是否相同,当至少N个数据块 的版本号相同时,确定该数据分条有效,进而缓存读取到的N个数据块,并在缓存的N个数 据块中将客户端需要的数据块发送给客户端。缓存容量有限导致文件接口服务器缓存的数 据块很快被删除,客户端每发送一个文件读取请求,存储服务器就需要通过存储服务器读 取至少N个数据块及其版本号,存储服务器读数据压力增加,导致客户端响应延时,系统性 能较低。

【发明内容】

[0004] 本申请提供一种基于分布式系统的文件读取方法及装置,当客户端需要读取的数 据块是数据分条中的部分数据时,可避免文件系统内部读取整个数据分条,有效提升系统 性能。
[0005] 第一方面提供了一种基于分布式系统的文件读取方法,所述方法应用于文件接口 服务器,文件接口服务器和客户端、锁服务器以及存储服务器通信,所述方法包括:
[0006] 接收客户端发送的文件读请求,文件读请求携带偏移地址以及读取数据量;
[0007] 根据偏移地址以及读取数据量,确定客户端需要读取的至少一个目标数据块以及 至少一个目标数据块所属的目标数据分条,文件句柄对应的文件包括至少一个数据分条, 各个数据分条包括至少一个数据块;
[0008] 当至少一个目标数据块为目标数据分条中的部分数据时,向锁服务器发送针对目 标数据分条的数据分条版本号获取请求,并接收锁服务器响应数据分条版本号获取请求所 反馈的数据分条版本号;
[0009] 向各个存储目标数据块的存储服务器发送数据块获取请求,并接收各个存储服务 器响应数据块获取请求所反馈的目标数据块及其对应的数据块版本号;
[0010] 当数据分条版本号和各个目标数据块对应的数据块版本号相同时,将各个目标数 据块发送给客户端。
[0011] 在该技术方案中,锁服务器可以缓存各个数据分条的数据分条版本号,如果客户 端需要读取目标数据分条中的部分数据,则文件接口服务器可以通过锁服务器获取该目标 数据分条的数据分条版本号,文件接口服务器还可以确定客户端所需的目标数据块,通过 存储目标数据块的存储服务器获取目标数据块以及目标数据块对应的数据块版本号,当目 标数据块对应的数据块版本号和数据分条版本号相同时,文件接口服务器可以确定目标数 据块有效,并将目标数据块发送给客户端。传统的文件读取方法中,无论客户端请求的是目 标数据分条的部分数据或者所有数据,文件接口服务器需要通过存储目标数据分条中数据 块的存储服务器获取目标数据分条中所有数据块以及各个数据块对应的数据块版本号,当 各个数据块版本号相同时,文件接口服务器可以确定各个数据块有效,并将上述数据块中 客户端所需数据块发送给客户端。本申请中客户端所需数据块为目标数据分条中的部分数 据时,文件接口服务器通过存储服务器获取目标数据块以及目标数据块对应的数据块版本 号,当目标数据块对应的数据块版本号和数据分条版本号相同时,文件接口服务器可以确 定目标数据块有效,无需读取目标数据分条中的所有数据块,可有效提升系统性能。
[0012] 以图2所示的文件存储的保护示意图为例,传统的文件读取方法中,当客户端需 要读取的数据为数据块1-1时,文件接口服务器确定数据块1-1所属的数据分条为数据分 条1,数据分条1包括数据块1-1、数据块1-2以及数据块1-3,文件接口服务器向存储数据 块1-1的存储服务器1发送数据块获取请求,并接收存储服务器1反馈的数据块1-1以及 数据块1-1对应的数据块版本号,同理,文件接口服务器向存储数据块1-2的存储服务器2 发送数据块获取请求,并接收存储服务器2反馈的数据块1-2以及数据块1-2对应的数据 块版本号,文件接口服务器向存储数据块1-3的存储服务器3发送数据块获取请求,并接收 存储服务器3反馈的数据块1-3以及数据块1-3对应的数据块版本号,当数据块1-1对应 的数据块版本号、数据块1-2对应的数据块版本号以及数据块1-3对应的数据块版本号都 相同时,将数据块1 -1发送给客户端。
[0013] 而本申请中,当客户端需要读取的数据为1-1时,文件接口服务器可以向锁服务 器发送针对数据分条1的数据分条版本号获取请求,并接收锁服务器反馈的数据分条1的 数据分条版本号,文件接口服务器还可以向存储数据块1-1的存储服务器1发送数据块获 取请求,并接收存储服务器1反馈的数据块1-1以及数据块1-1对应的数据块版本号,当数 据分条1的数据分条版本号和数据块1-1对应的数据块版本号相同时,将数据块1-1发送 给客户端。相对传统的文件读取方法,当客户端需要读取的数据块是数据分条中的部分数 据时,文件接口服务器无需读取数据分条中的所有数据块,可有效提升系统性能。
[0014] 其中,偏移地址为在文件中相对于首地址(即文件的起始地址)的偏移量。
[0015] 其中,至少一个目标数据块为目标数据分条中的部分数据,即至少一个目标数据 块的数据量小于目标数据分条的数据量,以图2所示的文件存储的保护示意图为例,至少 一个目标数据块为数据块1-1时,数据块1-1为数据分条1中的部分数据;至少一个目标数 据块为数据块1-1和数据块1-2时,数据块1-1和数据块1-2为数据分条1中的部分数据; 至少一个目标数据块为数据块1-1、数据块1-2以及数据块1-3时,数据块1-1、数据块1-2 以及数据块1-3为数据分条1中的所有数据。
[0016] 在上述技术方案中,可选的,如果客户端需要读取目标数据分条中的所有数据,则 可以通过传统的文件读取方法读取目标数据分条中的所有数据块。
[0017] 在上述技术方案中,可选的,文件接口服务器接收各个存储服务器响应数据块获 取请求所反馈的目标数据块及其对应的数据块版本号之后,如果数据分条版本号和各个目 标数据块对应的数据块版本号不完全相同,则可以通过传统的文件读取方法读取文件中的 所有数据块。
[0018] 在上述技术方案中,可选的,文件接口服务器可以接收客户端发送的文件写请求, 文件写请求携带文件句柄、偏移地址、写数据以及写数据量;通过版本号分配器获取文件句 柄对应的文件的数据分条版本号;根据偏移地址以及写数据量,确定写数据所属的数据块 以及数据块所属的数据分条;将写数据发送给存储写数据所属数据块的存储服务器;当写 数据成功发送时,将数据分条版本号发送给锁服务器,以通知锁服务器更新数据分条的数 据分条版本号。
[0019] 具体实现中,版本号分配器可以维护文件接口服务器中各个数据分条的数据分条 版本号。用户可以通过客户端向文件接口服务器发起文件写请求,文件写请求可以携带文 件句柄、偏移地址、写数据以及写数据量,文件接口服务器通过文件句柄在本地缓存中得到 文件句柄对应的文件的文件属性,其中文件属性可以包括:文件的文件总数据量、数据EC 保护级别以及各个数据块的存储路径。文件接口服务器可以通过文件总数据量、偏移地址 以及写数据量,得到写数据所属的数据块,并根据写数据所属数据块的存储路径,向存储该 数据块的存储服务器发送写数据。存储服务器接收到该写数据之后对数据块进行更新,文 件接口服务器确定该写数据成功发送之后,可以将通过版本号分配器得到的该数据分条的 数据分条版本号发送给锁服务器。锁服务器可以对该数据分条的数据分条版本号进行更 新,确保锁服务器缓存的数据分条版本号为最新的数据分条版本号,以便文件接口服务器 接收到客户端发送的文件读请求时,通过比较锁服务器缓存的数据分条版本号和目标数据 块对应的数据块版本号是否相同的方式确定目标数据块是否有效,数据分条版本号为最新 的数据分条版本号,可提升文件接口服务器判断目标数据块是否有效的精确度。
[0020] 在上述技术方案中,可选的,文件接口服务器通过传统的文件读取方法读取文件 中的所有数据块之后,当通过存储服务器获取到的各个数据块对应的数据块版本号相同 时,文件接口服务器可以确定各个数据块有效,进而将数据块对应的数据块版本号作为各 个数据块所属数据分条的数据分条版本号,文件接口服务器可以将数据分条版本号发送给 锁服务器,锁服务器可以对该数据分条的数据分条版本号进行更新,确保锁服务器缓存的 数据分条版本号为最新的数据分条版本号,可提升文件接口服务器判断数据块是否有效的 精确度。
[0021] 在上述技术方案中,可选的,文件接口服务器向锁服务器发送读锁获取请求,读锁 获取请求携带目标数据分条的数据分条标识,文件接口服务器可以接收锁服务器响应读锁 获取请求所反馈的对数据分条标识对应的目标数据分条的读授权响应消息,其中读授权响 应消息可以携带目标数据分条的数据分条版本号。
[0022] 具体实现中,文件接口服务器通过存储服务器读取文件之前,需要向锁服务器发 送读锁获取请求,如果锁服务器确定数据分条标识对应的数据分条的读锁或者写锁未被其 他文件接口服务器所持有,则反馈该数据分条的读授权响应消息,进而该文件接口服务器 可以向存储服务器发送数据块获取请求。另外,当客户端所需数据为数据分条中的部分数 据时,文件接口服务器需要通过锁服务器获取该数据分条的数据分条版本号,将数据分条 版本号与目标数据块的数据块版本号进行比较,以确定目标数据块是否有效。为了提升文 件接口服务器与锁服务器之间的数据传输效率,文件接口服务器向锁服务器发送读锁获取 请求时,锁服务器可以在响应读锁获取请求所反馈的读授权响应消息中携带该数据分条的 数据分条版本号。
[0023] 在上述技术方案中,可选的,文件接口服务器向锁服务器发送锁释放请求,锁释放 请求可以携带数据分条标识以及数据分条版本号,以通知锁服务器更新数据分条标识对应 的数据分条的数据分条版本号,并接收锁服务器响应锁释放请求所反馈的锁释放响应消 息。
[0024] 具体实现中,文件接口服务器通过存储服务器读取文件或者写入文件之后,可以 主动释放读锁或者写锁,即文件接口服务器可以向锁服务器发送锁释放请求,锁服务器响 应该锁释放请求,可以向文件接口服务器发送锁释放响应消息。另外,文件接口服务器通 过存储服务器写入文件或者读取数据分条中的所有数据块之后,可以向锁服务器发送该数 据分条的数据分条版本号,以确保锁服务器缓存的数据分条版本号为最新的数据分条版本 号。为了提升文件接口服务器与锁服务器之间的数据传输效率,文件接口服务器向锁服务 器发送锁释放请求时,可以通过锁释放请求携带数据分条版本号的方式将最新的数据分条 版本号发送给锁服务器。
[0025] 在上述技术方案中,可选的,文件接口服务器可以接收
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1