CN117492661A - 数据写入方法、介质、装置和计算设备 - Google Patents
数据写入方法、介质、装置和计算设备 Download PDFInfo
- Publication number
- CN117492661A CN117492661A CN202311640519.1A CN202311640519A CN117492661A CN 117492661 A CN117492661 A CN 117492661A CN 202311640519 A CN202311640519 A CN 202311640519A CN 117492661 A CN117492661 A CN 117492661A
- Authority
- CN
- China
- Prior art keywords
- data
- file
- disk
- size
- leader node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000013507 mapping Methods 0.000 claims abstract description 215
- 230000006870 function Effects 0.000 claims description 19
- 230000002688 persistence Effects 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 7
- 230000008569 process Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 15
- 238000012795 verification Methods 0.000 description 8
- 230000003287 optical effect Effects 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开的实施方式提供了一种数据写入方法、介质、装置和计算设备。包括:响应于领导节点所接收到的数据写入请求,领导节点将数据写入请求写入至领导节点的Raft文件中;响应于领导节点所接收到的多数派回复信息,基于多数派回复信息更新领导节点的状态机中的状态,并确定目标数据在虚拟磁盘文件中目标写入地址的第二起始位置;将第一盘块映射关系与第二盘块映射关系相交换。以上方案,减少了数据写入操作的次数,原本数据由Raft文件在本地磁盘所对应的盘块写入至状态机的虚拟磁盘文件在本地磁盘所对应的盘块中的操作过程,被替代为将第一盘块映射关系与第二盘块映射关系相交换的方式,从而提升了数据写入的效率,并降低了数据写入所需的资源消耗。
Description
技术领域
本公开的实施方式涉及分布式领域,更具体地,本公开的实施方式涉及一种数据写入方法、介质、装置和计算设备。
背景技术
本部分旨在为本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在分布式块存储系统中,使用多节点冗余提高数据写入的可靠性。对于数据写入请求,先将数据写入请求对应的数据写入Raft文件在本地磁盘中对应的位置,通过多节点对Raft文件中的数据进行确认。若确认通过,则将Raft文件中的数据写入状态机在本地磁盘中对应的位置,完成数据写入。
在该种方案中,通过多节点的确认,可以避免无效数据或者多余数据写入本地磁盘而导致占用磁盘空间,从而提高数据写入的可靠性。然而在该种方案中,完整的数据写入中包括数据写入到Raft文件在本地磁盘中对应的位置,以及数据写入到状态机在本地磁盘中对应的位置共两次写入,会导致资源消耗大的问题。
发明内容
本公开提供一种数据写入方法、介质、装置和计算设备,用于降低数据写入带来的资源消耗。
在本公开实施方式的第一方面中,提供了一种数据写入方法,应用于分布式块存储系统,该分布式块存储系统遵守Raft协议,包括:响应于领导节点所接收到的数据写入请求,所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,并将所述数据写入请求的请求副本发送给相应的多个跟随节点,所述Raft文件与所述领导节点的本地磁盘具有第一盘块映射关系,所述数据写入请求中包括待写入的目标数据、所述目标数据的第一数据大小、以及所述目标数据在所述Raft文件中的持久化地址的第一起始位置;响应于领导节点所接收到的多数派回复信息,基于所述多数派回复信息更新所述领导节点的状态机中的状态,并确定所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述多数派回复信息为占多数的跟随节点所发送给领导节点的多个回复信息,且所述多个回复信息的内容相一致,所述虚拟磁盘文件对应于所述领导节点的状态机,所述虚拟磁盘文件与所述领导节点的本地磁盘具有第二盘块映射关系;将所述第一盘块映射关系与所述第二盘块映射关系相交换,以完成对于所述目标数据的写入。
在本公开的一个实施例中,所述分布式块存储系统还包括用户态文件系统以及盘块映射交换接口;将所述第一盘块映射关系与所述第二盘块映射关系相交换的步骤还包括:通过所述用户态文件系统调用所述盘块映射交换接口,以记录本次盘块映射关系交换所对应的Raft文件的回放位置,所述回放位置包括副本集标识和日志回放索引,其中,所述副本集标识和所述日志回放索引为所述盘块映射交换接口的函数入参。
在本公开的另一个实施例中,所述多个跟随节点的数量为N,所述多数派回复信息是由M个跟随节点所发送的,其中,M大于或等于(N+1)/2+1,所述M和所述N分别为正整数。
在本公开的又一个实施例中,所述Raft文件包括日志文件和辅助文件;所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,包括:若所述第一数据大小大于或等于预设大小,则根据所述第一起始位置、以及预设的盘块大小,在所述目标数据中确定第一数据和第二数据;将所述第一数据写入至所述日志文件对应的第一盘块,以及将所述第二数据写入至所述辅助文件对应的第二盘块,以将所述数据写入请求写入至所述领导节点的Raft文件中。
在本公开的再一个实施例中,所述第一数据包括所述目标数据的头部数据和/或尾部数据,所述头部数据和所述尾部数据的数据大小分别小于所述预设盘块大小,所述头部数据的头部数据大小为所述预设盘块大小与第一偏移量的差值,所述第一偏移量为所述第一起始位置与所述预设盘块大小的余数;所述第二数据包括所述目标数据的中部数据,所述第二数据的数据大小为所述预设盘块大小的正整数倍。
在本公开的再一个实施例中,根据所述第一起始位置、以及预设盘块大小,在所述目标数据中确定第一数据和第二数据,包括:根据所述第一起始位置和所述预设盘块大小,确定头部数据大小;将所述第一数据大小和所述头部数据大小的差值,确定为剩余数据大小;将所述剩余数据大小与所述预设盘块大小的商值的整数位确定为盘块数;将所述盘块数与所述预设盘块大小的乘积,确定为中部数据大小;获取所述第一数据大小与所述剩余数据大小的第一差值,并将所述第一差值与所述中部数据大小的差值,确定为尾部数据大小;根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,在所述目标数据中确定所述第一数据和所述第二数据。
在本公开的再一个实施例中,根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,在所述目标数据中确定所述第一数据和所述第二数据,包括:根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,将所述目标数据划分为头部数据、中部数据和尾部数据;将所述头部数据和/或所述尾部数据,确定为所述第一数据;将所述中部数据,确定为所述第二数据。
在本公开的再一个实施例中,所述第一盘块映射关系为所述辅助文件与所述领导节点的本地磁盘的盘块映射关系;将所述第一盘块映射关系与所述第二盘块映射关系相交换,包括:将所述虚拟磁盘文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第一盘块映射关系;将所述辅助文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第二盘块映射关系;将所述日志文件对应的盘块中的数据,写入至所述虚拟磁盘文件对应的盘块中。
在本公开的再一个实施例中,将所述第一盘块映射关系与所述第二盘块映射关系相交换,包括:获取上一次盘块映射关系交换所对应的目标请求标识;根据所述目标请求标识,若确定下一个待进行盘块映射关系交换的请求为所述数据写入请求,则将所述第一盘块映射关系与所述第二盘块映射关系相交换。
在本公开的再一个实施例中,将所述第一盘块映射关系与所述第二盘块映射关系相交换,包括:确定所述虚拟磁盘文件的第一文件信息、所述Raft文件的第二文件信息和所述第一数据大小,所述第一文件信息包括所述虚拟磁盘文件的文件句柄和所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述第二文件信息包括所述Raft文件的文件句柄和所述目标数据在所述Raft文件中的持久化地址的第一起始位置;根据所述第一文件信息、所述第二文件信息和所述第一数据大小,通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系。
在本公开的再一个实施例中,根据所述第一文件信息、所述第二文件信息和所述第一数据大小,通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系,包括:将所述第一文件信息、所述第二文件信息和所述第一数据大小,确定为所述盘块映射交换接口的函数入参,并通过所述用户态文件系统调用所述盘块映射交换接口,以交换所述第一盘块映射关系与所述第二盘块映射关系。
在本公开的再一个实施例中,所述盘块映射交换接口的函数入参还包括所述数据写入请求的标识;通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系之后,还包括:将所述目标请求标识更新为所述数据写入请求的标识。
在本公开的再一个实施例中,所述第一数据大小小于所述预设大小,所述Raft文件包括日志文件;所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,包括:根据所述第一数据大小和所述第一起始位置,将所述目标数据写入至所述日志文件;所述方法还包括:确定所述虚拟磁盘文件对应的盘块,并将所述目标数据写入至所述虚拟磁盘文件对应的盘块。
在本公开实施方式的第二方面中,提供了一种计算机可读存储介质,包括:所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面中任一项所述的数据写入方法。
在本公开实施方式的第三方面中,提供了一种数据写入装置,应用于分布式块存储系统,该分布式块存储系统遵守Raft协议,包括:处理模块,用于响应于领导节点所接收到的数据写入请求,所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,并将所述数据写入请求的请求副本发送给相应的多个跟随节点,所述Raft文件与所述领导节点的本地磁盘具有第一盘块映射关系,所述数据写入请求中包括待写入的目标数据、所述目标数据的第一数据大小、以及所述目标数据在所述Raft文件中的持久化地址的第一起始位置;确定模块,用于响应于领导节点所接收到的多数派回复信息,基于所述多数派回复信息更新所述领导节点的状态机中的状态,并确定所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述多数派回复信息为占多数的跟随节点所发送给领导节点的多个回复信息,且所述多个回复信息的内容相一致,所述虚拟磁盘文件对应于所述领导节点的状态机,所述虚拟磁盘文件与所述领导节点的本地磁盘具有第二盘块映射关系;写入模块,用于将所述第一盘块映射关系与所述第二盘块映射关系相交换,以完成对于所述目标数据的写入。
在本公开的一个实施例中,所述分布式块存储系统还包括用户态文件系统以及盘块映射交换接口;所述装置还包括:交换模块,用于通过所述用户态文件系统调用所述盘块映射交换接口,以记录本次盘块映射关系交换所对应的Raft文件的回放位置,所述回放位置包括副本集标识和日志回放索引,其中,所述副本集标识和所述日志回放索引为所述盘块映射交换接口的函数入参。
在本公开的另一个实施例中,所述多个跟随节点的数量为N,所述多数派回复信息是由M个跟随节点所发送的,其中,M大于或等于(N+1)/2+1,所述M和所述N分别为正整数。
在本公开的又一个实施例中,所述Raft文件包括日志文件和辅助文件;所述装置还包括:执行模块,用于若所述第一数据大小大于或等于预设大小,则根据所述第一起始位置、以及预设的盘块大小,在所述目标数据中确定第一数据和第二数据;所述执行模块,还用于将所述第一数据写入至所述日志文件对应的第一盘块,以及将所述第二数据写入至所述辅助文件对应的第二盘块,以将所述数据写入请求写入至所述领导节点的Raft文件中。
在本公开的再一个实施例中,所述第一数据包括所述目标数据的头部数据和/或尾部数据,所述头部数据和所述尾部数据的数据大小分别小于所述预设盘块大小,所述头部数据的头部数据大小为所述预设盘块大小与第一偏移量的差值,所述第一偏移量为所述第一起始位置与所述预设盘块大小的余数;所述第二数据包括所述目标数据的中部数据,所述第二数据的数据大小为所述预设盘块大小的正整数倍。
在本公开的再一个实施例中,所述执行模块,具体用于根据所述第一起始位置和所述预设盘块大小,确定头部数据大小;所述执行模块,具体还用于将所述第一数据大小和所述头部数据大小的差值,确定为剩余数据大小;所述执行模块,具体还用于将所述剩余数据大小与所述预设盘块大小的商值的整数位确定为盘块数;所述执行模块,具体还用于将所述盘块数与所述预设盘块大小的乘积,确定为中部数据大小;所述执行模块,具体还用于获取所述第一数据大小与所述剩余数据大小的第一差值,并将所述第一差值与所述中部数据大小的差值,确定为尾部数据大小;所述执行模块,具体还用于根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,在所述目标数据中确定所述第一数据和所述第二数据。
在本公开的再一个实施例中,所述执行模块,具体用于根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,将所述目标数据划分为头部数据、中部数据和尾部数据;所述执行模块,具体还用于将所述头部数据和/或所述尾部数据,确定为所述第一数据;所述执行模块,具体还用于将所述中部数据,确定为所述第二数据。
在本公开的再一个实施例中,所述第一盘块映射关系为所述辅助文件与所述领导节点的本地磁盘的盘块映射关系;所述执行模块,具体用于将所述虚拟磁盘文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第一盘块映射关系;所述执行模块,具体还用于将所述辅助文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第二盘块映射关系;所述执行模块,具体还用于将所述日志文件对应的盘块中的数据,写入至所述虚拟磁盘文件对应的盘块中。
在本公开的再一个实施例中,所述装置包括:验证模块,用于获取上一次盘块映射关系交换所对应的目标请求标识;所述验证模块,还用于根据所述目标请求标识,若确定下一个待进行盘块映射关系交换的请求为所述数据写入请求,则将所述第一盘块映射关系与所述第二盘块映射关系相交换。
在本公开的再一个实施例中,所述装置还包括:参数模块,用于确定所述虚拟磁盘文件的第一文件信息、所述Raft文件的第二文件信息和所述第一数据大小,所述第一文件信息包括所述虚拟磁盘文件的文件句柄和所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述第二文件信息包括所述Raft文件的文件句柄和所述目标数据在所述Raft文件中的持久化地址的第一起始位置;所述参数模块,还用于根据所述第一文件信息、所述第二文件信息和所述第一数据大小,通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系。
在本公开的再一个实施例中,所述参数模块,具体用于将所述第一文件信息、所述第二文件信息和所述第一数据大小,确定为所述盘块映射交换接口的函数入参,并通过所述用户态文件系统调用所述盘块映射交换接口,以交换所述第一盘块映射关系与所述第二盘块映射关系。
在本公开的再一个实施例中,所述盘块映射交换接口的函数入参还包括所述数据写入请求的标识;所述装置还包括:更新模块,用于将所述目标请求标识更新为所述数据写入请求的标识。
在本公开的再一个实施例中,所述第一数据大小小于所述预设大小,所述Raft文件包括日志文件;所述装置还包括:判断模块,用于根据所述第一数据大小和所述第一起始位置,将所述目标数据写入至所述日志文件;所述判断模块,还用于确定所述虚拟磁盘文件对应的盘块,并将所述目标数据写入至所述虚拟磁盘文件对应的盘块。
在本公开实施方式的第四方面中,提供了一种计算设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述计算设备执行如本公开实施方式的第一方面中任一项所述的数据写入方法。
根据本公开的实施方式,通过盘块映射交换的方式,减少了数据写入操作的次数,原本数据由Raft文件在本地磁盘所对应的盘块写入至状态机的虚拟磁盘文件在本地磁盘所对应的盘块中的操作过程,被替代为将第一盘块映射关系与第二盘块映射关系相交换的方式,从而提升了数据写入的效率,并降低了数据写入所需的资源消耗。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1示意性地示出了根据本公开实施方式的应用场景的示意图;
图2示意性地示出了根据本公开一实施例的提供的数据写入方法的流程示意图;
图3示意性地示出了根据本公开一实施例的提供的数据写入方法的流程示意图;
图4示意性地示出了根据本公开一实施例提供的确定数据大小的示例图;
图5示意性地示出了根据本公开一实施例提供的数据写入Raft文件的示例图;
图6示意性地示出了根据本公开一实施例提供的交换盘块映射的示例图;
图7示意性地示出了根据本公开一实施例提供的验证数据写入请求的示例图;
图8示意性地示出了根据本公开一实施例提供的存储介质的结构示意图;
图9示意性地示出了根据本公开一实施例提供的数据写入装置的结构示意图;
图10示意性地示出了根据本公开一实施例提供的数据写入装置的结构示意图;
图11示意性地示出了根据本公开一实施例提供的计算设备的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。本公开所涉及的数据可以为经用户授权或者经过各方充分授权的数据,对数据的采集、传播、使用等,均符合国家相关法律法规要求,本公开实施方式/实施例可以互相组合。
根据本公开的实施方式,提出了一种数据写入的方法、介质、装置和计算设备。
此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
发明概述
本发明人发现,在相关技术中,对于数据写入请求的执行,存在双写问题,即将数据写入请求对应的数据先写入到领导节点的Raft文件在本地磁盘对应的盘块中,并将数据写入请求的副本发送给多个跟随节点。领导节点在接收到跟随节点发送的多数派回复信息后,再以数据复制的方式将数据从Raft文件在本地磁盘所对应的盘块中,写入到状态机的虚拟磁盘文件在本地磁盘所对应的盘块中。双写问题一方面导致占用本地磁盘的存储空间增加,进而导致资源消耗的增加。另一方面导致数据写入的整体耗时增加,降低数据写入的效率。
为了解决以上问题。本发明人设计通过盘块映射交换的方式,减少了数据写入操作的次数,原本数据由Raft文件在本地磁盘所对应的盘块写入至状态机的虚拟磁盘文件在本地磁盘所对应的盘块中的操作过程,被替代为将第一盘块映射关系与第二盘块映射关系相交换的方式,从而提升了数据写入的效率,并降低了数据写入所需的资源消耗。
在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。
应用场景总览
首先参考图1,图1为本公开实施方式提供的应用场景示意图。
如图1所示,分布式块存储系统使用了Raft一致性协议来保证多节点数据的一致性,分布式块存储系统包括领导节点以及跟随节点,领导节点接收到数据写入请求,将数据写入请求对应的数据写入Raft文件。领导节点将数据发送到领导节点对应的多个跟随节点。当领导节点接收到多数派回复信息后,则将数据从Raft文件写入到状态机,从而保证数据在多节点中的一致性。
示例性方法
下面结合图1的应用场景,参考图2-7来描述根据本公开示例性实施方式提供的数据写入方法。需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
本公开的实施方式的执行主体可以为数据写入装置,该数据写入装置用于执行数据写入请求,该数据写入装置的实现有多种。例如,数据写入装置可以为程序软件;或者,该装置还可以为实体设备,例如,芯片、智能终端、电脑、服务器以及U盘等。
参考图2,图2为本公开一实施例提供的数据写入方法的流程示意图。如图2所示,包括:
S201、响应于领导节点所接收到的数据写入请求,所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,并将所述数据写入请求的请求副本发送给相应的多个跟随节点,所述Raft文件与所述领导节点的本地磁盘具有第一盘块映射关系,所述数据写入请求中包括待写入的目标数据、所述目标数据的第一数据大小、以及所述目标数据在所述Raft文件中的持久化地址的第一起始位置。
其中,请求副本为数据写入请求的副本文件。
对第一盘块映射关系示例,第一盘块映射关系用于从Raft文件访问本地磁盘中的数据,第一盘块映射关系对应本地磁盘中的第一位置,通过第一盘块映射关系仅能访问本地磁盘中第一位置的数据。
S202、响应于领导节点所接收到的多数派回复信息,基于所述多数派回复信息更新所述领导节点的状态机中的状态,并确定所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述多数派回复信息为占多数的跟随节点所发送给领导节点的多个回复信息,且所述多个回复信息的内容相一致,所述虚拟磁盘文件对应于所述领导节点的状态机,所述虚拟磁盘文件与所述领导节点的本地磁盘具有第二盘块映射关系。
其中,Raft文件用于保证多节点之间数据的一致性,状态机用于持久化存储数据,状态机由多个虚拟磁盘文件组成。
对第二盘块映射关系示例,虚拟磁盘文件对应本地磁盘中的第二位置,虚拟磁盘文件通过第二盘块映射关系可以访问本地磁盘中第二位置的数据。
可选的,若未接收到任一跟随节点的回复信息、或者接收到的回复信息中相一致的回复信息对应的跟随节点数未占多数,则不执行数据写入。
一种可行的实现方式,所述多个跟随节点的数量为N,所述多数派回复信息是由M个跟随节点所发送的,其中,M大于或等于(N+1)/2+1,所述M和所述N分别为正整数。
对判断多数派回复信息示例,若跟随节点数量为9,则当M大于或等于6时,即当领导节点接收到至少6个跟随节点发送的内容一致的回复信息时,此时认定领导节点接收到多数派回复信息。
在该种可行的实现方式中,通过确定多数派回复信息进行数据验证,保证数据写入的准确性。
S203、将所述第一盘块映射关系与所述第二盘块映射关系相交换,以完成对于所述目标数据的写入。
对交换盘块映射关系示例,交换盘块映射关系后,Raft文件访问仅能访问本地磁盘中第二位置的数据,虚拟磁盘文件仅能访问本地磁盘中第一位置的数据。
一种可行的实现方式,所述分布式块存储系统还包括用户态文件系统以及盘块映射交换接口;将所述第一盘块映射关系与所述第二盘块映射关系相交换的步骤还包括:通过所述用户态文件系统调用所述盘块映射交换接口,以记录本次盘块映射关系交换所对应的Raft文件的回放位置,所述回放位置包括副本集标识和日志回放索引,其中,所述副本集标识和所述日志回放索引为所述盘块映射交换接口的函数入参。
对盘块映射交换接口示例,用户态文件系统对应的盘块映射交换接口API可以执行用户自定义的函数入参。操作系统内核会限制自定义的函数入参,通过用户态文件系统可以绕过操作系统内核,直接操作磁盘,从而解除操作系统内核的限制,提升执行函数入参的灵活性。
可选的,API执行函数入参的操作为原子性的操作,没有中间态,通过操作日志文件保证执行函数入参的操作的原子性。
对保证原子性示例,将API执行函数入参的操作的多个步骤以及每个步骤的执行状态写入操作日志文件,执行状态包括正常或者异常。若发生系统宕机等故障导致API执行中断,则通过操作日志文件确定最近一次的正常状态的步骤,API从该步骤继续执行,从而保证API执行的准确性。
其中,一个盘块映射交换的请求仅需执行一次即完成,重复执行请求不会影响执行结果,而会占用额外的资源,导致资源浪费的问题,即幂等问题。针对多个盘块映射关系交换的请求,回放位置用于记录当前已执行完成的盘块映射关系交换的请求,在执行盘块映射交换的请求时跳过已执行完成的请求,避免盘块映射关系交换的请求重复执行,从而节省资源。
具体的,副本集标识为盘块映射交换接口中每个盘块映射关系交换的请求对应的唯一标识,用于区分不同的盘块映射关系交换的请求,副本集标识可以为编号等形式。按照副本集标识的顺序执行盘块映射关系交换的请求。对所有盘块映射关系交换的请求进行排列得到请求队列,请求队列中的请求依次执行,日志回放索引为每个盘块映射关系交换的请求在请求队列中的位置,用于定位最近一个已执行的盘块映射关系交换的请求。
在该种可行的实现方式中,通过回放位置记录最近一个已执行的盘块映射关系交换的请求,可以准确定位接下来需要执行的盘块映射关系交换的请求,避免已经执行过的盘块映射关系交换的请求重复执行,从而避免资源浪费。
在上述任意一个实施例的基础上,下面,结合图3,对数据写入的详细过程进行说明。
图3为本公开实施例提供的一种数据写入方法的流程示意图。如图3所示,该方法包括:
S301、若所述第一数据大小大于或等于预设大小,则根据所述第一起始位置、以及预设的盘块大小,在所述目标数据中确定第一数据和第二数据。
其中,本地磁盘通过逻辑分区得到多个盘块,盘块用于存储数据,多个盘块的大小相同。
一种可行的实现方式,所述第一数据包括所述目标数据的头部数据和/或尾部数据,所述头部数据和所述尾部数据的数据大小分别小于所述预设盘块大小,所述头部数据的头部数据大小为所述预设盘块大小与第一偏移量的差值,所述第一偏移量为所述第一起始位置与所述预设盘块大小的余数;所述第二数据包括所述目标数据的中部数据,所述第二数据的数据大小为所述预设盘块大小的正整数倍。
对盘块示例,本地磁盘包括多个盘块,目标数据存储在本地磁盘会占用盘块的空间。目标数据占用的盘块中包括整个盘块空间都被目标数据占用的盘块以及部分盘块空间被目标数据占用的盘块。头部数据和尾部数据为占用盘块部分空间的数据。中部数据为占用完整盘块空间的数据。
其中,头部数据和尾部数据占用的盘块中的其它空间存储其它数据,因此该盘块的映射关系发生变动会导致其他数据的映射关系变动。
需要说明的是,本公开用于说明头部数据和尾部数据同时存在的场景,实际使用中存在头部数据和尾部数据不存在的场景,也可适用于本公开的方案。
在该种可行的实现方式中,通过区分第一数据和第二数据,可以根据数据存储的盘块确定目标数据中哪些数据的映射关系可以变动,从而在不影响数据的有效性的前提下进行映射关系交换。
一种可行的实现方式,确定第一数据和第二数据,包括:根据所述第一起始位置和所述预设盘块大小,确定头部数据大小;将所述第一数据大小和所述头部数据大小的差值,确定为剩余数据大小;将所述剩余数据大小与所述预设盘块大小的商值的整数位确定为盘块数;将所述盘块数与所述预设盘块大小的乘积,确定为中部数据大小;获取所述第一数据大小与所述剩余数据大小的第一差值,并将所述第一差值与所述中部数据大小的差值,确定为尾部数据大小;根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,在所述目标数据中确定所述第一数据和所述第二数据。
下面,结合图4对确定数据大小进行说明。
图4为本公开实施例提供的数据大小示意图。如图4所示,中部数据为可以完全占用至少一个盘块的空间,第一起始位置为数据的起始数据在本地磁盘中对应的位置,若第一起始位置位于任一盘块的中间位置,则存在头部数据,头部数据只能占用一个盘块的部分空间。第一起始位置为offset,预设盘块大小为block_size,则头部数据大小为head_size,则满足head_size=block_size-(offset%block_size),其中%表示取余。以第一起始位置为1300KB,预设盘块大小为500KB,第一数据大小size为1950KB为例,计算head_size=500-(1300%500)=200KB,说明目标数据的起始数据位于本地磁盘的第3个盘块,并且占用第3个盘块的大小为200KB。剩余数据为1950-200=1750KB,说明中部数据与尾部数据的大小之和为1750KB。中部数据对应的盘块数为block_num=(size-head_size)/block_size,计算block_num=(1950-200)/500保留整数部分的结果为3。中部数据的大小为block_size*block_num=500*3=1500KB。尾部数据的大小为第一数据大小减头部数据大小以及中部数据大小,即1950-200-1500=250KB。
在该种可行的实现方式中,通过第一起始位置、以及预设盘块大小可以准确确定头部数据大小、中部数据大小和尾部数据大小。
进一步的,一种可行的实现方式,在所述目标数据中确定所述第一数据和所述第二数据,包括:根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,将所述目标数据划分为头部数据、中部数据和尾部数据;将所述头部数据和/或所述尾部数据,确定为所述第一数据;将所述中部数据,确定为所述第二数据。
对数据分类示例,头部数据和/或尾部数据对应的盘块中除了存储目标数据外,也可用于存储其他数据,将头部数据和/或尾部数据确定为第一数据。中部数据对应的盘块中仅存储目标数据,将中部数据确定第二数据。
在该种可行的实现方式中,通过头部数据大小、中部数据大小和尾部数据大小,可以准确确定目标数据的划分位置,从而准确划分得到头部数据、中部数据和尾部数据。
S302、将所述第一数据写入至所述日志文件对应的第一盘块,以及将所述第二数据写入至所述辅助文件对应的第二盘块,以将所述数据写入请求写入至所述领导节点的Raft文件中。
下面,结合图5对数据写入Raft文件进行说明。
图5为本公开实施例提供的数据写入Raft文件示意图。如图5所示,将目标数据划分为第一数据和第二数据,将第一数据写入第一盘块,将第二数据写入第二盘块,Raft文件包括日志文件以及辅助文件,日志文件与第一盘块对应,辅助文件与第二盘块对应。
可选的,将数据写入请求的命令写入日志文件对应的第一盘块。
S303、所述第一盘块映射关系为所述辅助文件与所述领导节点的本地磁盘的盘块映射关系;将所述虚拟磁盘文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第一盘块映射关系。
对更新第一盘块映射关系示例,初始的第一盘块映射关系中,辅助文件与本地磁盘的区块1存在映射关系,即辅助文件可以访问区块1的数据。更新后的第一盘块映射关系中,虚拟磁盘文件与本地磁盘的区块1存在映射关系,即虚拟磁盘文件可以访问区块1的数据。
在相关技术中,数据写入包括将数据写入Raft文件对应的本地磁盘的区块,以及将数据以复制的方式写入虚拟磁盘文件对应的本地磁盘的区块,包含2次数据写入操作。本公开中,通过盘块映射交换的方式代替将数据写入虚拟磁盘文件对应的本地磁盘的区块。
可以理解,交换盘块映射关系相比于将数据写入虚拟磁盘文件对应的本地磁盘的区块,可以降低资源消耗。
S304、将所述辅助文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第二盘块映射关系。
下面,结合图6对交换盘块映射进行说明。
图6为本公开实施例提供的交换盘块映射示意图。如图6所示,初始的第二盘块映射关系中,虚拟磁盘文件与本地磁盘的区块2存在映射关系,即虚拟磁盘文件可以访问区块2的数据。更新后的第二盘块映射关系中,辅助文件与本地磁盘的区块2存在映射关系,即辅助文件可以访问区块2的数据。
一种可行的实现方式,将所述第一盘块映射关系与所述第二盘块映射关系相交换,包括:获取上一次盘块映射关系交换所对应的目标请求标识;根据所述目标请求标识,若确定下一个待进行盘块映射关系交换的请求为所述数据写入请求,则将所述第一盘块映射关系与所述第二盘块映射关系相交换。
对目标请求标识示例,对多个盘块映射关系交换的请求对应的请求标识进行排序,根据排序依次执行盘块映射关系交换的请求。对比上次一次的目标请求标识以及排序,确定下一个请求标识,通过下一个请求标识验证是否轮到所述数据写入请求,若下一个请求标识为所述数据写入请求的标识,则执行数据写入请求的盘块映射关系交换。
下面,结合图7对验证数据写入请求进行说明。
图7为本公开实施例提供的验证数据写入请求示意图。如图7所示,将多个请求标识排序,按照排序执行盘块映射关系交换,对已执行的请求标识进行标注,从已执行的请求标识中确定最后一个请求标识,将其确定为目标请求标识。判断目标请求标识的下一个请求标识是否为所述数据写入请求对应的请求标识,若是,则执行所述数据写入请求对应的盘块映射交换。
在该种可行的实现方式中,通过排序验证,避免盘块映射交换漏执行或者重复执行,从而提升盘块映射交换的准确性。
一种可行的实现方式,所述盘块映射交换接口的函数入参还包括所述数据写入请求的标识;通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系之后,还包括:将所述目标请求标识更新为所述数据写入请求的标识。
对目标请求标识示例,在执行所述数据写入请求对应的盘块映射交换之前,目标请求标识为上一次盘块映射关系交换所对应的请求标识,在执行所述数据写入请求对应的盘块映射交换之后,数据写入请求已完成,不需要再次执行,将目标请求标识更新为所述数据写入请求的标识,避免数据写入请求重复执行。
在该种可行的实现方式中,通过更新目标请求标识,可以准确确定盘块映射关系交换请求的执行状态,将执行状态区分为已执行或者未执行,来避免对执行状态为已执行的盘块映射关系交换请求重复执行,从而避免幂等问题导致的资源浪费。
一种可行的实现方式,根据所述第一文件信息、所述第二文件信息和所述第一数据大小,通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系,包括:将所述第一文件信息、所述第二文件信息和所述第一数据大小,确定为所述盘块映射交换接口的函数入参,并通过所述用户态文件系统调用所述盘块映射交换接口,以交换所述第一盘块映射关系与所述第二盘块映射关系。
对函数入参示例,通过将所述第一文件信息、所述第二文件信息和所述第一数据大小,确定为函数入参,使盘块映射交换接口可以准确识别执行盘块映射交换的文件和盘块。
具体的,一种可行的实现方式,将所述第一盘块映射关系与所述第二盘块映射关系相交换,包括:确定所述虚拟磁盘文件的第一文件信息、所述Raft文件的第二文件信息和所述第一数据大小,所述第一文件信息包括所述虚拟磁盘文件的文件句柄和所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述第二文件信息包括所述Raft文件的文件句柄和所述目标数据在所述Raft文件中的持久化地址的第一起始位置;根据所述第一文件信息、所述第二文件信息和所述第一数据大小,通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系。
其中,虚拟磁盘文件的文件句柄作为虚拟磁盘文件的唯一标识,Raft文件的文件句柄作为Raft文件的唯一标识。
对句柄示例,通过文件句柄准确确定执行盘块映射交换的虚拟磁盘文件以及Raft文件,通过第一起始位置和第二起始位置准确确定执行盘块映射交换的区块,根据起始位置确定起始区块,根据数据大小确定区块的数量,根据起始区块以及区块的数量确定执行盘块映射交换的区块。
在该种可行的实现方式中,通过文件句柄确定虚拟磁盘文件以及Raft文件,通过起始位置确定区块,可以提升执行盘块映射交换的准确性。
S305、将所述日志文件对应的盘块中的数据,写入至所述虚拟磁盘文件对应的盘块中。
对日志文件示例,日志文件对应的盘块中的数据为零散数据,即该数据未占用完整盘块,该零散数据存储的盘块中用于存储其他数据,而盘块映射交换是以盘块为单位,若对日志文件执行盘块映射交换会导致其他数据的映射关系错乱。因此对日志文件对应的盘块中的数据,直接写入虚拟磁盘文件对应的盘块中。日志文件中的数据以复制的方式写入虚拟磁盘文件对应的盘块,复制的方式可以重复操作,因此日志文件中的数据可以重复回放。而盘块映射交换方式不能重复执行,会导致辅助文件中的数据不能重复回放的问题。基于此,在执行盘块映射交换时记录回放位置,将回放位置存储在日志文件中,通过在日志文件中查询回放位置,可以对辅助文件中的数据进行回放,从而避免辅助文件中的数据不能重复回放的问题。
一种可行的实现方式,所述第一数据大小小于所述预设大小,所述Raft文件包括日志文件;所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,包括:根据所述第一数据大小和所述第一起始位置,将所述目标数据写入至所述日志文件;所述方法还包括:确定所述虚拟磁盘文件对应的盘块,并将所述目标数据写入至所述虚拟磁盘文件对应的盘块。
对日志文件示例,若第一数据大小小于所述预设大小,例如预设大小可以为128KB,说明目标数据不能占用完整的盘块,则将目标数据写入日志文件,并在接收到的多数派回复信息后将目标数据写入虚拟磁盘文件对应的盘块。而不需要从目标数据中确定第一数据和第二数据。
在该种可行的实现方式中,针对第一数据大小小于所述预设大小的场景,不执行确定第一数据和第二数据的操作,可以减少多余的操作。
本实施例提供的数据写入方法,通过盘块映射交换的方式,减少了数据写入操作的次数,原本数据由Raft文件在本地磁盘所对应的盘块写入至状态机的虚拟磁盘文件在本地磁盘所对应的盘块中的操作过程,被替代为将第一盘块映射关系与第二盘块映射关系相交换的方式,从而提升了数据写入的效率,并降低了数据写入所需的资源消耗。
示例性介质
在介绍了本公开示例性实施方式的方法之后,接下来,参考图8对本公开示例性实施方式的存储介质进行说明。
参考图8所示,存储介质80中存储着根据本公开的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在装置,例如个人电脑上运行。然而,本公开的程序产品不限于此。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备。
示例性装置
在介绍了本公开示例性实施方式的介质之后,接下来,参考图9对本公开示例性实施方式的数据写入装置进行说明,用于实现上述任一方法实施例中的方法,其实现原理和技术效果类似,在此不再赘述。
参考图9,图9为本公开一实施例提供的数据写入装置的结构示意图。如图9所示,包括:
处理模块91,用于响应于领导节点所接收到的数据写入请求,所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,并将所述数据写入请求的请求副本发送给相应的多个跟随节点,所述Raft文件与所述领导节点的本地磁盘具有第一盘块映射关系,所述数据写入请求中包括待写入的目标数据、所述目标数据的第一数据大小、以及所述目标数据在所述Raft文件中的持久化地址的第一起始位置。
确定模块92,用于响应于领导节点所接收到的多数派回复信息,基于所述多数派回复信息更新所述领导节点的状态机中的状态,并确定所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述多数派回复信息为占多数的跟随节点所发送给领导节点的多个回复信息,且所述多个回复信息的内容相一致,所述虚拟磁盘文件对应于所述领导节点的状态机,所述虚拟磁盘文件与所述领导节点的本地磁盘具有第二盘块映射关系。
写入模块93,用于将所述第一盘块映射关系与所述第二盘块映射关系相交换,以完成对于所述目标数据的写入。
可选的,处理模块91可以执行图2实施例中的S201。
可选的,确定模块92可以执行图2实施例中的S202。
可选的,写入模块93可以执行图2实施例中的S203。
图10为本公开实施例提供的一种数据写入装置的结构示意图。在图9所示实施例的基础上,如图10所示,数据写入装置100还包括:交换模块104、执行模块105、验证模块106、参数模块107、更新模块108以及判断模块109,其中:
所述分布式块存储系统还包括用户态文件系统以及盘块映射交换接口;所述交换模块104,用于:通过所述用户态文件系统调用所述盘块映射交换接口,以记录本次盘块映射关系交换所对应的Raft文件的回放位置,所述回放位置包括副本集标识和日志回放索引,其中,所述副本集标识和所述日志回放索引为所述盘块映射交换接口的函数入参。
在一种可能的实施方式中,所述多个跟随节点的数量为N,所述多数派回复信息是由M个跟随节点所发送的,其中,M大于或等于(N+1)/2+1,所述M和所述N分别为正整数。
所述Raft文件包括日志文件和辅助文件;所述执行模块105,用于:若所述第一数据大小大于或等于预设大小,则根据所述第一起始位置、以及预设的盘块大小,在所述目标数据中确定第一数据和第二数据;所述执行模块105,还用于将所述第一数据写入至所述日志文件对应的第一盘块,以及将所述第二数据写入至所述辅助文件对应的第二盘块,以将所述数据写入请求写入至所述领导节点的Raft文件中。
在一种可能的实施方式中,所述第一数据包括所述目标数据的头部数据和/或尾部数据,所述头部数据和所述尾部数据的数据大小分别小于所述预设盘块大小,所述头部数据的头部数据大小为所述预设盘块大小与第一偏移量的差值,所述第一偏移量为所述第一起始位置与所述预设盘块大小的余数;所述第二数据包括所述目标数据的中部数据,所述第二数据的数据大小为所述预设盘块大小的正整数倍。
在一种可能的实施方式中,所述执行模块105,具体用于:
根据所述第一起始位置和所述预设盘块大小,确定头部数据大小;
将所述第一数据大小和所述头部数据大小的差值,确定为剩余数据大小;
将所述剩余数据大小与所述预设盘块大小的商值的整数位确定为盘块数;
将所述盘块数与所述预设盘块大小的乘积,确定为中部数据大小;
获取所述第一数据大小与所述剩余数据大小的第一差值,并将所述第一差值与所述中部数据大小的差值,确定为尾部数据大小;
根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,在所述目标数据中确定所述第一数据和所述第二数据。
在一种可能的实施方式中,所述执行模块105,具体用于:
根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,将所述目标数据划分为头部数据、中部数据和尾部数据;
将所述头部数据和/或所述尾部数据,确定为所述第一数据;
将所述中部数据,确定为所述第二数据。
在一种可能的实施方式中,所述第一盘块映射关系为所述辅助文件与所述领导节点的本地磁盘的盘块映射关系;所述执行模块105,具体用于:
将所述虚拟磁盘文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第一盘块映射关系;
将所述辅助文件与所述领导节点的本地磁盘之间的盘块映射关系更新为所述第二盘块映射关系;
将所述日志文件对应的盘块中的数据,写入至所述虚拟磁盘文件对应的盘块中。
所述验证模块106,用于获取上一次盘块映射关系交换所对应的目标请求标识;所述验证模块106,还用于根据所述目标请求标识,若确定下一个待进行盘块映射关系交换的请求为所述数据写入请求,则将所述第一盘块映射关系与所述第二盘块映射关系相交换。
所述参数模块107,用于确定所述虚拟磁盘文件的第一文件信息、所述Raft文件的第二文件信息和所述第一数据大小,所述第一文件信息包括所述虚拟磁盘文件的文件句柄和所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述第二文件信息包括所述Raft文件的文件句柄和所述目标数据在所述Raft文件中的持久化地址的第一起始位置;所述参数模块107,还用于根据所述第一文件信息、所述第二文件信息和所述第一数据大小,通过所述盘块映射交换接口交换所述第一盘块映射关系与所述第二盘块映射关系。
在一种可能的实施方式中,所述参数模块107,具体用于:
将所述第一文件信息、所述第二文件信息和所述第一数据大小,确定为所述盘块映射交换接口的函数入参,并通过所述用户态文件系统调用所述盘块映射交换接口,以交换所述第一盘块映射关系与所述第二盘块映射关系
所述盘块映射交换接口的函数入参还包括所述数据写入请求的标识;所述更新模块108,用于将所述目标请求标识更新为所述数据写入请求的标识。
所述第一数据大小小于所述预设大小,所述Raft文件包括日志文件;所述判断模块109,用于根据所述第一数据大小和所述第一起始位置,将所述目标数据写入至所述日志文件;所述判断模块109,还用于确定所述虚拟磁盘文件对应的盘块,并将所述目标数据写入至所述虚拟磁盘文件对应的盘块。
示例性计算设备
在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图11对本公开示例性实施方式的计算设备进行说明。
图11显示的计算设备110仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图11所示,计算设备110以通用计算设备的形式表现。计算设备110的组件可以包括但不限于:上述至少一个处理单元1101、上述至少一个存储单元1102,连接不同系统组件(包括处理单元1101和存储单元1102)的总线1103。
总线1103包括数据总线、控制总线和地址总线。
存储单元1102可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)11021和/或高速缓存存储器11022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)11023。
存储单元1102还可以包括具有一组(至少一个)程序模块11024的程序/实用工具11025,这样的程序模块11024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算设备110也可以与一个或多个外部设备1104(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(I/O)接口1105进行。并且,计算设备110还可以通过网络适配器1106与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图11所示,网络适配器1106通过总线1103与计算设备110的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备110使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了数据写入装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种数据写入方法,应用于分布式块存储系统,该分布式块存储系统遵守Raft协议,其特征在于,包括:
响应于领导节点所接收到的数据写入请求,所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,并将所述数据写入请求的请求副本发送给相应的多个跟随节点,所述Raft文件与所述领导节点的本地磁盘具有第一盘块映射关系,所述数据写入请求中包括待写入的目标数据、所述目标数据的第一数据大小、以及所述目标数据在所述Raft文件中的持久化地址的第一起始位置;
响应于领导节点所接收到的多数派回复信息,基于所述多数派回复信息更新所述领导节点的状态机中的状态,并确定所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述多数派回复信息为占多数的跟随节点所发送给领导节点的多个回复信息,且所述多个回复信息的内容相一致,所述虚拟磁盘文件对应于所述领导节点的状态机,所述虚拟磁盘文件与所述领导节点的本地磁盘具有第二盘块映射关系;
将所述第一盘块映射关系与所述第二盘块映射关系相交换,以完成对于所述目标数据的写入。
2.根据权利要求1所述的方法,其特征在于,所述分布式块存储系统还包括用户态文件系统以及盘块映射交换接口;将所述第一盘块映射关系与所述第二盘块映射关系相交换的步骤还包括:
通过所述用户态文件系统调用所述盘块映射交换接口,以记录本次盘块映射关系交换所对应的Raft文件的回放位置,所述回放位置包括副本集标识和日志回放索引,其中,所述副本集标识和所述日志回放索引为所述盘块映射交换接口的函数入参。
3.根据权利要求1或2所述的方法,其特征在于,所述多个跟随节点的数量为N,所述多数派回复信息是由M个跟随节点所发送的,其中,M大于或等于(N+1)/2+1,所述M和所述N分别为正整数。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述Raft文件包括日志文件和辅助文件;所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,包括:
若所述第一数据大小大于或等于预设大小,则根据所述第一起始位置、以及预设的盘块大小,在所述目标数据中确定第一数据和第二数据;
将所述第一数据写入至所述日志文件对应的第一盘块,以及将所述第二数据写入至所述辅助文件对应的第二盘块,以将所述数据写入请求写入至所述领导节点的Raft文件中。
5.根据权利要求4所述的方法,其特征在于,
所述第一数据包括所述目标数据的头部数据和/或尾部数据,所述头部数据和所述尾部数据的数据大小分别小于所述预设盘块大小,所述头部数据的头部数据大小为所述预设盘块大小与第一偏移量的差值,所述第一偏移量为所述第一起始位置与所述预设盘块大小的余数;
所述第二数据包括所述目标数据的中部数据,所述第二数据的数据大小为所述预设盘块大小的正整数倍。
6.根据权利要求4或5所述的方法,其特征在于,根据所述第一起始位置、以及预设盘块大小,在所述目标数据中确定第一数据和第二数据,包括:
根据所述第一起始位置和所述预设盘块大小,确定头部数据大小;
将所述第一数据大小和所述头部数据大小的差值,确定为剩余数据大小;
将所述剩余数据大小与所述预设盘块大小的商值的整数位确定为盘块数;
将所述盘块数与所述预设盘块大小的乘积,确定为中部数据大小;
获取所述第一数据大小与所述剩余数据大小的第一差值,并将所述第一差值与所述中部数据大小的差值,确定为尾部数据大小;
根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,在所述目标数据中确定所述第一数据和所述第二数据。
7.根据权利要求6所述的方法,其特征在于,根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,在所述目标数据中确定所述第一数据和所述第二数据,包括:
根据所述头部数据大小、所述中部数据大小和所述尾部数据大小,将所述目标数据划分为头部数据、中部数据和尾部数据;
将所述头部数据和/或所述尾部数据,确定为所述第一数据;
将所述中部数据,确定为所述第二数据。
8.一种计算机可读存储介质,包括:所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至7中任一项所述的数据写入方法。
9.一种数据写入装置,应用于分布式块存储系统,该分布式块存储系统遵守Raft协议,其特征在于,包括:
处理模块,用于响应于领导节点所接收到的数据写入请求,所述领导节点将所述数据写入请求写入至所述领导节点的Raft文件中,并将所述数据写入请求的请求副本发送给相应的多个跟随节点,所述Raft文件与所述领导节点的本地磁盘具有第一盘块映射关系,所述数据写入请求中包括待写入的目标数据、所述目标数据的第一数据大小、以及所述目标数据在所述Raft文件中的持久化地址的第一起始位置;
确定模块,用于响应于领导节点所接收到的多数派回复信息,基于所述多数派回复信息更新所述领导节点的状态机中的状态,并确定所述目标数据在虚拟磁盘文件中目标写入地址的第二起始位置,所述多数派回复信息为占多数的跟随节点所发送给领导节点的多个回复信息,且所述多个回复信息的内容相一致,所述虚拟磁盘文件对应于所述领导节点的状态机,所述虚拟磁盘文件与所述领导节点的本地磁盘具有第二盘块映射关系;
写入模块,用于将所述第一盘块映射关系与所述第二盘块映射关系相交换,以完成对于所述目标数据的写入。
10.一种计算设备,包括:
至少一个处理器;
以及与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述计算设备执行如权利要求1至7任一项所述的数据写入方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311640519.1A CN117492661A (zh) | 2023-11-30 | 2023-11-30 | 数据写入方法、介质、装置和计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311640519.1A CN117492661A (zh) | 2023-11-30 | 2023-11-30 | 数据写入方法、介质、装置和计算设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117492661A true CN117492661A (zh) | 2024-02-02 |
Family
ID=89680110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311640519.1A Pending CN117492661A (zh) | 2023-11-30 | 2023-11-30 | 数据写入方法、介质、装置和计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117492661A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117707437A (zh) * | 2024-02-06 | 2024-03-15 | 济南浪潮数据技术有限公司 | 基于分布式存储系统的虚拟磁盘存储方法及装置 |
-
2023
- 2023-11-30 CN CN202311640519.1A patent/CN117492661A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117707437A (zh) * | 2024-02-06 | 2024-03-15 | 济南浪潮数据技术有限公司 | 基于分布式存储系统的虚拟磁盘存储方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112948318B (zh) | 一种Linux操作系统下基于RDMA的数据传输方法及装置 | |
US20070288711A1 (en) | Snapshot copy management method used for logic volume manager | |
US10552089B2 (en) | Data processing for managing local and distributed storage systems by scheduling information corresponding to data write requests | |
CN103164523A (zh) | 数据一致性检查方法、装置及系统 | |
CN110134338B (zh) | 一种分布式存储系统及其数据冗余保护方法和相关设备 | |
CN108829342B (zh) | 一种日志存储方法、系统及存储装置 | |
CN117492661A (zh) | 数据写入方法、介质、装置和计算设备 | |
CN110147203B (zh) | 一种文件管理方法、装置、电子设备及存储介质 | |
CN109918352B (zh) | 存储器系统和存储数据的方法 | |
CN115292266A (zh) | 一种基于存储器的高可靠日志存储方法 | |
CN105094691A (zh) | 一种数据操作的方法、设备和系统 | |
CN114461593B (zh) | 日志写入方法及其装置、电子设备及存储介质 | |
CN115470156A (zh) | 基于rdma的内存使用方法、系统、电子设备和存储介质 | |
CN111949371A (zh) | 一种命令信息传输方法、系统、装置及可读存储介质 | |
CN111435286B (zh) | 一种数据存储方法、装置和系统 | |
CN111435323B (zh) | 信息的传输方法、装置、终端、服务器及存储介质 | |
CN115981559A (zh) | 分布式数据存储方法、装置、电子设备和可读介质 | |
CN115220656A (zh) | 数据存储方法及装置、计算机可读存储介质、电子设备 | |
US8140800B2 (en) | Storage apparatus | |
CN114490540A (zh) | 数据存储方法、介质、装置和计算设备 | |
CN112395256B (zh) | 一种数据读取方法、电子设备及计算机存储介质 | |
CN111638980A (zh) | 基于内存映射的消息处理方法、装置、系统和存储介质 | |
CN111026890A (zh) | 基于索引表的图片数据存储方法、系统、装置和存储介质 | |
CN115103020B (zh) | 数据迁移处理方法和装置 | |
CN112003860B (zh) | 适用于远程直接内存访问的内存管理方法、系统及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |