用于分布式文件系统的数据处理方法及装置与流程

文档序号:16324656发布日期:2018-12-19 05:51阅读:169来源:国知局
用于分布式文件系统的数据处理方法及装置与流程

本申请涉及分布式存储技术领域,尤其涉及一种用于分布式文件系统的数据处理方法及装置。

背景技术

对象存储,也称为基于对象的存储(object-basedstorage,obs)是一种综合了网络附属存储(networkattachedstorage,nas)和存储区域网络(storageareanetwork,san)的优点、同时具有san的高速直接访问和nas的数据共享等优势、提供高可靠性、跨平台性以及安全的数据共享的存储体系结构。

其中,对象(object)是对象存储的基本单元。每个object是数据和数据属性集的综合体,包含了文件数据以及相关的属性信息,可以进行自我管理。对象存储设备(object-basedstoragedevice,osd)是对象的集合,每个osd都是一个智能设备,具有自己的存储介质、处理器、内存以及网络系统等,负责管理本地的object,是对象存储系统的核心。一般对象存储系统中每个存储主机(也称为节点)配置有多个osd,存储主机上运行有多个对象存储设备管理模块(以下称为osd管理模块),负责每个osd的数据处理。在应用中,会建立对应的网络链接,以实现每个节点上的多个osd管理模块之间的网络通信。这些网络链接在软件系统中会被抽象成一个个数据结构或者称之为变量。为了实现对这些网络链接对应的数据结构的管理,通常会在软件系统中建立一个表(map),多个osd管理模块之间的网络通信利用map实现。

由于对象存储系统中,分布式文件系统中主进程(osd单进程方案)会启动多个osd管理模块多个线程并行运行,这些osd管理模块都有自己独立的线程,若不进行读写保护则会出现同时对多个线程map进行处理的情况,导致map中数据损坏。所以需要对map执行的插入、删除、查找等数据处理操作进行保护。常用的保护方法为对map进行加锁,比如互斥锁、读写锁、自旋锁等。

在采用读写锁对map保护进行时,当主进程中启用的osd管理模块线程数量越多时,对map的查询、插入、删除等数据处理操作也会越加频发,对map的读写锁进行加锁、解锁也会比较频繁。当一个线程对map加了写锁时,其他线程再对map加读锁或者写锁时,必须等到加写锁的线程释放锁为止,影响对象存储系统的性能。



技术实现要素:

有鉴于此,本申请实施例提供了一种用于分布式存储系统的数据处理方法及装置,能够解决现有技术中因频繁的加锁、解锁所导致的等待时间过长、存储系统性能不高的问题。

本申请实施例提供的一种用于分布式文件系统的数据处理方法,所述分布式文件系统包括至少一个目标节点,所述目标节点包括多个osd管理模块,所述目标节点还包括网络链接表,所述网络链接表包括多个网络链接子表,每个所述网络链接子表与所述目标节点中的osd管理模块一一对应,所述网络链接子表还包括一个写锁和至少一个读锁;所述方法应用于目标osd管理模块,所述目标osd管理模块为所述多个osd管理模块中的任意一个;所述方法包括:

响应于对所述目标osd管理模块对应网络链接的处理请求,申请与所述目标osd管理模块对应的目标网络链接子表的目标锁;

当获得所述目标锁时,对所述目标网络链接子表执行所述处理请求对应的处理操作;

其中,所述目标锁为读锁或写锁,所述目标锁与所述处理请求对应;所述目标网络链接子表中的源地址为所述目标osd管理模块,所述目标网络链接表中的目的地址包括所述目标节点中除所述目标osd管理模块之外每个与所述目标osd管理模块通信的osd管理模块所对应的网络链接。

可选的,以数组的形式存储所述网络链接表中各个网络链接子表包括的一个写锁和至少一个读锁,所述数组的索引值为每个网络链接子表源地址对应osd管理模块的编号。

可选的,所述申请与所述目标osd管理模块对应的目标网络链接子表的目标锁,具体包括:

根据所述目标osd管理模块的编号,从所述数组中获得所述目标网络链接子表对应的所述目标锁。

可选的,所述申请与所述目标osd管理模块对应的目标网络链接子表的目标锁,之后还包括:

当未申请到所述目标锁时,以预设时间间隔轮询与所述目标osd管理模块对应的目标网络链接子表的目标锁,直到获得所述目标锁。

可选的,

所述处理请求为查询、修改、插入和删除中的任意一个;

当所述处理请求为查询时,所述目标锁为读锁;

当所述处理请求为修改、插入和删除中的任意一个时,所述目标锁为写锁。

本申请实施例提供的一种用于分布式文件系统的数据处理装置,所述分布式文件系统包括至少一个目标节点,所述目标节点包括多个osd管理模块,所述目标节点还包括网络链接表,所述网络链接表包括多个网络链接子表,每个所述网络链接子表与所述目标节点中的osd管理模块一一对应,所述网络链接子表还包括一个写锁和至少一个读锁;所述装置配置于目标osd管理模块,所述目标osd管理模块为所述多个osd管理模块中的任意一个;所述装置包括:申请单元和处理单元;

所述申请单元,用于响应于对所述目标osd管理模块对应网络链接的处理请求,申请与所述目标osd管理模块对应的目标网络链接子表的目标锁;

所述处理单元,用于当所述申请单元获得所述目标锁时,对所述目标网络链接子表执行所述处理请求对应的处理操作;

其中,所述目标锁为读锁或写锁,所述目标锁与所述处理请求对应;所述目标网络链接子表中的源地址为所述目标osd管理模块,所述目标网络链接表中的目的地址包括所述目标节点中除所述目标osd管理模块之外每个与所述目标osd管理模块通信的osd管理模块所对应的网络链接。

可选的,以数组的形式存储所述网络链接表中各个网络链接子表包括的一个写锁和至少一个读锁,所述数组的索引值为每个网络链接子表源地址对应osd管理模块的编号。

可选的,所述申请单元,具体用于:

根据所述目标osd管理模块的编号,从所述数组中获得所述目标网络链接子表对应的所述目标锁。

可选的,所述装置还包括:轮询单元;

所述轮询单元,用于当所述申请单元未申请到所述目标锁时,以预设时间间隔触发所述申请单元轮询与所述目标osd管理模块对应的目标网络链接子表的目标锁,直到所述申请单元获得所述目标锁。

可选的,

所述处理请求为查询、修改、插入和删除中的任意一个;

当所述处理请求为查询时,所述目标锁为读锁;

当所述处理请求为修改、插入和删除中的任意一个时,所述目标锁为写锁。

与现有技术相比,本申请至少具有以下优点:

在本申请实施例中,根据网络链接表中多个网络链接子表的源地址,为每个网络链接子表单独设置一个写锁和至少一个读锁,这样,当触发对节点中任意一个osd管理模块即目标osd管理模块对应的网络链接的处理请求时,可以通过申请获得与目标osd管理模块对应的目标网络链接子表的读锁或写锁,实现对目标网络链接子表执行处理请求对应的处理操作。由于网络链接表中每个网络链接子表的锁相互独立、互不影响,当目标网络链接子表被操作、目标网络链接子表对应的锁被获得时,不会影响对其他网络链接子表的锁的获得和操作。对各个网络链接子表的操作不会相互影响,减少了操作的等待时间,能够大幅度减少读写锁对性能的影响,提高系统性能。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为对象存储系统中一个存储节点上多个osd管理模块的示意图;

图2为图1所示osd管理模块结构所对应的表;

图3为本申请实施例提供的一种用于分布式存储系统的数据处理方法的流程示意图;

图4为本申请具体实施例提供的数组结构示意图;

图5为本申请实施例提供的一种用于分布式存储系统的数据处理装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为了便于理解,下面首先介绍本申请的具体应用场景。

在对象存储(obs)中,包括至少一个个存储节点,每个存储节点(或存储主机)上运行有多个osd管理模块以实现对该存储节点上osd的管理,并会建立对应的网络链接,以实现每个节点上的多个osd管理模块之间的网络通信。图1举例示出了一种存储节点上多个osd管理模块结构。

这些网络链接在软件系统中会被抽象成一个个数据结构或者称之为变量。为了实现对这些网络链接对应的数据结构的管理,通常会在软件系统中建立一个表(map,以下称为网络链接表),多个osd管理模块之间的网络通信利用map实现。图2举例示出了图1的osd管理模块结构对应的一种网络链接表。其中,表a即为存储节点上osd主进程中存储全部链接数据结构的表(即网络链接表)。表0和表1为网络链接表中的网络链接子表,表0包括osd管理模块osd.0与节点中其他osd管理模块(osd.2和osd.3)之间链接,表1包括osd管理模块osd.1与节点中其他osd管理模块(osd.3和osd.4)之间链接。

