本发明实施例涉及数据存储技术领域,尤其涉及一种数据修改写方法及装置。
背景技术:
为了提升硬盘利用率,目前的数据存储方法通常为分布式存储,即客户端将文件数据分散的写入不同的存储区域(例如磁盘)中。客户端写入文件数据之后,可以对文件数据进行修改,目前的文件分布式系统的数据修改写过程主要依据两阶段提交机制。图1示出了目前的文件分布式系统(distributedfilesystem,dfs)中数据修改写过程的示意图,如图1所示,第一阶段为,元数据服务器(metadataserver,mds)向磁盘的对象存储进行osd发送prepare请求,然后接收osd返回的prepare响应。该第一阶段的目的为确定磁盘做好准备工作,即通知osd中止在磁盘进行读写操作的业务,例如若其它客户端需要读取该磁盘上的文件数据时,不响应其它客户端,以做好对磁盘上的文件数据进行修改的准备。第二阶段为,当磁盘做好准备工作后,元数据服务器向osd发送commit请求,然后接收osd返回的commit响应。该第二阶段的作用是正式提交修改数据。具体过程为,osd将磁盘上的文件数据(以下将称为原始数据)释放,元数据服务器将修改数据存放在缓存上,并告知osd缓存的存储位置,osd将缓存上的修改数据写入磁盘上。在修改数据写入成功后,元数据服务器可以响应其它客户端读取修改数据的请求,以维持其它客户端业务的正常运行。
通过以上描述可知,目前的数据修改过程较为复杂,而且容易出现业务中断,进而导致业务处理效率较低的问题。
技术实现要素:
本发明实施例提供一种数据修改写方法及装置,用以解决目前的分布式文件系统中数据修改过程较为复杂,而且容易出现业务中断,进而导致业务处理效率较低的问题。
第一方面,本发明实施例提供一种数据修改写方法,该方法包括:元数据服务器接收客户端发送的修改写请求,所述修改写请求中携带有修改数据,所述修改数据用于替换存储在第一磁盘中的第一位置处的原始数据;所述元数据服务器确定能够存储所述修改数据的第二位置,所述第二位置位于所述第一磁盘或第二磁盘上;所述元数据服务器将所述修改写请求以及所述第二位置的第二标识信息发送给对象存储设备osd,所述osd为用于将所述修改数据写入所述第二位置的控制设备;所述元数据服务器接收所述osd反馈的响应信息,所述响应信息用于指示所述osd将所述修改数据成功写入所述第二位置;所述元数据服务器将文件元数据中存储的所述第一位置的第一标识信息修改为所述第二标识信息,以使所述客户端能够根据所述第二标识信息读取所述修改数据。
在本发明实施例中,修改数据和原始数据存放在不同的位置,例如修改数据和原始数据可以存储在同一磁盘中的不同位置或者可以存储在不同磁盘中。当原始数据存储在第一位置时,文件元数据中存储的是第一位置的第一标识信息,客户端可以通过该第一标识信息读取原始数据,当修改数据成功的存放在第二位置后,文件元数据中的第一标识信息修改为第二标识信息后,客户端可以继续根据第二标识信息读取修改数据。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
在一个可能的设计中,所述第一磁盘中包含多个分片,所述第二位置和所述第一位置分别位于所述第一磁盘上的同一分片中或不同分片中;若所述第二位置和所述第一位置分别位于所述第一磁盘上的同一分片中,所述第一标识信息包括所述第一磁盘的磁盘标识、所述同一分片的分片标识和第一位置在所述同一分片中的第一存储地址;所述第二标识信息包括所述第一磁盘的磁盘标识、所述同一分片的分片标识和第二位置在所述同一分片中的第二存储地址;或者若所述第一位置位于所述第一磁盘上的第一分片中,所述第二位置位于所述第一磁盘上的第二分片中,所述第一标识信息包括所述第一磁盘的磁盘标识、所述第一分片的分片标识和第一位置在所述第一分片中的第一存储地址;所述第二标识信息包括所述第一磁盘的磁盘标识、所述第二分片的分片标识和第二位置在所述第二分片中的第二存储地址。
在本发明实施例中,一个磁盘中包含多个分片,修改数据和原始数据可以分别存放在第一磁盘中的不同分片中,也可以分别位于第一磁盘中的同一分片中。修改数据(或原始数据)的存储位置的标识信息可以是磁盘标识、分片标识以及修改数据(或原始数据)在分片中的存储地址等。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
一个可能的设计中,所述第二存储地址为相对于所述第一存储地址的地址偏移量。
在本发明实施例中,地址偏移量可以较为准确的确定修改数据的具体存储位置,方便读取,当然第二存储地址还可能包括其它参数,以上只是举例,本发明实施例对此不作具体的限定。
在一个可能的设计中,所述第一位置位于所述第一磁盘上的第一分片中,所述第二位置位于所述第二磁盘上的第二分片中;所述第一标识信息包括所述第一磁盘的磁盘标识、第一分片的分片标识和第一位置在所述第一分片中的第一存储地址;所述第二标识信息包括所述第二磁盘的磁盘标识、所述第二分片的分片标识和第二位置在所述第二分片中的第二存储地址。
在本发明实施例中,一个磁盘中包含多个分片,修改数据和原始数据可以分别存放在不同磁盘的不同分片中。修改数据(或原始数据)的存储位置的标识信息可以是磁盘标识、分片标识以及修改数据(或原始数据)在分片中的存储地址等。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
在一个可能的设计中,所述元数据服务器向所述osd发送释放请求,所述释放请求用于释放存储在所述第一位置处的原始数据;所述元数据服务器接收所述osd反馈的用于指示释放成功的响应信息。
在本发明实施例中,文件元数据被修改之后,元数据服务器可以向osd发送释放请求,以使osd删除第一位置处存储的原始数据,以便存储其它数据。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
在一个可能的设计中,所述元数据服务器将所述修改请求以及所述第二位置的第二标识信息发送给所述osd时,具体可以通过对所述修改数据进行处理得到n个子修改数据;所述元数据服务器将n个子修改数据以及所述第二标识信息分别发送给磁盘阵列中的n个磁盘分别对应的osd,以使每个osd分别将接收到的子修改数据写入对应磁盘中第二标识信息对应的存储位置处;其中,所述磁盘阵列包括n个层叠的磁盘,每个磁盘中的所述第二标识信息对应的存储位置是相同的;n为大于等于2的整数;所述元数据服务器接收所述osd反馈的响应信息时具体为:收齐每个osd反馈的所述响应信息。
在本发明实施例中,磁盘阵列包括n个层叠的磁盘,每个磁盘对应一个osd,元数据服务器可以将修改数据进行处理得当n个子修改数据,并分别将n个子修改数据和第二标识信息发送给磁盘阵列中每个磁盘对应的osd,每个osd分别将接收到的子修改数据写入对应磁盘中的第二标识信息对应的存储位置处后,元数据服务器可以收齐每个osd反馈的响应信息。在这种方式中,在向磁盘阵列中每个磁盘中写入子修改数据后,元数据服务器可以确定每个磁盘中的子修改数据写入成功,有助于提高数据修改写过程的准确性。
第二方面,本发明实施例还提供一种数据修改写装置。该数据修改写装置具有实现上述方法设计中元数据服务器的功能。这些功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元。
在一个可能的设计中,数据修改写装置的具体结构可包括接收单元、处理单元和发送单元。这些单元可执行上述第一方面或第一方面的任意一种可能的设计所提供的方法中的相应功能。
第三方面,本发明实施例还提供一种数据修改写装置。该数据修改写装置具有实现上述方法设计中元数据服务器的功能。这些功能可以通过硬件实现。该数据修改写装置包括:存储器,用于存储计算机可执行程序代码;处理器,处理器与存储器耦合。其中存储器所存储的程序代码包括指令,当处理器调用所述指令并执行时,使所述数据修改写装置执行上述第一方面或第一方面的任意一种可能的设计中元数据服务器所执行的方法。
第四方面,本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的数据修改写方法。
第五方面,本发明实施例还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的数据修改写方法。
在本发明实施例中,修改数据和原始数据存放在不同的位置,例如修改数据和原始数据可以存储在同一磁盘中的不同位置或者可以存储在不同磁盘中。当原始数据存储在第一位置时,文件元数据中存储的是第一位置的第一标识信息,客户端可以通过该第一标识信息读取原始数据,当修改数据成功的存放在第二位置后,文件元数据中的第一标识信息修改为第二标识信息后,客户端可以继续根据第二标识信息读取修改数据。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
附图说明
图1为现有技术中的一种分布式文件系统的数据修改写过程的示意图;
图2为本发明实施例提供的一种磁盘阵列的结构示意图;
图3为本发明实施例提供的ec冗余模式的示意图;
图4为本发明实施例提供的一种分布式文件系统的系统架构;
图5为本发明实施例提供的一种数据修改写方法的流程图;
图6为本发明实施例提供的一种数据修改写过程的示意图;
图7为本发明实施例提供的另一种数据修改写过程的示意图;
图8为本发明实施例提供的一种数据修改写装置的结构示意图;
图9为本发明实施例提供的另一种数据修改写装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,本发明实施例中的技术方案进行描述。
以下,对本发明中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)磁盘阵列,分布式文件系统dfs常用的技术为磁盘阵列(redundantaccessindependentdisk,raid)技术,图2示出了一种磁盘阵列的结构图,如图2所示,3个磁盘在逻辑上被看作是一个磁盘,该磁盘可以进行划分得到不同的分条,即每个分条落在单个硬盘上的部分,被称为对象或者分片(shard),图2中分条包含3个分片即分片1-3,不同的分片位于不同的磁盘上,即分片1位于磁盘1上,分片2位于磁盘2上,分片3位于磁盘3上。当客户端在该磁盘阵列上写入文件数据时,可以将文件数据分散的存储在磁盘阵列的3个分片中。具体过程为,元数据服务器接收到客户端发送的写请求,将该写请求分三个子写请求,然后将三个子写请求分别发送给磁盘阵列中每个磁盘对应的osd,即分别发生给osd1-3,每个osd将接收的子写请求对应的文件数据写入与该每个osd对应的磁盘上的分片中。
(2)分条,请继续参见图2所示,分片1-3构成一个分条,在实际操作过程中,元数据服务器接收到客户端发送的写清求之后,可以将文件数据分割成不同的数据块,例如被划分为数据块1-3,元数据服务器可以将数据块1存储在磁盘阵列中的分片1-3中,将数据块2、3存储在磁盘阵列中的其他分片中,即文件数据中数据块1存储在分条1中,数据块2、3存储在其它分条中。
通常,在文件元数据进行修改时,例如对数据块1进行修改,则可以对分条1中的分片1-3中的数据均进行修改,当读取数据块1时,对分条1中的分片1-3中的数据并行读取得到数据块1。
(3)分片,磁盘上的存储单元,通常一个磁盘可以被划分为多个分片,每个分片的存储空间的大小可以自定义,例如1g、2g等。
分片是基于物理磁盘来定义的,而分条是基于逻辑磁盘来定义的,即多个物理磁盘在逻辑上被看作一个逻辑磁盘时,该逻辑磁盘被划分多个分条,一个分条中落在每个物理磁盘上的部分是一个分片。
(4)纠删码(erasurecoding,ec)冗余模式,分布式文件系统的一种数据存储方式,可以用于数据恢复。在ec冗余模式下,磁盘阵列中一个分条上的不同分片中可以有部分分片用于存储文件数据,而其它分片用来存储校验数据。举例来说,图3示出了4+2冗余模式下数据修改写的示意图,如图3,有4个分片用来存储文件数据,有2个分片用来存储校验数据,其中分片1-4用于存储文件数据,分片5-6用来存储校验数据。当分片1中的文件数据丢失时,可以通过分片5-6中的校验数据恢复分片1中的文件数据。在通过校验数据进行数据恢复的过程中,一个前提条件是需要做数据恢复的分片数量不得超过冗余数量(即校验数据的分片数量)。举例来说,请继续参见图3所示,在数据修改前,原始数据存储在分片1-6中,在对原始数据进行修改时,若分片1-3的修改数据未成功写入磁盘1-3中例如磁盘1-3所在的服务器复位,而分片4-6被修改成功。此时由于未被修改的分片数量(3份)超过冗余份数(2份),所以分片1-3上的修改数据是无法恢复的。当客户端读取修改数据时,确定出修改数据的存储位置即分片1-6,但由于分片1-3上的修改数据无法恢复,所以客户端读取的修改数据是不符合需求的,即在数据的修改写过程中容易造成数据丢失。
(5)元数据服务器,分布式文件系统中重要的设备,负责管理文件例如文件元数据,可以起到协调客户端和磁盘阵列的作用。分布式文件系统中可以只有一个元数据服务器,也可以有多个,每个元数据服务器可以负责不同的磁盘阵列和客户端。多个元数据服务器构成业务层,业务层负责处理客户端发送的业务请求例如读请求、写请求等。
(6)对象存储设备,用于处理读、写请求的控制设备,即将数据写入磁盘或者从磁盘中读取数据。每个对象存储设备与一个磁盘连接,负责该磁盘的数据写入、读取等。
(7)文件元数据,分布式文件系统会将每次存储的文件数据的基本属性信息例如文件名、存储位置信息等存储在文件元数据中,所以文件元数据可以理解为数据存储的目录,存储于元数据服务器中,通过该文件元数据可以清楚知道文件数据的存储位置,方便客户端读取。
(8)本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。且在本发明的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
为更好地介绍本发明实施例中的数据修改写方法,先介绍本发明实施例的一种应用场景,即分布式文件系统的架构图,图4示出了本发明实施例提供的一种分布式文件系统的架构图,如图4所示,分布式文件系统中包括:客户端(client)、元数据服务器、持久化层(persistencelayer)。客户端可以是台式机、便携式电脑、网络服务器、掌上电脑、移动手机、平板电脑等终端设备。元数据服务器用于协调客户端和持久化层。持久化层中包含多个磁盘(或多个磁盘阵列),用于存储数据。若客户端向元数据服务器发送写请求,元数据服务器将写请求发送给持久化层中每个磁盘对应的osd(图中未示出),以使osd将与写请求对应的文件数据写入对应的磁盘中。若客户端向元数据服务器发送读请求,元数据服务器在文件元数据中确定与读请求对应的文件数据的存储位置,并将该存储位置告知客户端,客户端根据该存储位置从持久化层中读取文件数据。
目前的文件分布式系统的数据修改写过程主要依据两阶段提交机制。第一阶段为,元数据服务器向磁盘的对象存储进行osd发送prepare请求,然后接收osd返回的prepare响应。该第一阶段的目的为确定磁盘做好准备工作,即通知osd中止在磁盘进行读写操作的业务,例如若其它客户端需要读取该磁盘上的文件数据时,不响应其它客户端,以做好对磁盘上的文件数据进行修改的准备。第二阶段为,当磁盘做好准备工作后,元数据服务器向osd发送commit请求,然后接收osd返回的commit响应。该第二阶段的作用是正式提交修改数据。具体过程为,osd将磁盘上的文件数据(以下将称为原始数据)释放,元数据服务器将修改数据存放在缓存上,并告知osd缓存的存储位置,osd将缓存上的修改数据写入磁盘上。在修改数据写入成功后,元数据服务器可以响应其它客户端读取修改数据的请求,以维持其它客户端业务的正常运行。通过以上描述可知,目前的数据修改写过程较为复杂,而且容易出现业务中断,进而导致业务处理效率较低的问题。
为了解决该技术问题,本发明实施例提供一种数据修改写方法。该方法中元数据服务器接收客户端发送的修改写请求,所述修改写请求中携带有修改数据,所述修改数据用于替换存储在第一磁盘中的第一位置处的原始数据;所述元数据服务器确定能够存储所述修改数据的第二位置,所述第二位置位于所述第一磁盘或第二磁盘上;所述元数据服务器将所述修改写请求以及所述第二位置的第二标识信息发送给对象存储设备osd,所述osd为用于将所述修改数据写入所述第二位置的控制设备;所述元数据服务器接收所述osd反馈的响应信息,所述响应信息用于指示所述osd将所述修改数据成功写入所述第二位置;所述元数据服务器将文件元数据中存储的所述第一位置的第一标识信息修改为所述第二标识信息,以使所述客户端能够根据所述第二标识信息读取所述修改数据。在本发明实施例中,修改数据和原始数据存放在不同的位置,例如修改数据和原始数据可以存储在同一磁盘中的不同位置或者可以存储在不同磁盘中。当原始数据存储在第一位置时,文件元数据中存储的是第一位置的第一标识信息,客户端可以通过该第一标识信息读取原始数据,当修改数据成功的存放在第二位置后,文件元数据中的第一标识信息修改为第二标识信息后,客户端可以继续根据第二标识信息读取修改数据。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
图5示出了本发明实施例提供的一种数据修改写的方法的流程图。该方法可适用于图4所示系统架构的元数据服务器中。如图5所示,该方法的流程描述如下:
s501:元数据服务器接收客户端发送的修改写请求,该修改写请求中携带有修改数据,该修改数据用于替换存储在第一磁盘上的第一位置的原始数据。
前面已经提到过,客户端在写入文件数据(后续称为原始数据)的过程中,原始数据被存储在磁盘阵列的各个磁盘的分片中,当原始数据存储在磁盘阵列后,元数据服务器中的文件元数据中记录有文件数据的文件名,以及原始数据的存储位置,例如文件元数据中记录有文件名为文件1的原始数据分别存储在磁盘1上的分片1、磁盘2上的分片2、磁盘3上的分片3中。文件元数据的形式有多种,表1为一种示例。
表1
在本发明实施例中,文件数据(原始数据)可以被划分为不同的数据块例如数据块1-3,每个数据块被分散的存储不同的磁盘阵列中。表2示出了另一种文件元数据,如表2所示,文件元数据中记录有文件a的数据块1-3分别的存储位置。
表2
当元数据服务器接收到客户端发送的修改写请求后,该修改写请求中可以携带有与修改数据对应的原始数据的标识信息,例如修改写请求中携带有文件a,即修改数据用于替换文件名为文件a的原始数据,或者修改写请求中携带有文件a和数据块1的标识信息,即修改数据用于替换文件a中的数据块1。因此,当元数据服务器接收到修改写请求之后,便清楚该修改数据是用来替换哪一个原始数据的。
s502:元数据服务器确定能够存储修改数据的第二位置。
在本发明实施例中,文件元数据中记录有磁盘阵列中每个磁盘中当前的存储状态,例如每个磁盘剩余的存储空间等。元数据服务器接收到客户端发送的修改数据之后,可以在磁盘阵列中确定能够存储修改数据的第二位置,该第二位置可以与原始数据位于同一磁盘,也可以位于不同磁盘,以下将分别介绍。
第一种情况,第二位置和第一位置位于同一磁盘的同一分片上。
继续以表1为例,原始数据的存放位置为:磁盘1-3、分片1-3。若分片1-3的剩余存储空间大于修改数据所需的存储空间,例如分片1为1g,原始数据占用1-100m,则元数据服务器可以确定第二位置位于磁盘1-3上的分片1-3。
第二种情况,第二位置和第一位置位于同一磁盘的不同分片上。
继续以表1为例,原始数据的存放位置为:磁盘1-3、分片1-3。若分片1-3的剩余存储空间小于修改数据所需的存储空间,则元数据服务器可以在磁盘1-3中的其它分片中确定能够存储修改数据的第二位置,例如第二位置可以位于磁盘1中的分片4、磁盘2中的分片5、磁盘3中的分片6中。
第三种情况,第二位置和第一位置位于不同磁盘上。
继续以表1为例,原始数据存放位置为:磁盘1-3、分片1-3。若磁盘1-3中的所有分片的剩余存储空间小于修改数据所需的存储空间,则元数据服务器可以在其它磁盘上确定第二位置,例如第二位置位于磁盘4-6中的分片4-6中。
以上的三种情况是以磁盘阵列中每个磁盘以分片为存储单元为例说明的,即每个磁盘上的分片事先被划分好,例如每个磁盘被划分为3个分片。在本发明实施例中,一个磁盘上的存储单元还可以是plog,即每个磁盘中的存储单元无需被事先划分,而是在需要plog的时候建立plog来存储数据即可,例如一个磁盘中当前只有1个plog,当该plog的存储空间被占满,而还需要在该磁盘中存储其它数据时,可以在该磁盘上的剩余存储空间中再次建立一个plog,然后将其它数据写入再次建立的plog中,这里的plog的存储空间的大小可自定义例如1g。s402也可以适用于一个磁盘上的存储单元是plog的情况,以下将分别介绍。
第一种情况,第二位置和第一位置位于同一磁盘的同一plog上。
举例来说,原始数据存储在磁盘1的plog1、磁盘2的plog2、磁盘3的plog3中,若plog1-3中的剩余存储空间足够存储修改数据,则在plog1-3中确定第二位置,即第一位置和第二位置位于相同的plog中。具体的实现方式为,元数据服务器接收到客户端发送的修改写请求之后,将修改写请求处理得到3个追加写(appendplog)请求,每个appendplog中携带有子修改数据,将3个appendplog请求以及plog1-3的标识信息分别发送给osd1-3,osd1-3分别将子修改数据追加写到plog1-3中。
第二种情况,第二位置和第一位置位于同一磁盘的不同plog上。
图6示出了本发明实施例提供的一种数据修改写过程的示意图,图6中磁盘阵列中每个磁盘以plog为存储单位,原始数据存储在磁盘1的plog1、磁盘2的plog2、磁盘3的plog3中,元数据服务器接收到客户端发送的修改写请求后,若plog1-3中没有足够的存储空间来存储修改数据,则元数据服务器分别向osd1-3发送plog创建(createplog)请求,该createplog请求用于新建plog,即在磁盘1上新建plog4,在磁盘2上新建plog5,在磁盘3上新建plog6,即plog4-6用于存储修改数据,即第二位置和第一位置位于相同的磁盘中的不同的plog中。元数据服务器将对修改写请求进行处理得到3个appendplog请求,每个appendplog中携带有子修改数据,并将3个appendplog请求以及plog4-6的标识信息分别发送给osd1-3,osd1-3将接收到的子修改数据分别的存储在plog4-6中。
第三种情况,第二位置和第一位置位于不同磁盘上。
举例来说,原始数据存储在磁盘1中的plog1、磁盘2中的plog2、磁盘3中的plog3中,元数据服务器确定磁盘1-3中没有足够的存储空间来存储修改数据时,可以向osd4-6发送plog创建请求(原始数据存放在osd1-3中),该plog创建请求用于在磁盘4-6中新建plog,osd4-6将修改数据存储在磁盘4-6中新建的plog中。
s503:元数据服务器将修改写请求和第二位置的第二标识信息发送给osd。
在本发明实施例中,元数据服务器确定能够存储修改数据的第二位置之后,可以将修改写请求和第二位置的第二标识信息发送给osd,以便osd将修改数据写入第二位置。
需要说明的是,前面已经提到过,一个osd负责一个磁盘,所以元数据服务器确定第二位置之后,可以向第二位置所位于的磁盘对应的osd发送修改请求,若第二位置位于n个磁盘,则元数据服务器可以对修改数据进行处理得到n个子修改数据;元数据服务器将n个子修改数据以及第二标识信息分别发送给磁盘阵列中的n个磁盘分别对应的osd,以使每个osd分别将接收到的子修改数据写入对应磁盘中第二标识信息对应的存储位置处。
举例来说,原始数据存放位置为:磁盘1-3、分片1-3,元数据服务器确定出的第二位置位于磁盘4-6中的分片4-6中,则元数据服务器可以向磁盘4对应的osd4发送分片4的分片标识信息以及第一个子修改数据,向磁盘5对应的osd5发送分片5的分片标识以及第二个子修改数据,向磁盘6对应的osd6发送分片6的分片标识信息以及第三个子修改数据,osd4-6分别将各自接收到的子修改数据写入对应的分片中。
s504:元数据服务器接收osd反馈的响应信息。
在本发明实施例中,osd将修改数据成功写入第二位置后,可以向元数据服务器反馈表征修改数据写入成功的响应信息。前面已经提到过,修改数据被划分为多个子修改数据分散的存储在不同的磁盘中,而每个磁盘对应一个osd,所以元数据服务器可以接收每个磁盘反馈的响应信息。
在本发明实施例中,元数据服务器在存储修改数据时也可以采用前面所述的ec冗余模式,例如将磁盘1中的分片1、磁盘2中的分片2用来存储修改数据,将磁盘3中的分片3用来存储校验数据。当osd1-3分别将修改数据和校验数据成功写入分片1-3后,osd1-3可以向元数据服务器反馈响应信息,当元数据服务器收齐每个osd反馈的响应信息后,可以修改文件元数据。
继续以前面的例子为例,元数据服务器分别接收osd1-3反馈的响应信息。若元数据服务器在预设时间内未接收到其中某个osd反馈的响应信息,则说明该osd未成功将修改数据写入磁盘中,例如磁盘故障、或者磁盘复位等,这种情况下,元数据服务器可以重新确定能够存储修改数据的其它位置。
图7示出了本发明实施例提供的一种数据修改过程的示意图。如图7所示,元数据服务器接收到客户端发送的修改写请求后,将该修改写请求处理成3个appendplog请求,并将这3个appendplog请求发送给能够存储修改数据的osd1-3,若元数据服务器在预设时间内未接收到osd3反馈的响应信息,可以确定磁盘3故障,所以这种情况下,元数据服务器可以重新确定能够存储修改数据的其它磁盘例如磁盘4-6,然后向osd4-6发送createplog请求,在磁盘4-6中新建plog,然后向osd4-6发送appendplog请求,即将修改数据分散的存储在磁盘4-6新建的plog中。
s505:元数据服务器修改文件元数据。
在本发明实施例中,文件元数据中记录有原始数据的存储位置信息,方便客户端根据该存储位置信息读取原始数据。在修改数据成功写入磁盘中后,若不修改文件元数据,客户端读取的仍然是原始数据,所以元数据服务器需要修改文件元数据,针对前面在s402中提到三种确定第二位置的三种情况,每种情况下,对文件元数据的修改方式是不同的,以下将分别介绍。
对于上述第一种情况,由于原始数据和修改数据存储在同一磁盘的同一分片(或plog)中,所以文件元数据中记录的原始数据的第一位置的第一标识信息为磁盘标识、分片标识、偏移量标识。文件元数据中包含磁盘标识:磁盘1-3、分片标识:分片1-3、偏移量标识:1-10m、1-10m、1-10m。当修改数据写入成功后,将文件元数据中的第一标识信息修改为第二标识信息,即文件元数据中包含磁盘标识:磁盘1-3、分片标识:分片1-3、偏移量标识:11-20m、11-20m、11-20m。再例如,原始数据的存储位置为磁盘1-3、plog1-3、偏移量1-10m、1-10m、1-10m,修改数据的存储位置为磁盘1-3、plog1-3、偏移量11-20m、11-20m、11-20m。
在这种情况下,元数据服务器在修改文件元数据时,无需修改磁盘标识、分片标识,只需修改偏移量标识即可。
对于上述第二种情况,原始数据和修改数据存储在同一磁盘的不同分片(或plog)中。例如修改之前,文件元数据中包含磁盘标识:磁盘1-3、分片标识:分片1-3、偏移量标识:1-10m、1-10m、1-10m。当修改数据写入成功后,将文件元数据中的第一标识信息修改为第二标识信息,即文件元数据中包含磁盘标识:磁盘1-3、分片标识:分片4-6、偏移量标识:1-10m、1-10m、1-10m。再例如,原始数据的存储位置为磁盘1-3、plog1-3、偏移量1-10m、1-10m、1-10m。修改数据的存储位置为磁盘1-3、plog1-3、偏移量11-20m、11-20m、11-20m。表3列举出修改后的文件元数据,表3以文件a的文件数据未被划分为不同的数据块为例。
表3
在这种情况下,元数据服务器在修改文件元数据时,只需修改分片标识(plog标识)和偏移量标识即可。
对于上述的第三种情况,原始数据和修改数据存储在不同磁盘上的不同分片(或plog)中。例如修改之前,文件元数据中包含磁盘标识:磁盘1-3、分片标识:分片1-3、偏移量标识:1-10m、1-10m、1-10m。当修改数据写入成功后,将文件元数据中的第一标识信息修改为第二标识信息,即文件元数据中包含磁盘标识:磁盘4-6、分片标识:分片4-6、偏移量标识:1-10m、1-10m、1-10m。再例如,原始数据的存储位置为磁盘1-3、plog1-3、偏移量1-10m、1-10m、1-10m。修改数据的存储位置为磁盘4-6、plog4-6、偏移量11-20m、11-20m、11-20m。
在这种情况下,元数据服务器在修改文件元数据时,可以修改磁盘标识、分片标识(或plog标识)、偏移量标识。
需要说明的是,请继续参见图3所示,现有技术中,由于修改数据和原始数据存放在相同的位置,所以对分片1-6中的原始数据修改时,需要用修改数据替换存储在分片1-6中的原始数据,若分片4-6的数据被修改成功,而分片1-3的数据未必修改成功的情况下,不仅原始数据被破坏、而且修改数据也无法恢复。但在本申请实施例提供的方法中,由于原始数据和修改数据分别存储在不同的位置处,若修改数据未成功的写入磁盘中,元数据服务器不会修改文件元数据,客户端还可以继续根据文件元数据读取原始数据,即原始数据并未被破坏,若修改数据成功写入磁盘中,元数据服务器可以修改文件元数据后,客户端可以根据修改后的文件元数据读取修改数据,避免了原始数据被丢失,造成客户端无法正常维持业务的情况。
在本发明实施例中,元数据服务器修改文件元数据之后,客户端可以根据修改后的文件元数据读取修改数据,即根据第二位置的第二标识信息读取修改数据。这里读取修改数据的客户端可以是对文件数据进行修改的客户端,也可以是其它客户端,例如客户端1对文件修改之后,客户端2可以读取修改数据,执行业务。
在本发明实施例中,文件元数据被修改之后,元数据服务器可以向osd发送释放请求,该释放请求用于是否存储在第一位置处的原始数据,由于文件元数据中记录的第一位置的第一标识信息被修改为第二标识信息,所以存储在第一位置的原始数据不会被客户端读取,所以,osd可以将存储在第一位置的原始数据释放,释放成功之后将表征释放成功的响应信息发送个元数据服务器,第一位置可以用来存储其它数据。
通过以上的描述可知,在本发明实施例中,修改数据和原始数据存放在不同的位置,例如修改数据和原始数据可以存储在同一磁盘中的不同位置或者可以存储在不同磁盘中。当原始数据存储在第一位置时,文件元数据中存储的是第一位置的第一标识信息,客户端可以通过该第一标识信息读取原始数据,当修改数据成功的存放在第二位置后,文件元数据中的第一标识信息修改为第二标识信息后,客户端可以继续根据第二标识信息读取修改数据。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
下面结合附图介绍本发明实施例提供的设备。
图8示出了一种数据修改写装置800的结构示意图。该数据修改写装置800可以实现上文中涉及的元数据服务器的功能。该数据修改写装置800可以包括接收单元801、处理单元802、发送单元803。其中,接收单元801可以用于执行图5所示的实施例中的s501、s504,和/或用于支持本文所描述的技术的其它过程。处理单元802可以用于执行图5所示的实施例中的s502、s505,和/或用于支持本文所描述的技术的其它过程。发送单元803可以用于执行图4所示的实施例中的s503,和/或用于支持本文所描述的技术的其它过程。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
需要说明的是,在本发明实施例中,上述数据修改写装置以功能单元的形式展示。在不受限制的情况下,本文所使用的术语“单元”可指执行一个或多个软件或固件程序的专用集成电路(application-specificintegratedcircuit,asic)、电子电路、(共享、专用或组)处理器以及存储器,组合逻辑电路,和/或提供所述功能的其它合适的部件。
在一个简单的实施例中,本领域的技术人员可以想到,还可以将数据修改写装置800通过如图9所示的结构实现。
如图9所示,数据修改写装置900可以包括:存储器901、处理器902和总线903。处理器901和处理器902可以通过总线903连接。其中,存储器901用于存储计算机执行指令,当数据修改写装置900运行时,处理器902执行存储器901存储的计算机执行指令,以使数据修改写装置900执行图5所示的实施例提供的数据修改写方法。具体的数据修改写方法可参考上文及附图中的相关描述,此处不再赘述。
在本发明实施例中,处理器902可以是现场可编程门阵列(field-programmablegatearray,fpga),专用集成芯片(applicationspecificintegratedcircuit,asic),系统芯片(systemonchip,soc),中央处理器(centralprocessorunit,cpu),网络处理器(networkprocessor,np),数字信号处理电路(digitalsignalprocessor,dsp),微控制器(microcontrollerunit,mcu),还可以采用可编程控制器(programmablelogicdevice,pld)或其他集成芯片。总线803可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。总线903可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
综上所述,本发明实施例提供一种数据修改写方法及装置。该方法中,元数据服务器接收客户端发送的修改写请求,所述修改写请求中携带有修改数据,所述修改数据用于替换存储在第一磁盘中的第一位置处的原始数据;所述元数据服务器确定能够存储所述修改数据的第二位置,所述第二位置位于所述第一磁盘或第二磁盘上;所述元数据服务器将所述修改写请求以及所述第二位置的第二标识信息发送给对象存储设备osd,所述osd为用于将所述修改数据写入所述第二位置的控制设备;所述元数据服务器接收所述osd反馈的响应信息,所述响应信息用于指示所述osd将所述修改数据成功写入所述第二位置;所述元数据服务器将文件元数据中存储的所述第一位置的第一标识信息修改为所述第二标识信息,以使所述客户端能够根据所述第二标识信息读取所述修改数据。在本发明实施例中,修改数据和原始数据存放在不同的位置,例如修改数据和原始数据可以存储在同一磁盘中的不同位置或者可以存储在不同磁盘中。当原始数据存储在第一位置时,文件元数据中存储的是第一位置的第一标识信息,客户端可以通过该第一标识信息读取原始数据,当修改数据成功的存放在第二位置后,文件元数据中的第一标识信息修改为第二标识信息后,客户端可以继续根据第二标识信息读取修改数据。在这种方式中,修改数据和原始数据存放在不同的位置,原始数据被读取的过程中也可以执行数据修改过程,即业务不易中断,有助于提高业务处理效率。
在上述发明实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如,固态硬盘solidstatedisk(ssd))等。
以上实施例仅用以对本发明实施例的技术方案进行详细介绍,但以上实施例的说明只是用于帮助理解本发明实施例的方法及其核心思想,不应该理解为对本申请的限制。本领域技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。