CN116225774B - 数据实时校验方法、装置、电子设备及存储介质 - Google Patents

数据实时校验方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN116225774B
CN116225774B CN202310467506.2A CN202310467506A CN116225774B CN 116225774 B CN116225774 B CN 116225774B CN 202310467506 A CN202310467506 A CN 202310467506A CN 116225774 B CN116225774 B CN 116225774B
Authority
CN
China
Prior art keywords
state
sector
request
data
read
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.)
Active
Application number
CN202310467506.2A
Other languages
English (en)
Other versions
CN116225774A (zh
Inventor
黄岩
张洋
吴红伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yunhe Enmo Beijing Information Technology Co ltd
Original Assignee
Yunhe Enmo Beijing Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yunhe Enmo Beijing Information Technology Co ltd filed Critical Yunhe Enmo Beijing Information Technology Co ltd
Priority to CN202310467506.2A priority Critical patent/CN116225774B/zh
Publication of CN116225774A publication Critical patent/CN116225774A/zh
Application granted granted Critical
Publication of CN116225774B publication Critical patent/CN116225774B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本申请实施例公开了数据实时校验方法、装置、电子设备及存储介质,涉及计算机技术领域。首先将请求操作空间进行扇区级别的划分,并为每个扇区配置状态机,通过设置多个校验点并在内存空间中对应存储各个扇区的工作状态与数据校验和等状态数据,当响应于读写请求时,对应更新校验点的内存空间中的状态数据,并且当扇区的工作状态处于预设状态时,才进行数据校验。由此可以有效解决并发读写请求导致的数据误报的问题,而且设置多个校验点可以实时校验数据,并在数据错误时快速定位对应的功能模块,保证了数据的准确性和完整性。

Description

数据实时校验方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据实时校验方法、装置、电子设备及存储介质。
背景技术
数据校验有利于保证数据的准确性和完整性,避免数据损坏或丢失,提高数据的安全性和可靠性,因此在数据传输和存储过程中,数据校验具有重要意义。相关技术中,通过同时传输I/O请求的数据与校验和,在各个环节对I/O请求的数据与校验和进行对比以完成数据校验,从而保证I/O请求传输过程中数据的准确性和完整性。
然而,相关技术的数据校验方法依然存在一些局限,例如无法解决存储系统中由于读写请求并发导致的数据误报问题,或者无法快速定位引发数据错误的模块等,因此无法完全保证数据的准确性和完整性,存在较大的安全隐患。
发明内容
本申请旨在至少解决现有技术中存在的技术问题之一。为此,本申请实施例提供了一种数据实时校验方法、装置、电子设备及存储介质,能够快速定位并解决数据误报问题,有效保证了数据的准确性和完整性。
第一方面,本申请实施例提供了一种数据实时校验方法,应用于分布式存储系统,所述分布式存储系统的I/O路径上有多个功能模块,所述功能模块用于传输I/O请求,所述I/O请求包括写请求和读请求,所述方法包括:
获取请求操作空间,并将所述请求操作空间划分为多个扇区;
为每个所述扇区配置状态机;其中,所述状态机用于根据状态转换图切换所述扇区的工作状态,所述工作状态有多个,不同的所述工作状态下对所述扇区有不同的操作;
针对多个所述功能模块设置校验点;所述校验点包括请求入口和请求出口;
为每个所述校验点划分一个内存空间;所述内存空间用于存储所述校验点的状态数据,所述状态数据包括各个所述扇区的所述工作状态和各个所述扇区的数据校验和;
响应于写请求,更新所述校验点的所述状态数据,包括:切换所述写请求对应的所述扇区的所述工作状态,在所述校验点的所述请求入口计算所述写请求中第一数据的第一校验和,并将所述第一校验和作为所述扇区的数据校验和存储至所述内存空间;
响应于读请求,切换所述读请求对应的所述扇区的所述工作状态,并当所述扇区的所述工作状态处于预设状态时,在所述校验点的所述请求出口计算所述读请求中第二数据的第二校验和;
当所述写请求的第一位置与所述读请求的第二位置相同时,基于所述内存空间获取所述数据校验和,对比所述数据校验和与所述第二校验和,以完成所述校验点处的数据校验;其中,所述写请求包括第一偏移信息和第一长度信息,所述读请求包括第二偏移信息和第二长度信息,所述第一位置由所述第一偏移信息和所述第一长度信息计算,所述第二位置由所述第二偏移信息和所述第二长度信息计算。
在本申请的一些实施例中,所述获取请求操作空间,并将所述请求操作空间划分为多个扇区,还包括:
将所述请求操作空间划分为多个第一预设大小的数据块;
将每个所述数据块划分为多个第二预设大小的所述扇区;所述第一预设大小大于所述第二预设大小。
在本申请的一些实施例中,所述为每个所述扇区配置状态机,包括:
根据哈希表,查找所述请求操作空间的数据结构;其中,所述哈希表记录了多个所述请求操作空间的所述数据结构,所述数据结构为数组或者链表;
基于所述数据结构,获取所述数据块的块信息;所述块信息包括块识别号、扇区数量值;
根据所述块信息,查找所述数据块中的各个所述扇区;
基于所述扇区的状态,设置所述扇区对应的工作状态,从而为所述扇区配置所述状态机。
在本申请的一些实施例中,所述状态机包括以下工作状态:初始化状态、正在读状态、正在写状态和正常工作状态;
所述初始化状态表征所述扇区中的数据未被写过;
所述正在读状态表征所述扇区接收至少一个读请求,并响应至少一个所述读请求;
所述正在写状态表征所述扇区接收一个写请求,并响应所述写请求;
所述正常工作状态表征所述扇区未接收读请求和写请求,也未响应读请求和写请求。
在本申请的一些实施例中,所述状态机还包括以下工作状态:混合读写状态和并发写状态;
所述混合读写状态表征所述扇区接收一个写请求和至少一个读请求,并响应所述写请求和至少一个所述读请求;
所述并发写状态表征所述扇区接收至少两个写请求,并响应至少两个所述写请求。
在本申请的一些实施例中,所述为每个所述扇区配置状态机之前,还包括:
构建所述状态转换图,所述状态转换图用于指示所述扇区的所述工作状态之间的转移条件,所述状态转换图包括:
当所述扇区的所述工作状态为所述初始化状态,且所述扇区接收读请求,则将所述扇区的工作状态转换为所述正在读状态,且读计数增加一;
当所述扇区的所述工作状态为所述初始化状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为所述正在写状态,且写计数增加一;
当所述扇区的所述工作状态为所述正常工作状态,且所述扇区接收读请求,则将所述扇区的工作状态转换为所述正在读状态,且读计数增加一;
当所述扇区的所述工作状态为所述正常工作状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为所述正在写状态,且写计数增加一;
当所述扇区的所述工作状态为所述正在读状态,且读计数为零但所述扇区的数据校验和不为零时,则将所述扇区的工作状态转换为所述正常工作状态;
当所述扇区的所述工作状态为所述正在读状态,且读计数为零且所述扇区的数据校验和为零时,则将所述扇区的工作状态转换为所述初始化状态;
当所述扇区的所述工作状态为所述正在写状态,且写计数为零但所述扇区的数据校验和不为零时,则将所述扇区的工作状态转换为所述正常工作状态。
在本申请的一些实施例中,所述状态转换图还包括:
当所述扇区的所述工作状态为所述正在读状态,且所述扇区接收写请求,则将所述扇区的工作状态转换成混合读写状态,且写计数增加一;
当所述扇区的所述工作状态为所述正在写状态,且所述扇区接收读请求,则将所述扇区的工作状态转换成混合读写状态,且读计数增加一;
当所述扇区的所述工作状态为所述正在写状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为并发写状态,且写计数增加一;
当所述扇区的所述工作状态为混合读写状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为并发写状态,且写计数增加一;
当所述扇区的所述工作状态为并发写状态,且读计数为零和写计数为零时,则将所述扇区的工作状态转换为所述正常工作状态;
当所述扇区的所述工作状态为混合读写状态,且读计数为零和写计数为零时,则将所述扇区的工作状态转换为所述正常工作状态;
当所述扇区的所述工作状态为混合读写状态,且读计数为零但写计数不为零时,则将所述扇区的工作状态转换为所述正在写状态;
当所述扇区的所述工作状态为混合读写状态,且写计数为零但读计数不为零时,则将所述扇区的工作状态转换为所述正在读状态。
在本申请的一些实施例中,所述请求入口包括写请求入口,所述请求出口包括写请求出口;所述状态数据还包括各个所述扇区的读写计数,所述读写计数包括写计数;所述响应于写请求,更新所述校验点的所述状态数据,还包括:
响应于接收写请求,在所述校验点的所述写请求入口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述写计数增一;
响应于完成写请求,在所述校验点的所述写请求出口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述写计数减一。
在本申请的一些实施例中,所述请求入口包括读请求入口,所述请求出口包括读请求出口;所述状态数据还包括各个所述扇区的读写计数,所述读写计数包括读计数;所述响应于读请求,切换所述读请求对应的所述扇区的所述工作状态,并当所述扇区的所述工作状态处于预设状态时,在所述校验点的所述请求出口计算所述读请求中第二数据的第二校验和,包括:
响应于接收读请求,在所述校验点的所述读请求入口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数增一;
响应于完成读请求,在所述校验点的所述读请求出口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数减一;
响应于完成读请求,当所述状态机中所述扇区的所述工作状态处于所述正在读状态时,在所述校验点的所述读请求出口计算所述读请求中第二数据的第二校验和;
或者,
响应于接收读请求,在所述校验点的所述读请求入口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数增一;
响应于完成读请求,在所述校验点的所述读请求出口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数减一;
响应于完成读请求,当所述状态机中所述扇区的所述工作状态处于所述正常工作状态时,在所述校验点的所述读请求出口计算所述读请求中第二数据的第二校验和。
第二方面,本申请实施例还提供了一种数据实时校验装置,应用如本申请第一方面实施例所述的数据实时校验方法,包括:
扇区划分单元,用于获取请求操作空间,并将所述请求操作空间划分为多个扇区;
状态机配置单元,用于为每个所述扇区配置状态机;其中,所述状态机用于根据状态转换图切换所述扇区的工作状态,所述工作状态有多个,不同的所述工作状态下对所述扇区有不同的操作;
校验点设置单元,用于针对多个功能模块设置校验点;所述校验点包括请求入口和请求出口;
内存空间划分单元,用于为每个所述校验点划分一个内存空间;所述内存空间用于存储所述校验点的状态数据,所述状态数据包括各个所述扇区的所述工作状态和各个所述扇区的数据校验和;
第一响应单元,用于响应于写请求,更新所述校验点的所述状态数据,包括:切换所述写请求对应的所述扇区的所述工作状态,在所述校验点的所述请求入口计算所述写请求中第一数据的第一校验和,并将所述第一校验和作为所述扇区的数据校验和存储至所述内存空间;
第二响应单元,用于响应于读请求,切换所述读请求对应的所述扇区的所述工作状态,并当所述扇区的所述工作状态处于预设状态时,在所述校验点的所述请求出口计算所述读请求中第二数据的第二校验和;
校验和对比单元,用于当所述写请求的第一位置与所述读请求的第二位置相同时,基于所述内存空间获取所述数据校验和,对比所述数据校验和与所述第二校验和,以完成所述校验点处的数据校验;其中,所述写请求包括第一偏移信息和第一长度信息,所述读请求包括第二偏移信息和第二长度信息,所述第一位置由所述第一偏移信息和所述第一长度信息计算,所述第二位置由所述第二偏移信息和所述第二长度信息计算。
第三方面,本申请实施例还提供了一种电子设备,包括存储器、处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如本申请第一方面实施例所述的数据实时校验方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如本申请第一方面实施例所述的数据实时校验方法。
本申请实施例至少包括以下有益效果:
本申请实施例提供了一种数据实时校验方法、装置、电子设备及存储介质,其中,方法中首先获取请求操作空间并进行扇区级别的划分,得到多个扇区并为每个扇区配置状态机,其中,状态机用于根据状态转换图切换扇区的工作状态,工作状态有多个,不同的工作状态下对扇区有不同的操作,然后针对I/O路径上的多个功能模块设置校验点,每个校验点都包括请求入口和请求出口,并为每个校验点划分一个内存空间,用于存储校验点的状态数据,状态数据包括各个扇区的工作状态和各个扇区的数据校验和,由此可以快速通过不同的校验点快速定位不同的功能模块,而且利用内存空间有利于提高系统的性能,然后响应于写请求,更新校验点的状态数据,包括:切换写请求对应的扇区的工作状态,在校验点的请求入口计算写请求中第一数据的第一校验和,并将第一校验和作为扇区的数据校验和存储至内存空间,以及响应于读请求,切换读请求对应的扇区的工作状态,并当扇区的工作状态处于预设状态时,在校验点的请求出口计算读请求中第二数据的第二校验和,如果写请求的第一位置与读请求的第二位置相同时,即读请求所读取的数据是写请求写入的数据时,便基于内存空间获取数据校验和,通过对比数据校验和与第二校验和,以完成该校验点处的数据校验。由此在扇区的工作状态处于预设状态时,才进行数据校验,可以有效解决读写请求并发导致的数据误报问题,而且设置多个校验点可以实时校验数据,并在数据错误时快速定位对应的功能模块,保证了数据的准确性和完整性。
本申请的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是本申请一个实施例提供的数据实时校验方法的流程示意图;
图2是本申请一个实施例提供的校验点示意图;
图3是图1中步骤S101之前的流程示意图;
图4是本申请一个实施例提供的扇区划分示意图;
图5是图1中步骤S102的流程示意图;
图6是本申请一个实施例提供的状态转换图示意图;
图7是本申请另一个实施例提供的状态转换图示意图;
图8是图1中步骤S105的流程示意图;
图9是图1中步骤S106的流程示意图;
图10是图1中步骤S106的另一流程示意图;
图11是本申请一个实施例提供的混合读写状态示意图;
图12是本申请一个实施例提供的数据实时校验装置单元示意图;
图13是本申请一个实施例提供的电子设备的结构示意图。
附图标记:扇区划分单元 100、状态机配置单元 200、校验点设置单元 300、内存空间划分单元 400、第一响应单元 500、第二响应单元 600、校验和对比单元 700、电子设备 1000、处理器 1001、存储器 1002。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。
在本申请的描述中,需要理解的是,涉及到方位描述,例如上、下、前、后、左、右等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
在本申请的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
本申请的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本申请中的具体含义。
为了更好地理解本申请提供的技术方案,在此对本文中出现的术语进行相应地说明:
分布式存储系统:分布式存储系统是一种将数据存储在多个计算机节点上的系统,这些节点相互连接并协同工作以提供高可靠性、高吞吐量和可扩展性。分布式存储系统能够自动地对数据进行复制和备份,从而提高数据的可靠性,并且可以通过增加节点来扩展存储容量和处理能力。
I/O请求:即输入/输出请求,即计算机系统中的一种操作,它涉及将数据从系统内存传输到设备(输出)或将数据从设备传输到系统内存(输入)。I/O请求通常由应用程序或操作系统内核发出,并在相应设备(例如硬盘驱动器、网络接口卡等)完成操作后返回结果。I/O请求是计算机系统中非常常见的操作之一,它对于数据的读取和写入十分重要。
读写请求:指计算机系统中对数据进行读取或写入的操作。读请求是一种I/O请求,指从存储设备(如硬盘、内存等)中读取数据,写请求也是一种I/O请求,是将数据写入存储设备中。读写请求可以由计算机应用程序或操作系统发起,以满足各种不同的需求,如数据处理、存储管理等。
校验和:是一种根据数据内容计算出来的简短固定长度的值,通常用于检查数据在传输过程中是否发生了改变或损坏。校验和的计算方式通常是对数据进行一系列特定的运算操作,以产生一个表示数据完整性的结果。当数据被发送到接收方时,接收方可以通过对接收到的数据进行同样的计算,并将计算得到的结果与发送方提供的校验和进行比较。如果两个校验和不一致,那么说明数据在传输过程中发生了改变或损坏。
SPDK BlobStore:一种用于高效存储和检索大规模数据的存储系统,基于SPDK(Storage Performance Development Kit)技术栈开发,BlobStore使用Blob(BinaryLarge Object)作为存储单元,支持多种数据访问模式,并具有弹性扩展、高可靠性和高性能等特点,可以在各种场景下使用,例如高速缓存、数据库存储、机器学习数据集等。
元数据:描述数据的数据,通常用于指示数据的特征、结构和内容,以及它们如何被组织、存储和访问,可以包括数据的类型、格式、来源、作者、创建日期、修改日期、大小等信息。
数据校验有利于保证数据的准确性和完整性,避免数据损坏或丢失,提高数据的安全性和可靠性,因此在数据传输和存储过程中,数据校验具有重要意义。相关技术中,通过同时传输I/O请求的数据与校验和,在各个环节对I/O请求的数据与校验和进行对比以完成数据校验,从而保证I/O请求传输过程中数据的准确性和完整性。其中,SPDK BlobStore在元数据写盘之前,会先计算数据校验和,然后在加载该数据时再重新计算数据的校验和,从而确定数据的准确性。而ProcChk主要用于检查I/O请求在传输过程中可能出现的数据损坏问题,包括数据在网络传输中的校验和计算、LocalStore数据持久化前的数据校验等。通过同时传输I/O请求的数据与校验和,在各个环节对I/O请求的数据与校验和进行对比以完成数据校验,从而保证I/O请求传输过程中数据的准确性和完整性。
然而,相关技术的数据校验方法依然存在一些局限,例如无法解决写请求丢失或旧数据覆盖新数据导致读到旧数据,从而导致数据误报的问题,或者无法快速定位引发数据错误的模块等等,因此无法完全保证数据的准确性和完整性,存在较大的安全隐患。
基于此,本申请实施例提供了一种数据实时校验方法、装置、电子设备及存储介质,在扇区的工作状态处于预设状态时,才进行数据校验,可以有效解决数据误报的问题,而且设置多个校验点可以实时校验数据,并在数据错误时快速定位对应的功能模块,保证了数据的准确性和完整性。
参照图1所示,本申请实施例提供了一种数据实时校验方法,应用于分布式存储系统,可以理解的是,分布式存储系统的I/O路径上有多个功能模块,用于传输I/O请求,而I/O请求包括写请求和读请求,该数据实时校验方法包括但不限于以下步骤S101至步骤S107。
步骤S101,获取请求操作空间,并将请求操作空间划分为多个扇区。
可以理解的是,请求操作空间是指在进行读写请求时,数据操作所涉及的空间范围。示例性的,请求操作空间可以是一个文件、一个数据库表、一个内存区域或者一个网络资源等,在文件系统中,请求操作空间可以是一个文件,而在数据库系统中,请求操作空间可以是一个表。请求操作空间的大小和位置是进行读写操作的关键因素,它们决定了读写操作所涉及的数据范围和访问方式。
在一些实施例中,请求操作空间为LUN空间,具体的,LUN是逻辑单元号(LogicalUnit Number)的缩写,LUN空间指的是在存储设备中为LUN分配的存储空间,由一组物理磁盘组成的,可以独立地进行管理和分配。可以理解的是,扇区是指磁盘上划分的区域,具体的,磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,硬盘的读写以扇区为基本单位。
在一些实施例中,获取请求操作的LUN空间后,可以得到LUN空间的具体大小,然后设置要划分的扇区的大小,对LUN空间进行扇区级别的划分,从而可以将该LUN空间划分为多个扇区。示例性的,LUN空间为32MB,划分的扇区为512B时,该LUN空间可以划分为32*1024*1024/512=65536个扇区;又例如,LUN空间为64MB,划分的扇区为4096B时,该LUN空间可以划分为64*1024*1024/4096=16384个扇区,本实施例对此不做限制。
步骤S102,为每个扇区配置状态机。
可以理解的是,状态机描述了一个系统的运行状态及其状态之间的转移条件,可以用图形方式表示,通常包括一组状态、一组事件,以及状态之间的转移规则。状态机根据当前状态和接收到的事件,决定转移到下一个状态,从而控制系统的行为。
在一些实施例中,为每个扇区配置状态机,即该状态机描述的是扇区的工作状态及其状态之间的转移条件。具体的,状态机用于根据状态转换图切换扇区的工作状态,工作状态有多个,不同的工作状态下对扇区有不同的操作。示例性的,当一个写请求下发时,写请求中的数据会写入到对应的扇区中,此时对应的扇区的工作状态由当前的工作状态切换成了写状态,而状态转移的条件为该扇区接收到了写请求;又例如,当一个读请求下发时,会读取对应的扇区的数据,此时对应的扇区的工作状态由当前的工作状态切换成了读状态,而状态转移的条件为该扇区接收到了读请求,本实施例对此不做限制。
步骤S103,针对多个功能模块设置校验点。
可以理解的是,分布式存储系统的I/O路径上用于传输I/O请求的功能模块有多个,例如FrontEnd模块用于处理用户的前端I/O请求,又例如Raft是一种分布式一致性算法,Raft模块用于在分布式系统中实现数据的一致性和高可用性,而Crpc是一种远程过程调用协议,用于在分布式系统中进行进程间通信,在本实施例中Crpc模块用于FrontEnd模块和Raft模块通信,LocalStore模块则用于存储管理数据等。
在一些实施例中,针对多个功能模块设置校验点,其中,校验点包括请求入口和请求出口。示例性的,参照图2所示的校验点示意图,可以在FrontEnd模块处设置校验点1,在Crpc模块处设置校验点2,在Raft模块处设置校验点3,在LocalStore模块处设置校验点4。具体的,这些功能模块的校验点都包括请求入口和请求出口,各个校验点在请求入口处接收读写请求并往下传输,系统响应该读写请求后经过校验点并通过对应的请求出口往上传输,本实施例对校验点的数量和具体设置不做限制,本领域技术人员可根据需求设置。
在一些实施例中,校验点的请求入口和请求出口均对应处理读写请求的函数。示例性的,Crpc_read或Crpc_write为Crpc模块对应的校验点2的请求入口,而Crpc_read_cb或Crpc_write_cb则为Crpc模块对应的校验点2的请求出口。可以理解的是,校验点2的请求出口用于接收读写请求的响应完成结果,即校验点2的请求入口接收一个读写请求并往下传输后,系统响应该读写请求的响应结果返回至校验点2的请求出口。
步骤S104,为每个校验点划分一个内存空间。
在一些实施例中,每个校验点都对应划分有内存空间,该内存空间用于存储校验点的状态数据。具体的,状态数据包括各个扇区的工作状态和各个扇区的数据校验和,可以理解的是,每个扇区中存储的数据均可以计算对应的校验和,即扇区的数据校验和。示例性的,当Crpc模块接收了一个读请求并传输给Raft模块,则校验点2对应的内存空间中记录的状态数据随之发生变化,具体的,该读请求对应的扇区的工作状态切换为读状态,即内存空间的状态数据中该扇区的工作状态存储为读状态;当系统响应该读请求后,Crpc模块便会从Raft模块接收对应的读请求响应完成结果,由此校验点2对应的状态数据中该扇区的工作状态存储为读完成状态。可以理解的是,本实施例对此不做限制,本领域技术人员可以根据实际需求设置。
在一些实施例中,校验点的状态数据还包括写请求的偏移位置信息,偏移位置信息表征该写请求对应从请求操作空间的哪个位置开始进行写入。可以理解的是,由于相关技术中并未对写请求中的数据进行偏移位置的校验,而只是保证了读写请求中的数据与校验和信息相匹配,因此在传输过程中可能存在偏移位置计算错误的问题,存在较大的安全隐患。而本实施例中,在各个校验点对应的内存空间中还记录了写请求的偏移位置,由此当下游模块将数据写错位置时也能及时发现错误。示例性的,Crpc模块对应的校验点2中的内存空间接收一个写请求,将数据从1024的位置开始写入,即记录的偏移位置信息为1024,但是下游模块,Raft模块对应的校验点3中的内存空间记录的偏移位置是512,由此在各个校验点在进行校验时可以及时发现偏移位置计算错误的问题。本实施例对此不做限制。
可以理解的是,利用内存空间存储各个扇区的数据校验和,对I/O请求的时延影响小,使得系统的性能和I/O时序等基本保持一致,有利于提高系统的性能,而且对各种错误情况都能准确检测,例如条带化和缓存等模块导致原始校验和丢失、写请求丢失、数据篡改、新数据被旧数据覆盖等。也可以利用其他介质存储各个扇区的数据校验和与各个扇区的工作状态,以达到高效记录的目的,例如PM(Persistent Memory)、NVME SSD设备等,本实施例对此不做限制。
步骤S105,响应于写请求,更新校验点的状态数据,包括:切换写请求对应的扇区的工作状态,在校验点的请求入口计算写请求中第一数据的第一校验和,并将第一校验和作为扇区的数据校验和存储至内存空间。
在一些实施例中,I/O路径上的功能模块均会响应接收到的读写请求,当设置了校验点的功能模块响应了写请求时,该校验点对应的内存空间中的状态数据随之更新,具体的,包括更新写请求对应的扇区的工作状态和扇区的数据校验和。可以理解的是,写请求中包括第一数据,代表要存储或者写入磁盘的数据,具体包括源IP地址、目的IP地址、协议类型、数据长度等。由于不同的写请求中写入请求操作空间的第一数据长度不同,因此一个写请求对应的扇区可能有多个,示例性的,当第一数据大小为5120B,扇区大小为512B时,该写请求对应写入了5120/512=10个扇区中,所以该写请求对应的10个扇区的工作状态均发生更新,切换为写状态。
在一些实施例中,在校验点的请求入口计算该写请求中第一数据的第一校验和,并将该校验和作为对应的扇区的数据校验和更新存储至该校验点对应的内存空间中。可以理解的是,每个扇区中的数据都可以进行计算得到一个校验和,即数据校验和,当写请求的第一数据写入多个扇区时,按扇区的数据长度对第一数据进行划分和计算,从而得到多个第一校验和,并将其作为各个扇区对应的数据校验和存储至内存空间中。
在一些实施例中,使用Adler-32计算校验和,Adler-32是一种用于检测数据传输是否正确的校验和算法,它使用32位整数作为校验和,能够快速计算校验和,并且具有较高的错误检测能力。Adler-32算法的计算过程是先初始化校验和为1和0,即s1=1,s2=0,然后将待校验的数据流分成若干个16位字节,对每个字节进行计算:s1 = (s1 + byte) %65521,s2 = (s2 + s1) % 65521,然后将s2左移16位,再将s2和s1进行按位异或运算,得到最终的32位校验和值。或者使用CRC32算法计算校验和,CRC32算法使用32位整数作为校验和,具有较高的错误检测能力和较低的误判率,被广泛应用于数据传输、数据存储等领域。
在一些实施例中,计算校验和还可以是将第一数据中的每个字节相加从而得到对应的第一校验和,或者使用二进制反码求和,首先将待第一数据中的每个16位字(两个字节)分成一组,如果最后一个字节不足16位,则在末尾添加0,然后对每组16位字进行二进制反码求和,即将每组16位字相加,忽略溢出的进位,得到一个16位的校验和值,最后将得到的16位校验和值取反,得到最终的校验和值,即第一校验和。可以理解的是,本实施例对此不做限制,本领域技术人员可根据实际需求设置。
步骤S106,响应于读请求,切换读请求对应的扇区的工作状态,并当扇区的工作状态处于预设状态时,在校验点的请求出口计算读请求中第二数据的第二校验和。
在一些实施例中,当设置了校验点的功能模块响应了读请求时,该校验点对应的内存空间中的状态数据随之更新,具体的,包括更新读请求对应的扇区的工作状态。可以理解的是,由于不同的读请求中请求读取请求操作空间的第二数据长度不同,因此一个读请求对应读取的扇区可能有多个。示例性的,当第二数据大小为1024B,扇区大小为512B时,该读请求对应读取1024/512=2个扇区的数据,所以该读请求对应的2个扇区的工作状态均发生更新,切换为读状态。
在一些实施例中,在校验点响应完成读请求时,也对应在内存空间中将状态数据进行更新,将对应的扇区的工作状态切换为读完成状态,然后在校验点的请求出口计算读请求中第二数据的第二校验和。可以理解的是,接收读请求时,读请求不包括第二数据,而是读请求完成时,即将存储的数据读取出来了,才包括第二数据。因此是在请求出口对读请求读取到的第二数据计算第二校验和。
在一些实施例中,当状态机中扇区的工作状态处于预设状态时,才在校验点的请求出口计算读请求中第二数据的第二校验和。可以理解的是,预设状态代表读取数据的扇区可以保证数据一致性,因此处于可以准确计算第二校验和的状态,否则其他状态下计算的第二校验和可能引发数据误报的问题。
可以理解的是,计算第二校验和的方法与计算第一校验和方法对应,由此计算的校验和才能对数据进行有效的校验。示例性的,使用Adler-32计算写请求中第一数据的第一校验和,则对应使用Adler-32计算读请求中第二数据的第二校验和,或者使用CRC32算法计算写请求中第一数据的第一校验和,则对应使用CRC32算法计算读请求中第二数据的第二校验和,本实施例对此不做限制。
步骤S107,当写请求的第一位置与读请求的第二位置相同时,基于内存空间获取数据校验和,对比数据校验和与第二校验和,以完成校验点处的数据校验。
在一些实施例中,写请求中还包括第一偏移信息和第一长度信息,根据第一偏移信息和第一长度信息可以计算得到第一数据对应写入的第一位置,同理,读请求中还包括第二偏移信息和第二长度信息,根据第二偏移信息和第二长度信息可以计算得到要读取的第二数据对应存储的第二位置。具体地,偏移指的是数据在系统中的起始位置,而长度指的是该数据的大小。
可以理解的是,如果写请求的偏移和长度不同,那么写入的数据位置就会不同;如果读请求的偏移和长度不同,那么读取到的数据就会不同。示例性,写请求的第一偏移信息为1024,第一长度信息为512,则第一数据是从系统的第1024个字节开始写入,写入长度512个字节的数据;读请求的第二偏移信息为4096,第二长度信息为2048,则读取到的第二数据是从系统的第4096个字节开始,读取2048个字节的数据。
在一些实施例中,当写请求的第一位置与读请求的第二位置相同时,说明该读请求读取的数据即该写请求对应写的数据,为了校验数据的正确性和完整性,基于内存空间获取预先存储的数据校验和,在对比数据校验和与计算得到的第二校验和,如果数据校验和第二校验和相同,说明该数据是正确和完整的,否则说明该数据发生了错误或者损坏,从而完成该校验点处的数据校验。
由此,在多个功能模块设置校验点,并通过状态机表示各个扇区的工作状态,可以实时对相关数据在不同的校验点处进行对比校验,有利于及时发现数据错误或损坏,从而快速定位到引发数据错误的功能模块,加快了问题解决的速度,有效保证了数据的准确性和完整性。
参照图3所示,在本申请的一些实施例中,上述步骤S101还可以包括但不限于以下步骤S201至步骤S202。
步骤S201,将请求操作空间划分为多个第一预设大小的数据块。
在一些实施例中,获取请求操作空间后,将其划分为多个第一预设大小的数据块。示例性的,请求操作空间为320MB大小,第一预设大小设置为4MB,则可以将请求操作空间划分为320/4=80个第一预设大小的数据块。可以理解的是,第一预设大小还可以设置为1MB、8MB或其他大小,本实施对此不做限制。
步骤S202,将每个数据块划分为多个第二预设大小的扇区。
在一些实施例中,将数据块继续划分,得到多个第二预设大小的扇区。示例性的,数据块为4MB,第二预设大小设置为512B,则可以将一个数据库划分为4*1024*1024/512=8192个第二预设大小的扇区。可以理解的是,第二预设大小还可以设置为4096B或其他大小,本实施例对此不做限制。
在一些实施例中,参照图4所示的扇区划分示意图,获取请求操作的LUN空间后,划分为多个第一预设大小的数据块,从数据块0开始计数,然后再将各个数据块划分为多个第二预设大小是扇区,从扇区0开始计数,本实施例对此不做限制。
可以理解的是,对请求操作空间进行扇区级别的划分后,可以根据写请求中的第一偏移信息和第一长度信息,将第一数据写入到对应的扇区,或者根据读请求中的第二偏移信息和第二长度信息,读取对应的扇区的数据。
参照图5所示,在本申请的一些实施例中,上述步骤S102,还可以包括但不限于以下步骤S301至步骤S304。
步骤S301,根据哈希表,查找请求操作空间的数据结构。
可以理解的是,哈希表(Hash Table)实现了映射关系,将键(Key)映射到值(Value)上,通过对键进行哈希函数计算,将其转换为数组下标,然后将值存储在数组对应的位置上。在一些实施例中,哈希表记录了多个请求操作空间的数据结构,根据哈希表,可以查找特定请求操作空间对应的数据结构。示例性的,数据结构为数组或者链表,具体的,根据哈希表查找得到请求操作空间的数组或者链表。
步骤S302,基于数据结构,获取数据块的块信息。
在一些实施例中,根据请求操作空间的数组或者链表,可以获取数据块的块信息。示例性的,数组中记录了请求操作空间的划分的各个数据块,如数组的下标0对应位置记录数据块0,因此根据数组可以定位到特定的数据块,从而获取该数据块的块信息。可以理解的是,块信息包括块识别号和扇区数量值,其中,块识别号用于标识该数据块,扇区数量值则用于标识该数据块被划分成了多少个扇区,本实施例对此不做限制。
步骤S303,根据块信息,查找数据块中的各个扇区。
在一些实施例中,根据数据块的块信息,对应查找该数据块中的各个扇区。通过块信息中的扇区数量值,可以查找对应数量的各个扇区。
步骤S304,基于扇区的状态,设置扇区对应的工作状态,从而为扇区配置状态机。
在一些实施例中,根据扇区的状态,可以设置扇区对应的工作状态。具体的,由于扇区的状态为写、写完成、读、读完成时,均会有不同的操作执行,由此可以设置对应的工作状态及不同工作状态之间的转移条件,从而为扇区配置状态机。
在本申请的一些实施例中,状态机中扇区对应的工作状态有多个,包括:初始化状态、正在读状态、正在写状态和正常工作状态。具体的,初始化状态表征扇区中的数据未被写过;正在读状态表征扇区接收至少一个读请求,并响应至少一个读请求;正在写状态表征扇区接收一个写请求,并响应写请求;正常工作状态表征扇区未接收读请求和写请求,也未响应读请求和写请求。
可以理解的是,初始化状态还可以表征扇区由于多写导致数据正确性不确定,正在读状态表征扇区此时只有读请求在响应,即没有写请求在进行,而正在写状态表征扇区此时有且仅有一个写请求在响应,正常工作状态表征扇区已有数据写入,但没有读请求也没有写请求在响应。
在本申请的一些实施例中,状态机中的扇区还可以有混合读写状态和并发写状态。具体的,混合读写状态表征扇区接收一个写请求和至少一个读请求,并响应写请求和至少一个读请求;并发写状态表征扇区接收至少两个写请求,并响应至少两个写请求。
可以理解的是,混合读写状态有且仅有一个写请求在响应,并且有至少一个读请求在响应,而并发写状态有至少两个写请求在响应,可以没有读请求在进行,也可以有一个或多个读请求在进行。本实施例对此不做限制。
在本申请的一些实施例中,上述步骤S102之前,还包括:构建所述状态转换图。具体的,状态转换图用于指示扇区的工作状态之间的转移条件。参照图6所示的状态转换图示意图:
当扇区的工作状态为初始化状态,且扇区接收读请求,则将扇区的工作状态转换为正在读状态,且读计数增加一;即转移条件1代表收到读请求;
当扇区的工作状态为初始化状态,且扇区接收写请求,则将扇区的工作状态转换为正在写状态,且写计数增加一;即转移条件2代表收到写请求;
当扇区的工作状态为正常工作状态,且扇区接收读请求,则将扇区的工作状态转换为正在读状态,且读计数增加一;即转移条件3代表收到读请求;
当扇区的工作状态为正常工作状态,且扇区接收写请求,则将扇区的工作状态转换为正在写状态,且写计数增加一;即转移条件4代表收到写请求;
当扇区的工作状态为正在读状态,且读计数为零但扇区的数据校验和不为零时,则将扇区的工作状态转换为正常工作状态;即转移条件5代表读计数为零且数据校验和不为零;
当扇区的工作状态为正在读状态,且读计数为零且扇区的数据校验和为零时,则将扇区的工作状态转换为初始化状态;即转移条件6代表读计数为零且数据校验和为零。
当扇区的工作状态为正在写状态,且写计数为零但扇区的数据校验和不为零时,则将扇区的工作状态转换为正常工作状态;即转移条件7代表写计数为零且数据校验和不为零。
可以理解的是,读计数用于表征该扇区目前响应的读请求的个数,读计数为3则表征该扇区目前在响应3个读请求,同理,写计数用于表征该扇区目前响应的写请求的个数,读计数为0则表征该扇区目前没有写请求在进行。
在本申请的一些实施例中,参照图7所示,状态转换图还包括:
当扇区的工作状态为正在读状态,且扇区接收写请求,则将扇区的工作状态转换成混合读写状态,且写计数增加一;即转移条件8代表收到写请求;
当扇区的工作状态为正在写状态,且扇区接收读请求,则将扇区的工作状态转换成混合读写状态,且读计数增加一;即转移条件9代表收到读请求;
当扇区的工作状态为正在写状态,且扇区接收写请求,则将扇区的工作状态转换为并发写状态,且写计数增加一;即转移条件10代表收到写请求;
当扇区的工作状态为混合读写状态,且扇区接收写请求,则将扇区的工作状态转换为并发写状态,且写计数增加一;即转移条件11代表收到写请求;
当扇区的工作状态为并发写状态,且读计数为零和写计数为零时,则将扇区的工作状态转换为正常工作状态;即转移条件12代表读计数为零且写计数为零;
当扇区的工作状态为混合读写状态,且读计数为零和写计数为零时,则将扇区的工作状态转换为正常工作状态;即转移条件13代表读计数为零且写计数为零;
当扇区的工作状态为混合读写状态,且读计数为零但写计数不为零时,则将扇区的工作状态转换为正在写状态;即转移条件14代表读计数为零但写计数不为零;
当扇区的工作状态为混合读写状态,且写计数为零但读计数不为零时,则将扇区的工作状态转换为正在读状态;即转移条件15代表写计数为零但读计数不为零。
可以理解的是,本领域技术人员可以根据实际需求设置状态机,本实施例对此不做限制。
参照图8所示,在本申请的一些实施例中,上述步骤S105还可以包括但不限于以下步骤S401至步骤S402。
步骤S401,响应于接收写请求,在校验点的写请求入口,在状态机中切换扇区的工作状态,且扇区的写计数增一。
在一些实施例中,请求入口还包括写请求入口,内存空间中存储的状态数据还包括各个扇区的读写计数,具体的,读写计数包括写计数。响应于接收写请求,更新校验点的状态数据还包括在校验点的写请求入口处,在状态机中切换对应的扇区的工作状态,即收到写请求,例如对应的扇区当前的工作状态为正在读状态,则将其切换至混合读写状态,并且扇区的读计数增加一。
可以理解的是,针对多个功能模块对应的各个校验点均执行上述操作,即在每个校验点的写请求入口处,对应更新校验点的状态数据,即切换符合状态转移条件的扇区的工作状态和更新读写计数,本实施例对此不做限制。
步骤S402,响应于完成写请求,在校验点的写请求出口,在状态机中切换扇区的工作状态,且扇区的写计数减一。
在一些实施例中,请求出口还包括写请求出口,并且当响应于完成写请求时,更新校验点的所述状态数据还包括在校验点的写请求出口处,在状态机中切换对应的扇区的工作状态。例如扇区当前的工作状态为正在写状态,则对应的读计数为零,写计数为一,当写请求完成后,在校验点的写请求出口处对存储的写计数减一,此时对应的读计数为零且写计数为零,而且由于已经写入了数据,此时的扇区的数据校验和不为零,符合正常工作状态的转移条件,则将扇区的工作状态由正在写状态切换至正常工作状态。
参照图9所示,在本申请的一些实施例中,上述步骤S106还可以包括但不限于以下步骤S501至步骤S503。
步骤S501,响应于接收读请求,在校验点的读请求入口,在状态机中切换扇区的工作状态,且扇区的读计数增一。
在一些实施例中,请求入口还包括读请求入口,内存空间中存储的状态数据还包括各个扇区的读写计数,具体的,读写计数包括读计数。响应于接收读请求,在校验点的读请求入口处,在状态机中切换对应的扇区的工作状态,即收到读请求,例如扇区当前的工作状态为正在写状态,则将其切换至混合读写状态,并且扇区的读计数加一。
可以理解的是,针对多个功能模块对应的各个校验点均执行上述操作,即在每个校验点的读请求入口处,对应更新校验点的状态数据,即切换符合状态转移条件的扇区的工作状态和更新读写计数,本实施例对此不做限制。
步骤S502,响应于完成读请求,在校验点的读请求出口,在状态机中切换扇区的工作状态,且扇区的读计数减一。
在一些实施例中,请求出口还包括读请求出口,并且当响应于完成读请求时,在校验点的读请求出口处,在状态机中切换对应的扇区的工作状态。例如扇区当前的工作状态为混合读写状态,而对应的读计数为一,写计数为一,当读请求完成后,在校验点的读请求出口处对存储的读计数减一,此时对应的读计数为零但写计数不为零,符合正在写状态的转移条件,则将扇区的工作状态由混合读写状态切换至正在写状态。
步骤S503,响应于完成读请求,当状态机中扇区的工作状态处于正在读状态时,在校验点的读请求出口计算读请求中第二数据的第二校验和。
在一些实施例中,响应于完成读请求,当状态机中扇区的工作状态处于正在读状态时,在校验点的读请求出口计算读请求中读到的第二数据的第二校验和,该第二校验和在扇区处于正在读状态是可以正常用于数据的对比校验。
参照图10所示,在本申请的一些实施例中,上述步骤S106还可以包括但不限于以下步骤S601至步骤S603。
步骤S601,响应于接收读请求,在校验点的读请求入口,在状态机中切换扇区的工作状态,且扇区的读计数增一。
在一些实施例中,请求入口还包括读请求入口,内存空间中存储的状态数据还包括各个扇区的读写计数,具体的,读写计数包括读计数。响应于接收读请求,在校验点的读请求入口处,在状态机中切换对应的扇区的工作状态,即收到读请求,例如扇区当前的工作状态为正常工作状态,则将其切换至正在读状态,并且扇区的读计数加一。
可以理解的是,针对多个功能模块对应的各个校验点均执行上述操作,即在每个校验点的读请求入口处,对应更新校验点的状态数据,即切换符合状态转移条件的扇区的工作状态和更新读写计数,本实施例对此不做限制。
可以理解的是,针对多个功能模块对应的各个校验点均执行上述操作,即在每个校验点的读请求入口和读请求出口处,切换符合状态转移条件的扇区的工作状态,本实施例对此不做限制。
步骤S602,响应于完成读请求,在校验点的读请求出口,在状态机中切换扇区的工作状态,且扇区的读计数减一。
在一些实施例中,请求出口还包括读请求出口,并且当响应于完成读请求时,在校验点的读请求出口处,在状态机中切换对应的扇区的工作状态。例如扇区当前的工作状态为正在读状态,而对应的读计数为三,当读请求完成后,在校验点的读请求出口处对读计数减一,此时对应的读计数为二,依然还是正在读状态,不符合状态的转移条件,则继续保持扇区的工作状态为正在读状态。
步骤S603,响应于完成读请求,当状态机中扇区的工作状态处于正常工作状态时,在校验点的读请求出口计算读请求中第二数据的第二校验和。
在一些实施例中,响应于完成读请求,当状态机中扇区的工作状态处于正在读状态时,在校验点的读请求出口计算读请求中读到的第二数据的第二校验和,该第二校验和在扇区处于正在读状态是可以正常用于数据的对比校验。
在本申请的一些实施例中,扇区的预设状态包括正在读状态和正常工作状态,此时在对应的校验点的读请求出口计算读请求中读取到的第二数据的第二校验和。而扇区的工作状态为其他状态时,例如初始化状态、正在写状态或者混合读写状态等,均不在校验点的读请求出口计算读请求中读取到的第二数据的第二校验和,即不进行数据的对比校验。具体的,初始化状态由于未被写入数据,因此读请求读到了未写过的位置,不需要计算第二校验和;正在写状态由于在写入时在各个校验点出计算并存储了第一校验和,因此也不需要计算第二校验和;混合读写状态则无法确定存储的第一校验和与读取的数据的第二校验和的一致性;并发写状态无法保证数据的正确性,因此均不计算第二校验和。
在一些实施例中,参照图11所示的混合读写状态示意图,混合读写状态对应的扇区有四种情况,第一种情况是扇区先接收到写请求,再接收到读请求,而且读请求晚于写请求完成;第二种情况是扇区先接收到写请求,再接收到读请求,而且读请求早于写请求完成;第三种情况是扇区先接收到读请求,再接收到写请求,而且读请求晚于写请求完成;第四种情况是扇区先接收到读请求,再接收到写请求,而且读请求早于写请求完成。在这些情况下,即使读请求和写请求的数据均没有错误或者损坏,但如果读请求读到的第二数据,不是该写请求的写入的第一数据时,还是会导致第一校验和与第二校验和不相同,从而引发数据误报。
示例性的,当Crpc模块先接收并响应了一个读请求,并传输至Raft模块继续往下传输,然后再接收响应了一个写请求,在对应的校验点2的写请求入口处计算并更新存储了第一校验和,但是写请求还没继续往下传输,磁盘的数据还是旧数据,先前的读请求读取到了旧数据,当读请求完成时,在校验点2的读请求出口处计算读到的旧数据的第二校验和,如果和已更新的第一校验和进行对比,则会出现数据不一致的情况,从而导致数据误报的情况,但这不是数据的错误或者损坏,而是由于混合读写导致校验和临时不一致。
示例性的,磁盘中记录的数据是2,此时响应一个写请求,需要将数据更新为3,在校验点的写请求入口计算并记录了数据3的第一校验和,但该写请求还未返回成功,即校验点的写请求出口还未接收到写计数减一的指令,并不确定是否成功更新数据,此时校验点又接收了一个读请求读取该磁盘的数据,则该读请求无论是读取到2还是3,数据都是正确的,没有发生数据错误或者损坏,但如果读取到2,则在校验点的读请求出口计算的第二校验和与存储的第一校验和不一致,从而导致发生数据误报的情况。
可以理解的是,写请求在分布式存储系统内部的执行顺序不一定按照接收到写请求时的顺序,所以并发写状态时,如果两个以上的写请求对应写入同一个扇区,则会出现校验点存储的第一校验和与写入扇区的数据顺序不一致的情况,从而导致后续的读请求在读取完成时,进行数据校验的校验和不一致引发的数据误报情况。
由此在校验点的扇区的工作状态处于预设状态时,才进行数据校验,可以有效解决数据误报的问题,简化了编程逻辑,便于系统的维护,而且设置多个校验点可以实时校验数据,并在数据错误时快速定位对应的功能模块,保证了数据的准确性和完整性。
本发明实施例还提供一种数据实时校验装置,可以实现上述数据实时校验方法,参照图12所示的数据实时校验装置单元示意图,在本申请一些实施例中,数据实时校验装置包括:
扇区划分单元100,用于获取请求操作空间,并将请求操作空间划分为多个扇区;
状态机配置单元200,用于为每个扇区配置状态机;其中,状态机用于根据状态转换图切换扇区的工作状态,工作状态有多个,不同的工作状态下对扇区有不同的操作;
校验点设置单元300,用于针对多个功能模块设置校验点;校验点包括请求入口和请求出口;
内存空间划分单元400,用于为每个校验点划分一个内存空间;内存空间用于存储校验点的状态数据,状态数据包括各个扇区的工作状态和各个扇区的数据校验和;
第一响应单元500,用于响应于写请求,更新校验点的状态数据,包括:切换写请求对应的扇区的工作状态,在校验点的请求入口计算写请求中第一数据的第一校验和,并将第一校验和作为扇区的数据校验和存储至内存空间;
第二响应单元600,用于响应于读请求,切换读请求对应的扇区的工作状态,并当扇区的工作状态处于预设状态时,在校验点的请求出口计算读请求中第二数据的第二校验和;
校验和对比单元700,用于当写请求的第一位置与读请求的第二位置相同时,基于内存空间获取数据校验和,对比数据校验和与第二校验和,以完成校验点处的数据校验;其中,写请求包括第一偏移信息和第一长度信息,读请求包括第二偏移信息和第二长度信息,第一位置由第一偏移信息和第一长度信息计算,第二位置由第二偏移信息和第二长度信息计算。
本实施例的数据实时校验装置的具体实施方式与上述数据实时校验方法的具体实施方式基本一致,在此不再一一赘述。
图13示出了本申请实施例提供的电子设备1000。电子设备1000包括:处理器1001、存储器1002及存储在存储器1002上并可在处理器1001上运行的计算机程序,计算机程序运行时用于执行上述的数据实时校验方法。
处理器1001和存储器1002可以通过总线或者其他方式连接。
存储器1002作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序,如本申请实施例描述的数据实时校验方法。处理器1001通过运行存储在存储器1002中的非暂态软件程序以及指令,从而实现上述的数据实时校验方法。
存储器1002可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储执行上述的数据实时校验方法。此外,存储器1002可以包括高速随机存取存储器1002,还可以包括非暂态存储器1002,例如至少一个储存设备存储器件、闪存器件或其他非暂态固态存储器件。在一些实施方式中,存储器1002可选包括相对于处理器1001远程设置的存储器1002,这些远程存储器1002可以通过网络连接至该电子设备1000。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
实现上述的数据实时校验方法所需的非暂态软件程序以及指令存储在存储器1002中,当被一个或者多个处理器1001执行时,执行上述的数据实时校验方法,例如,执行图1中的方法步骤S101至步骤S106、图3中的方法步骤S201至步骤S203、图5中的方法步骤S301至步骤S304、图8中的方法步骤S401至步骤S402、图9中的方法步骤S501至步骤S502、图10中的方法步骤S601至步骤S602。
本申请实施例还提供了一种存储介质,存储介质为计算机可读存储介质,该存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述数据实时校验方法。存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例提供的一种数据实时校验方法、装置、电子设备及存储介质,首先将请求操作空间进行扇区级别的划分,并为每个扇区配置状态机,通过设置多个校验点并在内存空间中对应存储各个扇区的工作状态与数据校验和等状态数据,由此在内存中进行记录和读取,有利于提高系统的性能,并且对各种错误情况都能准确检测,当响应于读写请求时,对应更新校验点的内存空间中的状态数据,并且在扇区的工作状态处于预设状态时,才进行数据校验,可以有效解决读写请求并发导致的数据误报问题,简化了编程逻辑,便于系统的维护,而且设置多个校验点可以实时校验数据,并在数据错误时快速定位对应的功能模块,保证了数据的准确性和完整性,适用于不同类型的存储系统和不同的数据存储方案,具有较强的通用性和灵活性。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、储存设备存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包括计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
还应了解,本申请实施例提供的各种实施方式可以任意进行组合,以实现不同的技术效果。以上是对本申请的较佳实施进行了具体说明,但本申请并不局限于上述实施方式,熟悉本领域的技术人员在不违背本申请精神的共享条件下还可作出种种等同的变形或替换。

Claims (10)

1.一种数据实时校验方法,应用于分布式存储系统,所述分布式存储系统的I/O路径上有多个功能模块,所述功能模块用于传输I/O请求,所述I/O请求包括写请求和读请求,其特征在于,所述方法包括:获取请求操作空间,并将所述请求操作空间划分为多个扇区;
为每个所述扇区配置状态机;其中,所述状态机用于根据状态转换图切换所述扇区的工作状态,所述工作状态有多个,不同的所述工作状态下对所述扇区有不同的操作;
针对多个所述功能模块设置校验点;所述校验点包括请求入口和请求出口;
为每个所述校验点划分一个内存空间;所述内存空间用于存储所述校验点的状态数据,所述状态数据包括各个所述扇区的所述工作状态和各个所述扇区的数据校验和;
响应于写请求,更新所述校验点的所述状态数据,包括:切换所述写请求对应的所述扇区的所述工作状态,在所述校验点的所述请求入口计算所述写请求中第一数据的第一校验和,并将所述第一校验和作为所述扇区的数据校验和存储至所述内存空间;
响应于读请求,切换所述读请求对应的所述扇区的所述工作状态,并当所述扇区的所述工作状态处于预设状态时,在所述校验点的所述请求出口计算所述读请求中第二数据的第二校验和;
当所述写请求的第一位置与所述读请求的第二位置相同时,基于所述内存空间获取所述数据校验和,对比所述数据校验和与所述第二校验和,以完成所述校验点处的数据校验;其中,所述写请求包括第一偏移信息和第一长度信息,所述读请求包括第二偏移信息和第二长度信息,所述第一位置由所述第一偏移信息和所述第一长度信息计算,所述第二位置由所述第二偏移信息和所述第二长度信息计算;
所述获取请求操作空间,并将所述请求操作空间划分为多个扇区,还包括:
将所述请求操作空间划分为多个第一预设大小的数据块;
将每个所述数据块划分为多个第二预设大小的所述扇区;所述第一预设大小大于所述第二预设大小;
所述为每个所述扇区配置状态机,包括:
根据哈希表,查找所述请求操作空间的数据结构;其中,所述哈希表记录了多个所述请求操作空间的所述数据结构,所述数据结构为数组或者链表;
基于所述数据结构,获取所述数据块的块信息;所述块信息包括块识别号、扇区数量值;
根据所述块信息,查找所述数据块中的各个所述扇区;
基于所述扇区的状态,设置所述扇区对应的工作状态,从而为所述扇区配置所述状态机。
2.根据权利要求1所述的数据实时校验方法,其特征在于,所述状态机包括以下工作状态:初始化状态、正在读状态、正在写状态和正常工作状态;
所述初始化状态表征所述扇区中的数据未被写过;
所述正在读状态表征所述扇区接收至少一个读请求,并响应至少一个所述读请求;
所述正在写状态表征所述扇区接收一个写请求,并响应所述写请求;
所述正常工作状态表征所述扇区未接收读请求和写请求,也未响应读请求和写请求。
3.根据权利要求2所述的数据实时校验方法,其特征在于,所述状态机还包括以下工作状态:混合读写状态和并发写状态;
所述混合读写状态表征所述扇区接收一个写请求和至少一个读请求,并响应所述写请求和至少一个所述读请求;
所述并发写状态表征所述扇区接收至少两个写请求,并响应至少两个所述写请求。
4.根据权利要求2所述的数据实时校验方法,其特征在于,所述为每个所述扇区配置状态机之前,还包括:
构建所述状态转换图,所述状态转换图用于指示所述扇区的所述工作状态之间的转移条件,所述状态转换图包括:
当所述扇区的所述工作状态为所述初始化状态,且所述扇区接收读请求,则将所述扇区的工作状态转换为所述正在读状态,且读计数增加一;
当所述扇区的所述工作状态为所述初始化状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为所述正在写状态,且写计数增加一;
当所述扇区的所述工作状态为所述正常工作状态,且所述扇区接收读请求,则将所述扇区的工作状态转换为所述正在读状态,且读计数增加一;
当所述扇区的所述工作状态为所述正常工作状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为所述正在写状态,且写计数增加一;
当所述扇区的所述工作状态为所述正在读状态,且读计数为零但所述扇区的数据校验和不为零时,则将所述扇区的工作状态转换为所述正常工作状态;
当所述扇区的所述工作状态为所述正在读状态,且读计数为零且所述扇区的数据校验和为零时,则将所述扇区的工作状态转换为所述初始化状态;
当所述扇区的所述工作状态为所述正在写状态,且写计数为零但所述扇区的数据校验和不为零时,则将所述扇区的工作状态转换为所述正常工作状态。
5.根据权利要求4所述的数据实时校验方法,其特征在于,所述状态转换图还包括:
当所述扇区的所述工作状态为所述正在读状态,且所述扇区接收写请求,则将所述扇区的工作状态转换成混合读写状态,且写计数增加一;
当所述扇区的所述工作状态为所述正在写状态,且所述扇区接收读请求,则将所述扇区的工作状态转换成混合读写状态,且读计数增加一;
当所述扇区的所述工作状态为所述正在写状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为并发写状态,且写计数增加一;
当所述扇区的所述工作状态为混合读写状态,且所述扇区接收写请求,则将所述扇区的工作状态转换为并发写状态,且写计数增加一;
当所述扇区的所述工作状态为并发写状态,且读计数为零和写计数为零时,则将所述扇区的工作状态转换为所述正常工作状态;
当所述扇区的所述工作状态为混合读写状态,且读计数为零和写计数为零时,则将所述扇区的工作状态转换为所述正常工作状态;
当所述扇区的所述工作状态为混合读写状态,且读计数为零但写计数不为零时,则将所述扇区的工作状态转换为所述正在写状态;
当所述扇区的所述工作状态为混合读写状态,且写计数为零但读计数不为零时,则将所述扇区的工作状态转换为所述正在读状态。
6.根据权利要求1所述的数据实时校验方法,其特征在于,所述请求入口包括写请求入口,所述请求出口包括写请求出口;所述状态数据还包括各个所述扇区的读写计数,所述读写计数包括写计数;所述响应于写请求,更新所述校验点的所述状态数据,还包括:
响应于接收写请求,在所述校验点的所述写请求入口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述写计数增一;
响应于完成写请求,在所述校验点的所述写请求出口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述写计数减一。
7.根据权利要求4所述的数据实时校验方法,其特征在于,所述请求入口包括读请求入口,所述请求出口包括读请求出口;所述状态数据还包括各个所述扇区的读写计数,所述读写计数包括读计数;所述响应于读请求,切换所述读请求对应的所述扇区的所述工作状态,并当所述扇区的所述工作状态处于预设状态时,在所述校验点的所述请求出口计算所述读请求中第二数据的第二校验和,包括:
响应于接收读请求,在所述校验点的所述读请求入口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数增一;
响应于完成读请求,在所述校验点的所述读请求出口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数减一;
响应于完成读请求,当所述状态机中所述扇区的所述工作状态处于所述正在读状态时,在所述校验点的所述读请求出口计算所述读请求中第二数据的第二校验和;
或者,
响应于接收读请求,在所述校验点的所述读请求入口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数增一;
响应于完成读请求,在所述校验点的所述读请求出口,在所述状态机中切换所述扇区的所述工作状态,且所述扇区的所述读计数减一;
响应于完成读请求,当所述状态机中所述扇区的所述工作状态处于所述正常工作状态时,在所述校验点的所述读请求出口计算所述读请求中第二数据的第二校验和。
8.一种数据实时校验装置,其特征在于,应用如权利要求1至7任一项所述的数据实时校验方法,包括:
扇区划分单元,用于获取请求操作空间,并将所述请求操作空间划分为多个扇区;
状态机配置单元,用于为每个所述扇区配置状态机;其中,所述状态机用于根据状态转换图切换所述扇区的工作状态,所述工作状态有多个,不同的所述工作状态下对所述扇区有不同的操作;
校验点设置单元,用于针对多个功能模块设置校验点;所述校验点包括请求入口和请求出口;
内存空间划分单元,用于为每个所述校验点划分一个内存空间;所述内存空间用于存储所述校验点的状态数据,所述状态数据包括各个所述扇区的所述工作状态和各个所述扇区的数据校验和;
第一响应单元,用于响应于写请求,更新所述校验点的所述状态数据,包括:切换所述写请求对应的所述扇区的所述工作状态,在所述校验点的所述请求入口计算所述写请求中第一数据的第一校验和,并将所述第一校验和作为所述扇区的数据校验和存储至所述内存空间;
第二响应单元,用于响应于读请求,切换所述读请求对应的所述扇区的所述工作状态,并当所述扇区的所述工作状态处于预设状态时,在所述校验点的所述请求出口计算所述读请求中第二数据的第二校验和;
校验和对比单元,用于当所述写请求的第一位置与所述读请求的第二位置相同时,基于所述内存空间获取所述数据校验和,对比所述数据校验和与所述第二校验和,以完成所述校验点处的数据校验;其中,所述写请求包括第一偏移信息和第一长度信息,所述读请求包括第二偏移信息和第二长度信息,所述第一位置由所述第一偏移信息和所述第一长度信息计算,所述第二位置由所述第二偏移信息和所述第二长度信息计算。
9.一种电子设备,其特征在于,包括存储器、处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的数据实时校验方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储有程序,所述程序被处理器执行实现如权利要求1至7中任一项所述的数据实时校验方法。
CN202310467506.2A 2023-04-27 2023-04-27 数据实时校验方法、装置、电子设备及存储介质 Active CN116225774B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310467506.2A CN116225774B (zh) 2023-04-27 2023-04-27 数据实时校验方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310467506.2A CN116225774B (zh) 2023-04-27 2023-04-27 数据实时校验方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN116225774A CN116225774A (zh) 2023-06-06
CN116225774B true CN116225774B (zh) 2023-08-15

Family

ID=86579037

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310467506.2A Active CN116225774B (zh) 2023-04-27 2023-04-27 数据实时校验方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116225774B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101387975A (zh) * 2008-10-20 2009-03-18 中科院成都信息技术有限公司 一种磁盘阵列系统
CN104731672A (zh) * 2013-12-24 2015-06-24 华为技术有限公司 数据存储的方法及设备
CN114356857A (zh) * 2021-12-23 2022-04-15 中国航空工业集团公司西安航空计算技术研究所 一种基于位图映射表机制的文件系统可靠性提升方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002351689A (ja) * 2001-05-30 2002-12-06 Nec Corp データ転送システム
TW539946B (en) * 2001-08-07 2003-07-01 Solid State System Company Ltd Window-based flash memory storage system, and the management method and the access method thereof

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101387975A (zh) * 2008-10-20 2009-03-18 中科院成都信息技术有限公司 一种磁盘阵列系统
CN104731672A (zh) * 2013-12-24 2015-06-24 华为技术有限公司 数据存储的方法及设备
CN114356857A (zh) * 2021-12-23 2022-04-15 中国航空工业集团公司西安航空计算技术研究所 一种基于位图映射表机制的文件系统可靠性提升方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SQL Server基于扇区的数据页IO一致性检测算法研究;李爱武;;广东技术师范学院学报(03);全文 *

Also Published As

Publication number Publication date
CN116225774A (zh) 2023-06-06

Similar Documents

Publication Publication Date Title
US11163472B2 (en) Method and system for managing storage system
CN106201338B (zh) 数据存储方法及装置
KR101758544B1 (ko) 비휘발성 메모리 시스템에서의 동기 미러링
CN105122213B (zh) 用于数据存储系统中的错误检测和纠正的方法和装置
US9430329B2 (en) Data integrity management in a data storage device
US7103811B2 (en) Mechanisms for detecting silent errors in streaming media devices
CN107807792A (zh) 一种基于副本存储系统的数据处理方法及相关装置
CN112597153B (zh) 一种基于区块链的数据存储方法、装置及存储介质
US20110106763A1 (en) Storage replication systems and methods
US7849258B2 (en) Storage apparatus and data verification method for the same
CN103874980A (zh) 存储系统中的映射
CN103164523A (zh) 数据一致性检查方法、装置及系统
US20240143188A1 (en) Data processing method and apparatus, device, and readable storage medium
US7849355B2 (en) Distributed object sharing system and method thereof
US6363457B1 (en) Method and system for non-disruptive addition and deletion of logical devices
CN106775481B (zh) 数据读取方法及设备
CN114924923A (zh) 一种硬盘写入点正确性验证方法、系统、设备及介质
US7577804B2 (en) Detecting data integrity
JP2005004753A (ja) データのバージョンチェックを行う方法及び装置
CN116225774B (zh) 数据实时校验方法、装置、电子设备及存储介质
CN117492661A (zh) 数据写入方法、介质、装置和计算设备
CN110955916A (zh) 一种数据完整性保护方法、系统及相关设备
CN112148220B (zh) 一种实现数据处理的方法、装置、计算机存储介质及终端
CN112286909B (zh) 执行状态确定方法、装置、服务器及存储介质
CN116868173A (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
GR01 Patent grant
GR01 Patent grant