以图2为例,当线程1和线程2同时对表a进行操作时,线程1先获得表a的锁,则线程2必须等待线程1释放表a的锁后获得该锁后才能对表a进行操作,即如果有一个线程对表a进行操作,其他线程只能等待,影响对象存储系统的性能。

为此,本申请实施例提供了一种用于分布式存储系统的数据处理方法及装置,根据不同的源地址的网络链接子表,将网络链接表的读写锁进行拆分,相当于每一个网络链接子表对应一个读写锁,各个网络链接子表的读写锁互不影响,这样能够大幅度减少读写锁对性能的影响,减少等待时间,提高系统性能。

基于上述思想,为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请的具体实施方式做详细的说明。

参见图3,该图为本申请实施例提供的一种用于分布式文件系统的数据处理方法的流程示意图。

需要说明的是,本申请实施例所应用的分布式文件系统包括至少一个目标节点(即上文所介绍的存储节点),目标节点包括多个osd管理模块,目标节点还包括网络链接表(如上文所介绍的表a),网络链接表包括多个网络链接子表(如上文所介绍的表0和表1),每个网络链接子表与目标节点中的osd管理模块一一对应,网络链接子表还包括一个写锁和至少一个读锁。可以理解的是,为了在数据正确的基础上保证性能,一般可以对同一网络链接子表并行读出,但同一时刻只能有一个线程对子表执行写操作,因此,一般对同一网络链接子表设置多个读锁但只设置一个写锁。

下面以图1和图2所示的具体场景为例进行说明,其他osd管理模块结构的实现方式与此类似,这里不再一一赘述。

本申请实施例提供的用于分布式文件系统的数据处理方法,应用于目标osd管理模块,目标osd管理模块为多个osd管理模块中的任意一个;该方法具体包括如下步骤s301-s302。

s301:响应于对目标osd管理模块对应网络链接的处理请求,申请与目标osd管理模块对应的目标网络链接子表的目标锁。

s302:当获得目标锁时,对目标网络链接子表执行处理请求对应的处理操作。

其中,目标锁为读锁或写锁,目标锁与处理请求对应;目标网络链接子表中的源地址为目标osd管理模块,目标网络链接表中的目的地址包括目标节点中除目标osd管理模块之外每个与目标osd管理模块通信的osd管理模块所对应的网络链接。

作为一个示例,该处理请求可以为查询、修改、插入和删除中的任意一个。当处理请求为查询时,目标锁为读锁;当处理请求为修改、插入和删除中的任意一个时,目标锁为写锁。

在本申请实施例一些可能的实现方式中,该方法还可以包括:

当未申请到目标锁时,以预设时间间隔轮询与目标osd管理模块对应的目标网络链接子表的目标锁,直到获得目标锁,以完成处理请求对应的操作。在一些可能的设计中,还可以通过设置轮询的次数或时间,避免无限轮询。

从图2中可以看出,表a中,表0和表1相互独立,修改表0并不会影响对表1的处理。因此,在本申请实施例中,为每个网络链接子表分别设置独立的读写锁,当需要对其中一个网络连接子表进行操作时,单独申请与该子表对应的读写锁即可,不会对其他子表的读写操作产生影响,减少了操作的等待时间,提高了系统性能。

举例而言,假设三个线程:线程0、线程1和线程2都要对表a进行操作,其中线程0和线程2都需要对表0执行写操作,线程1需要对表1执行写操作。由于线程0首先获得了表0的写锁,那么线程x只能等待,等线程0修改完成后释放写锁以后才能对表0进行修改。于此同时线程1需要对表1进行修改,由于表1的写锁没有被其他线程锁定,所以线程1可以直接获得表1的写锁,然后对表1进行写入,无需等待,因此,可以大幅度减少等待锁的时间,提高系统性能。

下面将详细说明具体如何为每个网络链接子表设置独立的读写锁。

在本申请一些可能的实现方式中,可以以数组的形式存储网络链接表中各个网络链接子表包括的一个写锁和至少一个读锁,数组的索引值为每个网络链接子表源地址对应osd管理模块的编号(或osd管理模块的标识)。

以图1和图2所示的具体场景为例,数组的0位存储osd.0对应的读写锁,数组的1位存储osd.1对应的读写锁,数组的2位存储osd.2对应的读写锁,以此类推,具体如图4所示。

在对网络链接表中不同网络链接子表进行操作时,会提供源地址,包含osd管理模块的标识(如编号)和ip信息等,根据osd管理模块的标识从数组中取出对应位存储的读写锁即可。

则,步骤s301具体可以包括:

根据目标osd管理模块的编号,从数组中获得目标网络链接子表对应的目标锁。

在本申请实施例中,根据网络链接表中多个网络链接子表的源地址,为每个网络链接子表单独设置一个写锁和至少一个读锁,这样,当触发对节点中任意一个osd管理模块即目标osd管理模块对应的网络链接的处理请求时,可以通过申请获得与目标osd管理模块对应的目标网络链接子表的读锁或写锁,实现对目标网络链接子表执行处理请求对应的处理操作。由于网络链接表中每个网络链接子表的锁相互独立、互不影响,当目标网络链接子表被操作、目标网络链接子表对应的锁被获得时,不会影响对其他网络链接子表的锁的获得和操作。对各个网络链接子表的操作不会相互影响,减少了操作的等待时间,能够大幅度减少读写锁对性能的影响,提高系统性能。

基于上述实施例提供的一种用于分布式文件系统的数据处理方法,本申请实施例还提供了一种用于分布式文件系统的数据处理装置。

本申请实施例所应用的布式文件系统包括至少一个目标节点,目标节点包括多个osd管理模块,目标节点还包括网络链接表,网络链接表包括多个网络链接子表,每个网络链接子表与目标节点中的osd管理模块一一对应,网络链接子表还包括一个写锁和至少一个读锁。本申请实施例所提供的用于分布式文件系统的数据处理装置配置于目标osd管理模块,目标osd管理模块为多个osd管理模块中的任意一个。

参见图5,该图为本申请实施例提供的一种用于分布式文件系统的数据处理装置的结构示意图。

本申请实施例所提供的用于分布式文件系统的数据处理装置,包括:申请单元100和处理单元200;

申请单元100,用于响应于对目标osd管理模块对应网络链接的处理请求,申请与目标osd管理模块对应的目标网络链接子表的目标锁;

处理单元200,用于当申请单元100获得目标锁时,对目标网络链接子表执行处理请求对应的处理操作;

其中,目标锁为读锁或写锁,目标锁与处理请求对应;目标网络链接子表中的源地址为目标osd管理模块,目标网络链接表中的目的地址包括目标节点中除目标osd管理模块之外每个与目标osd管理模块通信的osd管理模块所对应的网络链接。

作为一个示例,处理请求为查询、修改、插入和删除中的任意一个。当处理请求为查询时,目标锁为读锁;当处理请求为修改、插入和删除中的任意一个时,目标锁为写锁。

在本申请一些可能的实现方式中,可以以数组的形式存储网络链接表中各个网络链接子表包括的一个写锁和至少一个读锁,数组的索引值为每个网络链接子表源地址对应osd管理模块的编号。

可选的,申请单元100,具体用于:

根据目标osd管理模块的编号,从数组中获得目标网络链接子表对应的目标锁。

在本申请一些可能的实现方式中,该装置还可以包括:轮询单元(未在图中示出);

轮询单元,用于当申请单元100未申请到目标锁时,以预设时间间隔触发申请单元100轮询与目标osd管理模块对应的目标网络链接子表的目标锁,直到申请单元100获得目标锁。

在本申请实施例中,根据网络链接表中多个网络链接子表的源地址,为每个网络链接子表单独设置一个写锁和至少一个读锁,这样,当触发对节点中任意一个osd管理模块即目标osd管理模块对应的网络链接的处理请求时,可以通过申请获得与目标osd管理模块对应的目标网络链接子表的读锁或写锁,实现对目标网络链接子表执行处理请求对应的处理操作。由于网络链接表中每个网络链接子表的锁相互独立、互不影响,当目标网络链接子表被操作、目标网络链接子表对应的锁被获得时,不会影响对其他网络链接子表的锁的获得和操作。对各个网络链接子表的操作不会相互影响,减少了操作的等待时间,能够大幅度减少读写锁对性能的影响,提高系统性能。

需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述比较简单,相关之处参见方法部分说明即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上所述,仅是本申请的较佳实施例而已,并非对本申请作任何形式上的限制。虽然本申请已以较佳实施例揭露如上,然而并非用以限定本申请。任何熟悉本领域的技术人员,在不脱离本申请技术方案范围情况下,都可利用上述揭示的方法和技术内容对本申请技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本申请技术方案的内容,依据本申请的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本申请技术方案保护的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1