CN112363697B - 数据校验方法、装置、设备及存储介质 - Google Patents
数据校验方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112363697B CN112363697B CN202011264117.2A CN202011264117A CN112363697B CN 112363697 B CN112363697 B CN 112363697B CN 202011264117 A CN202011264117 A CN 202011264117A CN 112363697 B CN112363697 B CN 112363697B
- Authority
- CN
- China
- Prior art keywords
- tracking
- node
- tree
- tracking tree
- tree 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提出一种数据校验方法、装置、设备及存储介质,通过第二设备对被追踪服务进行分布式链路追踪并生成第一追踪信息,进一步,第二设备将第一追踪信息发送给第一设备。在第一设备接收到第一追踪信息的情况下,第一设备根据该第一追踪信息,构建追踪树,该追踪树包括一个或多个追踪树节点,该一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息。进一步,第一设备可以对该追踪树中每个追踪树节点的数据信息进行数据校验,得到校验结果,使得分布式链路追踪在链路追踪的情况下可以进行数据校验。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据校验方法、装置、设备及存储介质。
背景技术
随着越来越多的软件项目因系统组件水平扩展、敏捷开发、持续集成、解耦等各种需求而转向微服务架构,使得微服务极大地改变了软件的开发和交付模式。
在微服务架构的情况下,单体应用可以被拆分为多个微服务,单个微服务的复杂度可以大幅降低。另外,存储有调用函数的库之间的依赖也转变为微服务之间的依赖。由此带来的问题是由于微服务部署的粒度越来越细,导致众多微服务给运维带来巨大的压力。此外,随着微服务数量的增多和内部调用链的复杂化,导致开发者很难较为全面的进行问题排查或性能分析。而分布式链路追踪能够帮助开发者直观分析请求链路、快速定位性能瓶颈、以及逐渐优化微服务之间的依赖,同时还可以有助于开发者从更宏观的角度更好地理解整个分布式系统。分布式链路追踪具体可以是将一次分布式请求还原成调用链路、以及将一次分布式请求的调用情况进行集中展示。其中,调用情况可以包括各个微服务节点处理该分布式请求所需的耗时、该分布式请求具体到达哪台机器上、每个微服务节点的请求状态等。
虽然分布式链路追踪发展极为迅速,功能也愈发强大,但是仍存在一些不足。例如,在分布式存储领域中,数据校验是必不可少的一个环节。但是,分布式链路追踪尚不支持在链路追踪的情况下进行数据校验。
发明内容
本申请实施例提供一种数据校验方法、装置、设备及存储介质,以解决相关技术存在的问题,技术方案如下:
第一方面,本申请实施例提供了一种数据校验方法,包括:
第一设备接收第二设备发送的第一追踪信息,该第一追踪信息是该第二设备在对被追踪服务进行分布式链路追踪的情况下生成的;
该第一设备根据该第一追踪信息,构建追踪树,该追踪树包括一个或多个追踪树节点,该一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息;
该第一设备根据该追踪树进行数据校验,得到校验结果。
在一种实施方式中,该第一追踪信息包括主追踪标识符、该被追踪服务中第一追踪步骤对应的第一追踪标识符、该被追踪服务中第二追踪步骤对应的第二追踪标识符,该第二追踪步骤是该第一追踪步骤的上一步骤。
在一种实施方式中,该第二追踪信息包括追踪步骤类型、该主追踪标识符、该追踪树节点对应的追踪步骤的追踪标识符。
在一种实施方式中,该第一设备根据该第一追踪信息,构建追踪树,包括:
该第一设备根据该第一追踪标识符,确定该第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符;
在该第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,该第一设备获取该第一追踪标识符对应的未知类型的追踪树节点;
该第一设备根据该第一追踪步骤的类型信息,修改该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,得到修改后的追踪树节点;
该第一设备将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中。
在一种实施方式中,该方法还包括:
在该第一追踪标识符不是未知类型的追踪树节点包括的追踪标识符的情况下,该第一设备根据该第一追踪信息生成追踪树节点;
该第一设备将该追踪树节点插入到该主追踪标识符对应的追踪树中。
在一种实施方式中,该第一设备将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中之后或者该第一设备将该追踪树节点插入到该主追踪标识符对应的追踪树中之后,该方法还包括:
该第一设备根据该追踪树节点对应的追踪步骤类型,确定该追踪树节点对应的追踪步骤是否为起始步骤;
在该追踪树节点对应的追踪步骤为起始步骤的情况下,该第一设备确定该追踪树节点是否属于该追踪树的上半棵树;
在该追踪树节点属于该追踪树的上半棵树的情况下,该第一设备更新该追踪树中需要进行子节点数目校验的追踪树节点的数目。
在一种实施方式中,该方法还包括:
在该追踪树节点不属于该追踪树的上半棵树的情况下,该第一设备确定该追踪树节点的所有子节点是否已存在;
在该追踪树节点的所有子节点已存在的情况下,该第一设备更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
在一种实施方式中,该方法还包括:
在该追踪树节点对应的追踪步骤不为起始步骤的情况下,该第一设备确定该追踪树节点的父节点是否已存在;
在该追踪树节点的父节点已存在的情况下,该第一设备更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
在一种实施方式中,该方法还包括:
在该追踪树节点的父节点不存在的情况下,该第一设备将该追踪树节点的父节点记录为未知类型的追踪树节点;
该第一设备更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
在一种实施方式中,该第一设备更新该追踪树节点和该追踪树节点的父节点之间的关联信息之后,该方法还包括:
该第一设备确定该追踪树节点的父节点的所有子节点是否已存在;
在该追踪树节点的父节点的所有子节点已存在的情况下,该第一设备更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
在一种实施方式中,该第一设备根据该第一追踪信息,构建追踪树之后,该方法还包括:
该第一设备针对该追踪树中的每个追踪树节点,确定该追踪树节点中是否存储有数据块;
在该追踪树节点中存储有数据块的情况下,该第一设备确定该追踪树节点是否为该追踪树的根节点;
在该追踪树节点是该追踪树的根节点的情况下,该第一设备将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
在一种实施方式中,该方法还包括:
在该追踪树节点不是该追踪树的根节点的情况下,该第一设备确定从该追踪树节点到该追踪树的根节点的路径是否完整;
在从该追踪树节点到该追踪树的根节点的路径完整的情况下,该第一设备获取从该追踪树节点的对称节点到该根节点的路径中包括的其他追踪树节点中的数据块偏移量;
该第一设备对该其他追踪树节点中的数据块偏移量进行累加,得到累加偏移量;
该第一设备根据该累加偏移量,将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
在一种实施方式中,该方法还包括:
在该追踪树节点中没有存储数据块的情况下,该第一设备确定该追踪树节点是否属于该追踪树的上半棵树;
在该追踪树节点属于该追踪树的上半棵树的情况下,该第一设备确定从该追踪树节点到该追踪树的根节点的路径是否完整;
在从该追踪树节点到该追踪树的根节点的路径完整的情况下,该第一设备确定从该追踪树节点到该追踪树的叶子节点的路径中是否存在存储有数据块的其他追踪树节点;
在从该追踪树节点到该追踪树的叶子节点的路径中存在存储有数据块的其他追踪树节点的情况下,该第一设备将该其他追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
在一种实施方式中,该第一设备根据该第一追踪信息,构建追踪树之后,该方法还包括:
该第一设备确定该追踪树是否完整。
在一种实施方式中,该第一设备确定该追踪树是否完整,包括:
该第一设备确定未知类型的追踪树节点是否为空;
在该未知类型的追踪树节点不为空的情况下,该第一设备确定该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目是否相等;
在该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目相等的情况下,该第一设备确定该追踪树中的每个追踪树节点是否存在与其对称的追踪树节点;
在该追踪树中的每个追踪树节点存在与其对称的追踪树节点的情况下,该第一设备确定该追踪树是完整的。
在一种实施方式中,该数据信息包括:数据块偏移量和数据块长度;
该第一设备根据该追踪树进行数据校验,得到校验结果,包括:
该第一设备针对该追踪树中的每个追踪树节点,根据该追踪树节点包括的数据块偏移量和数据块长度,获取该追踪树节点对应的数据块;
该第一设备计算该追踪树节点对应的数据块的校验信息;
该第一设备通过比较该计算得到的该校验信息和该数据块的原始校验信息,得到该追踪树节点的校验结果。
在一种实施方式中,该第一设备通过比较该计算得到的该校验信息和该数据块的原始校验信息,得到该追踪树节点的校验结果,包括:
在该计算得到的该校验信息和该数据块的原始校验信息不一致的情况下,该第一设备确定该追踪树节点发生校验错误。
在一种实施方式中,该第一设备根据该追踪树进行数据校验,得到校验结果之后,该方法还包括:
该第一设备根据该校验结果定位该追踪树中发生校验错误的追踪树节点。
第二方面,本申请实施例提供了一种数据校验装置,该装置包括:
接收模块,用于接收第二设备发送的第一追踪信息,该第一追踪信息是该第二设备在对被追踪服务进行分布式链路追踪的情况下生成的;
构建模块,用于根据该第一追踪信息,构建追踪树,该追踪树包括一个或多个追踪树节点,该一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息;
数据校验模块,用于根据该追踪树进行数据校验,得到校验结果。
在一种实施方式中,该第一追踪信息包括主追踪标识符、该被追踪服务中第一追踪步骤对应的第一追踪标识符、该被追踪服务中第二追踪步骤对应的第二追踪标识符,该第二追踪步骤是该第一追踪步骤的上一步骤。
在一种实施方式中,该第二追踪信息包括追踪步骤类型、该主追踪标识符、该追踪树节点对应的追踪步骤的追踪标识符。
在一种实施方式中,构建模块具体用于:
根据该第一追踪标识符,确定该第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符;
在该第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,获取该第一追踪标识符对应的未知类型的追踪树节点;
根据该第一追踪步骤的类型信息,修改该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,得到修改后的追踪树节点;
将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中。
在一种实施方式中,构建模块具体用于:
在该第一追踪标识符不是未知类型的追踪树节点包括的追踪标识符的情况下,根据该第一追踪信息生成追踪树节点;
将该追踪树节点插入到该主追踪标识符对应的追踪树中。
在一种实施方式中,该装置还包括:确定模块和更新模块,确定模块用于在构建模块将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中之后或者将该追踪树节点插入到该主追踪标识符对应的追踪树中之后,根据该追踪树节点对应的追踪步骤类型,确定该追踪树节点对应的追踪步骤是否为起始步骤;在该追踪树节点对应的追踪步骤为起始步骤的情况下,确定该追踪树节点是否属于该追踪树的上半棵树;更新模块用于在该追踪树节点属于该追踪树的上半棵树的情况下,更新该追踪树中需要进行子节点数目校验的追踪树节点的数目。
在一种实施方式中,确定模块还用于:在该追踪树节点不属于该追踪树的上半棵树的情况下,确定该追踪树节点的所有子节点是否已存在;更新模块还用于在该追踪树节点的所有子节点已存在的情况下,更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
在一种实施方式中,确定模块还用于:在该追踪树节点对应的追踪步骤不为起始步骤的情况下,确定该追踪树节点的父节点是否已存在;更新模块还用于在该追踪树节点的父节点已存在的情况下,更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
在一种实施方式中,该装置还包括:记录模块,用于在该追踪树节点的父节点不存在的情况下,将该追踪树节点的父节点记录为未知类型的追踪树节点;更新模块还用于更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
在一种实施方式中,确定模块还用于:在更新模块更新该追踪树节点和该追踪树节点的父节点之间的关联信息之后,确定该追踪树节点的父节点的所有子节点是否已存在;确定模块还用于:在该追踪树节点的父节点的所有子节点已存在的情况下,更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
在一种实施方式中,该装置还包括:存储模块。确定模块还用于:在构建模块根据该第一追踪信息,构建追踪树之后,针对该追踪树中的每个追踪树节点,确定该追踪树节点中是否存储有数据块;在该追踪树节点中存储有数据块的情况下,确定该追踪树节点是否为该追踪树的根节点;存储模块用于在该追踪树节点是该追踪树的根节点的情况下,将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
在一种实施方式中,该装置还包括:获取模块和计算模块。确定模块还用于:在该追踪树节点不是该追踪树的根节点的情况下,确定从该追踪树节点到该追踪树的根节点的路径是否完整;获取模块用于在从该追踪树节点到该追踪树的根节点的路径完整的情况下,获取从该追踪树节点的对称节点到该根节点的路径中包括的其他追踪树节点中的数据块偏移量;计算模块用于对该其他追踪树节点中的数据块偏移量进行累加,得到累加偏移量;存储模块还用于根据该累加偏移量,将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
在一种实施方式中,确定模块还用于:在该追踪树节点中没有存储数据块的情况下,确定该追踪树节点是否属于该追踪树的上半棵树;在该追踪树节点属于该追踪树的上半棵树的情况下,确定从该追踪树节点到该追踪树的根节点的路径是否完整;在从该追踪树节点到该追踪树的根节点的路径完整的情况下,确定从该追踪树节点到该追踪树的叶子节点的路径中是否存在存储有数据块的其他追踪树节点;存储模块还用于:在从该追踪树节点到该追踪树的叶子节点的路径中存在存储有数据块的其他追踪树节点的情况下,将该其他追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
在一种实施方式中,确定模块还用于:在构建模块根据该第一追踪信息,构建追踪树之后,确定该追踪树是否完整。
在一种实施方式中,确定模块具体用于:确定未知类型的追踪树节点是否为空;在该未知类型的追踪树节点不为空的情况下,确定该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目是否相等;在该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目相等的情况下,确定该追踪树中的每个追踪树节点是否存在与其对称的追踪树节点;在该追踪树中的每个追踪树节点存在与其对称的追踪树节点的情况下,确定该追踪树是完整的。
在一种实施方式中,该数据信息包括:数据块偏移量和数据块长度;数据校验模块具体用于:针对该追踪树中的每个追踪树节点,根据该追踪树节点包括的数据块偏移量和数据块长度,获取该追踪树节点对应的数据块;计算该追踪树节点对应的数据块的校验信息;通过比较该计算得到的该校验信息和该数据块的原始校验信息,得到该追踪树节点的校验结果。
在一种实施方式中,数据校验模块具体用于:在该计算得到的该校验信息和该数据块的原始校验信息不一致的情况下,该第一设备确定该追踪树节点发生校验错误。
在一种实施方式中,确定模块还用于:数据校验模块根据该追踪树进行数据校验,得到校验结果之后,根据该校验结果定位该追踪树中发生校验错误的追踪树节点。
第三方面,本申请实施例提供了一种数据校验设备,该设备包括:存储器和处理器。其中,该存储器和该处理器通过内部连接通路互相通信,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,并且当该处理器执行该存储器存储的指令时,使得该处理器执行上述各方面任一种实施方式中的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储计算机程序,当计算机程序在计算机上运行时,上述各方面任一种实施方式中的方法被执行。
上述技术方案中的优点或有益效果至少包括:通过第二设备对被追踪服务进行分布式链路追踪并生成第一追踪信息,进一步,第二设备将第一追踪信息发送给第一设备。在第一设备接收到第一追踪信息的情况下,第一设备根据该第一追踪信息,构建追踪树,该追踪树包括一个或多个追踪树节点,该一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息。进一步,第一设备可以对该追踪树中每个追踪树节点的数据信息进行数据校验,得到校验结果,使得分布式链路追踪在链路追踪的情况下可以进行数据校验。
上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本申请进一步的方面、实施方式和特征将会是容易明白的。
附图说明
在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本申请公开的一些实施方式,而不应将其视为是对本申请范围的限制。
图1为本申请一实施例的数据校验方法的流程图;
图2为本申请一实施例的应用场景的示意图;
图3为本申请一实施例的追踪树节点的数据结构的示意图;
图4为本申请另一实施例的数据校验方法的流程图;
图5为本申请另一实施例的追踪树表的数据结构的示意图;
图6为本申请一实施例的基本树形的示意图;
图7为本申请另一实施例的数据校验方法的流程图;
图8为本申请另一实施例的数据校验方法的流程图;
图9为本申请另一实施例的数据校验方法的流程图;
图10为本申请另一实施例的数据校验方法的流程图;
图11为本申请另一实施例的追踪树节点的数据结构的示意图;
图12为本申请另一实施例的数据校验方法的流程图;
图13为本申请另一实施例的数据校验方法的流程图;
图14为本申请一实施例的数据校验装置的结构示意图;
图15为本申请一实施例的数据校验设备的结构示意图。
具体实施方式
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本申请的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
随着越来越多的软件项目因系统组件水平扩展、敏捷开发、持续集成、解耦等各种需求而转向微服务架构,使得微服务极大地改变了软件的开发和交付模式。在微服务架构的情况下,单体应用可以被拆分为多个微服务,单个微服务的复杂度可以大幅降低。另外,存储有调用函数的库之间的依赖也转变为微服务之间的依赖。由此带来的问题是由于微服务部署的粒度越来越细,导致众多微服务给运维带来巨大的压力。此外,随着微服务数量的增多和内部调用链的复杂化,导致开发者很难较为全面的进行问题排查或性能分析。而分布式链路追踪能够帮助开发者直观分析请求链路、快速定位性能瓶颈、以及逐渐优化微服务之间的依赖,同时还可以有助于开发者从更宏观的角度更好地理解整个分布式系统。其中,分布式链路追踪也叫分布式链路跟踪、分布式跟踪、分布式追踪等。分布式链路追踪具体可以是将一次分布式请求还原成调用链路、以及将一次分布式请求的调用情况进行集中展示。其中,调用情况可以包括各个微服务节点处理该分布式请求所需的耗时、该分布式请求具体到达哪台机器上、每个微服务节点的请求状态等。
为了实现分布式链路追踪,大规模分布式系统的跟踪系统(Dapper)阐述了微服务架构中链路追踪的概念、数据表示、埋点、传递、收集、存储与展示等技术细节。
虽然分布式链路追踪发展极为迅速,功能也愈发强大,但是仍存在一些不足。例如,在分布式存储领域中,数据校验是必不可少的一个环节。但是,分布式链路追踪尚不支持在链路追踪的情况下进行数据校验。
默克尔树(Merkle Tree)虽然可以广泛应用于分布式数据校验,但其数据结构并不适用于链路追踪。在分布式系统中,Merkle Tree是一种数据校验的常用手段。MerkleTree看起来非常像二叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值,所以有时候Merkle Tree也表示为哈希树(Hash Tree)。
在构造Merkle Tree的过程中,首先计算数据块的哈希值,通常选用安全散列算法256(Secure Hash Algorithm 256,SHA-256)等哈希算法。但如果仅仅防止数据块被蓄意损坏或篡改,可以改用一些安全性低但效率高的校验和算法,例如循环冗余校验(CyclicRedundancy Check,CRC)。然后将数据块的哈希值进行两两配对。进一步,计算Merkle Tree中上一层节点的哈希值,以此类推,直到计算出Merkle Tree中根节点的哈希值。
Merkle Tree还可以用于进行完整性验证。例如在分布式环境下,从多台主机获取数据的过程中,通过验证不同Merkle Tree的根节点的哈希值是否一致,即可验证获取的数据是否正确。因为,在Merkle Tree底层的数据块发生变化的情况下,可能会导致MerkleTree的根节点的哈希值也随之发生变化。因此,在不同Merkle Tree的根节点的哈希值不一致的情况下,通过Merkle Tree可以快速定位到发生变化的数据块。
此外,Merkle Tree还可以用于对数据进行快速比对,从而可以快速定位到不一致的数据。例如在分布式存储中,一份数据会有多个副本,多个副本可能分布在不同的机器上。为了保证数据的一致性,需要进行副本同步。因此,需要比对当前副本是否一致,如果一致,则无需同步,如果不一致,还需找出不一致的地方,然后进行同步。可以理解的是,如果采用直接传输数据的方法进行数据的一致性比对,则可能导致比对效率较低。为了提高效率,可以计算数据的哈希值,通过传输哈希值的方法进行数据的一致性比对。因此,可以针对每台机器中需要进行一致性比对的数据构造Merkle Tree,如果不同Merkle Tree 的根节点的哈希值相同,则说明每台机器中的数据是一致的。如果不同Merkle Tree的根节点的哈希值不同,则说明每台机器中的数据是不一致的,进一步还可以通过Merkle Tree快速检索到不一致的数据。
Merkle Tree虽然可以广泛应用于分布式数据校验,但其数据结构并不适用于链路追踪,而分布式链路追踪尚不支持在链路追踪的情况下进行数据校验。为了解决该问题,本申请实施例提供了一种数据校验方法。下面结合具体的实施例对本申请实施例提供的一种数据校验方法进行详细介绍。
图1示出根据本申请一实施例的数据校验方法的流程图。如图1所示,该方法可以包括:
S101、第一设备接收第二设备发送的第一追踪信息,该第一追踪信息是该第二设备在对被追踪服务进行分布式链路追踪的情况下生成的。
本公开实施例所述的数据校验方法可以适用于图2所示的应用场景。该应用场景中包括服务A、服务B、追踪服务代理层、分布式追踪服务。其中,服务A、服务B是被追踪服务。服务A包括服务A的业务代码和接口。服务B 包括服务B的业务代码和接口。服务A和服务B可以通过接口进行通信。可以理解的是,被追踪服务并不限于服务A和服务B,例如还包括其他服务,此处以服务A和服务B为例进行示意性说明。服务A和服务B可以分别部署在不同的机器或设备中,或者可以部署在同一个机器或设备中。另外,追踪服务代理层和被追踪服务可以部署在同一个机器或设备中,也可以分别部署在不同的机器或设备中。此外,追踪服务代理层和分布式追踪服务可以部署在同一个机器或设备中,也可以分别部署在不同的机器或设备中。
在本实施例中,部署有分布式追踪服务的机器或设备记为第一设备,或者分布式追踪服务可记为第一设备。部署有追踪服务代理层的机器或设备记为第二设备,或者追踪服务代理层可记为第二设备。
本实施例以第一设备为分布式追踪服务、第二设备为追踪服务代理层为例进行示意性说明。
具体的,追踪服务代理层可以对被追踪服务进行分布式链路追踪。例如图 2所示,追踪服务代理层是被追踪服务和分布式追踪服务之间的中间层。追踪服务代理层可以与分布式追踪服务进行通信。追踪服务代理层可以对服务A进行分布式链路追踪并生成第一追踪信息。追踪服务代理层可以对服务B进行分布式链路追踪并生成第一追踪信息。进一步,追踪服务代理层可以将该第一追踪信息发送给分布式追踪服务。可以理解的是,对服务A进行分布式链路追踪的追踪服务代理层和对服务B进行分布式链路追踪的追踪服务代理层可以是同一个追踪服务代理层,也可以不同的追踪服务代理层。也就是说,同一个追踪服务代理层可以对一个被追踪服务进行分布式链路追踪,也可以对多个被追踪服务分别进行分布式链路追踪。
可选的,该第一追踪信息包括主追踪标识符、该被追踪服务中第一追踪步骤对应的第一追踪标识符、该被追踪服务中第二追踪步骤对应的第二追踪标识符,该第二追踪步骤是该第一追踪步骤的上一步骤。
例如,以服务A为例,服务A中可以运行有工作流程或该工作流程中的一个或多个步骤。该工作流程或该工作流程中的一个或多个步骤中包括一个或多个需要被追踪的步骤,其中,需要被追踪的步骤可以记为追踪步骤。具体的,在服务A包括多个追踪步骤的情况下,追踪服务代理层可以在对该服务A中的每个追踪步骤分别进行分布式链路追踪的过程中生成每个追踪步骤分别对应的第一追踪信息。进一步,追踪服务代理层可以将服务A中不同追踪步骤对应的第一追踪信息分别或同时发送给分布式追踪服务。该第一追踪信息包括主追踪标识符、服务A中第一追踪步骤对应的第一追踪标识符、服务A中第二追踪步骤对应的第二追踪标识符。其中,该第二追踪步骤是该第一追踪步骤的上一步骤。例如,第一追踪步骤可以是服务A中当前被追踪的步骤。第二追踪步骤是当前被追踪的步骤的上一步骤。
同理,服务B也可以包括一个或多个追踪步骤。在服务B包括多个追踪步骤的情况下,追踪服务代理层可以在对该服务B中的每个追踪步骤分别进行分布式链路追踪的过程中生成每个追踪步骤分别对应的第一追踪信息。进一步,追踪服务代理层可以将服务B中不同追踪步骤对应的第一追踪信息分别或同时发送给分布式追踪服务。该第一追踪信息包括主追踪标识符、服务B中当前被追踪的第一追踪步骤对应的第一追踪标识符、服务B中第二追踪步骤对应的第二追踪标识符。其中,该第二追踪步骤是该第一追踪步骤的上一步骤。在本公开实施例中,主追踪标识符是每个追踪树的唯一标识,主追踪标识符由追踪服务代理层生成。主追踪标识符可以记为链路标识(Trace ID)。其中,Trace 表示链路,Trace具体可以是一个请求经过后端所有服务的路径,每一条链路可以用一个全局唯一的链路标识(Trace ID)进行标识。一个Trace代表一个工作流程(Workflow)的完整链路追踪信息。第一追踪标识符可以记为跟踪数据标识 (Span ID)。第二追踪标识符可以记为父节点的追踪标识符(Parent ID)。
具体的,一个跟踪数据(Span)表示一个Trace中的一个关键步骤,用来描述一个业务处理过程,一个Trace由无数个Span有序链接而成。Span ID表示每一个Span的标识(Identity,ID),Span ID在一个Trace中全局唯一,用于定位Span在Trace中的位置。
具体的,Span之间存在着父子关系,上游的span是下游的父span。一个 span一般由客户端(client)和服务端(server)两个部分的信息组成。按照时间顺序来解释,client节点(或者是调用方)首先发出请求,client节点产生" 客户端发送(client send,cs)"事件。在server节点(或者是提供方)收到该请求的情况下,server节点产生"服务端接收(server receive,sr)"事件,server 节点处理完该请求之后向client节点发送回复信息,并产生"服务端发送(server send,ss)"事件。在client节点收到该回复信息的情况下,产生"客户端接收(client receive,cr)"事件。client节点与server节点两个节点的span信息合并成一次完整的调用,即一个完整的span。
通常情况下,链路信息的还原依赖于两种数据,一种数据是各个节点产生的事件,例如cs、ss等事件,这些事件可以称之为带外数据,带外数据可以由节点独立生成,并且需要集中上报到存储端。另一种数据是如上所述的Trace ID、 Span ID等数据,这些数据需要从链路的起点一直传递到终点,这些数据可以称之为带内数据。通过带内数据的传递,可以将一个链路的所有过程串起来;通过带外数据,可以在存储端中分析更多链路的细节。
由于每一个请求可以生成一个链路,为了减少性能消耗,避免存储资源的浪费,Dapper并不会上报所有的span数据,而是使用采样的方式。通过采样端自适应地调整采样率,控制span上报的数量,可以在发现性能瓶颈的同时,有效减少性能损耗。采样率的概念在其他的追踪系统中也被广泛使用。
另外,在本实施例中,如图2所示的追踪服务代理层还可以缓存跟踪数据、对跟踪数据进行编码、以及处理跟踪数据的上下文信息。
具体的,追踪服务代理层对服务A或服务B中的一个或多个追踪步骤进行分布式链路追踪并生成第一追踪信息,也就是说,一个第一追踪信息可以与一个追踪步骤对应,或者,一个第一追踪信息可以与多个追踪步骤对应。进一步,追踪服务代理层可以将第一追踪信息发送给分布式追踪服务。
S102、该第一设备根据该第一追踪信息,构建追踪树,该追踪树包括一个或多个追踪树节点,该一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息。
例如,在分布式追踪服务接收到第一追踪信息的情况下,可以根据该第一追踪信息构建追踪树。具体的,分布式追踪服务可以根据第一追踪信息生成追踪树节点,进一步根据追踪树节点构建追踪树。其中,一个第一追踪信息可用于生成一个追踪树节点,也就是说,不同的第一追踪信息可用于生成不同的追踪树节点。该追踪树包括一个或多个追踪树节点。如图3所示为本实施例所述的追踪树节点的数据结构的示意图。如图3所示,每个追踪树节点包括数据信息和第二追踪信息。其中,数据信息包括偏移量和数据块。该数据块可以是该追踪树节点对应的追踪步骤或被追踪服务所处理的数据块。具体的,不同的追踪步骤可用于处理不同的数据块,或者不同的被追踪服务用于处理不同的数据块。数据信息中的偏移量可以是该数据块相对于完整数据的偏移量。该完整数据可以是整个工作流程需要处理的数据。该完整数据可以被划分为多个数据块。该工作流程可以包括多个追踪步骤,不同的追踪步骤用于处理不同的数据块。
可选的,该第二追踪信息包括追踪步骤类型、该主追踪标识符、该追踪树节点对应的追踪步骤的追踪标识符。
S103、该第一设备根据该追踪树进行数据校验,得到校验结果。
例如,第一追踪信息还可以包括如图3所示的数据信息和原始校验值。在分布式追踪服务根据第一追踪信息生成追踪树节点,并根据追踪树节点构建追踪树之后,分布式追踪服务可以根据该追踪树进行数据校验,得到校验结果。具体的,分布式追踪服务可以遍历该追踪树中的每个追踪树节点,对每个追踪树节点中的数据块进行数据校验,得到每个追踪树节点的校验结果。
下面以一个追踪树节点为例,介绍相应的校验过程。具体的,分布式追踪服务可以计算该追踪树节点中数据块的校验信息。进一步,比较计算得到的校验信息和该追踪树节点中的原始校验值。在计算得到的校验信息和该追踪树节点中的原始校验值一致的情况下,可以确定追踪树节点中的数据块未发生变化。在计算得到的校验信息和该追踪树节点中的原始校验值不一致的情况下,可以确定追踪树节点中的数据块发生变化,并且该追踪树节点发生校验错误。
本申请实施例通过第二设备对被追踪服务进行分布式链路追踪并生成第一追踪信息,进一步,第二设备将第一追踪信息发送给第一设备。在第一设备接收到第一追踪信息的情况下,第一设备根据该第一追踪信息,构建追踪树,该追踪树包括一个或多个追踪树节点,该一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息。进一步,第一设备可以对该追踪树中每个追踪树节点的数据信息进行数据校验,得到校验结果,使得分布式链路追踪在链路追踪的情况下可以进行数据校验。
在上述实施例中,该第一设备根据该第一追踪信息,构建追踪树,包括如图4所示的如下几个步骤:
S401、该第一设备根据该第一追踪标识符,确定该第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符。
在本公开实施例中,追踪树可以按照图5所示的追踪树表的数据结构存储在分布式追踪服务中。如图5所示,该追踪树表可以是一个哈希表,该追踪树表的键(key)是主追踪标识符,该追踪树表的值(value)是追踪树。追踪树包括如下几个部分:需要进行子节点数目校验的追踪树节点的数目、已经完成子节点数目校验的追踪树节点的数目、未知类型的追踪树节点、追踪树节点表。
其中,需要进行子节点数目校验的追踪树节点的数目用于记录需进行子节点数目校验的追踪树节点的总数。进行子节点数目校验的过程可以理解为确定追踪树节点的所有子节点是否已存储在分布式追踪服务中,即确定分布式追踪服务是否已经集齐追踪树节点的所有子节点。通常情况下,追踪树的上半棵树中的追踪树节点需要进行子节点数目校验。
已经完成子节点数目校验的追踪树节点的数目用于记录已完成子节点数目校验的追踪树节点的总数。其中,子节点数目校验可以根据每个追踪树节点中的数据信息来判断每个追踪树节点是否已经链接了所有子节点。
未知类型的追踪树节点为一个哈希表,该哈希表的键为追踪标识符,值为追踪树节点。由于系统是分布式的,从而导致分布式追踪服务接收到的节点顺序可能与实际的顺序不符。在分布式追踪服务接收到一个节点的情况下,该节点的父节点可能还未到达分布式追踪服务。为了提高性能,本实施例采用未知类型的追踪树节点来缓存该节点的父节点,并在该节点的父节点中记录与子节点的连接信息,也就是说,可以提前建立父子节点的联系,从而避免在父节点真正到达时产生不必要的性能消耗。因此,未知类型的追踪树节点用于缓存暂未到达的追踪树节点。
追踪树节点表为一个哈希表,该追踪树节点表的键为追踪步骤类型,该追踪树节点表的值也是一个哈希表,该哈希表的键为追踪标识符,该哈希表的值为追踪树节点。该追踪树节点表用于构造和存储追踪树。由于追踪树节点表采用了特殊的数据结构,因此可以加快追踪树的构造与数据校验的过程。
例如,在分布式追踪服务接收到第一追踪信息的情况下,可以根据该第一追踪信息中的第一追踪标识符,确定该第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符。
S402、在该第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,该第一设备获取该第一追踪标识符对应的未知类型的追踪树节点。
在该第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,分布式追踪服务可以获取包括该第一追踪标识符的未知类型的追踪树节点即该第一追踪标识符对应的未知类型的追踪树节点。
S403、该第一设备根据该第一追踪步骤的类型信息,修改该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,得到修改后的追踪树节点。
可选的,第一追踪信息中还可以包括第一追踪步骤的类型信息。进一步,分布式追踪服务可以根据该第一追踪步骤的类型信息,修改该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,使得该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型为该第一追踪步骤的类型信息,从而得到修改后的追踪树节点。
S404、该第一设备将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中。
进一步,分布式追踪服务可以将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中。
S405、在该第一追踪标识符不是未知类型的追踪树节点包括的追踪标识符的情况下,该第一设备根据该第一追踪信息生成追踪树节点。
例如,在该第一追踪标识符不是未知类型的追踪树节点包括的追踪标识符的情况下,分布式追踪服务可以根据该第一追踪信息生成追踪树节点。
S406、该第一设备将该追踪树节点插入到该主追踪标识符对应的追踪树中。
例如,分布式追踪服务可以将该追踪树节点插入到该主追踪标识符对应的追踪树中。
在本公开实施例中,分布式追踪服务可以根据如图6所示的基本树形生成追踪树。该追踪树也可以称为校验树。该基本树形可以是根据实际业务中的追踪步骤类型组成的。该基本树形可用于描述追踪步骤之间的关系。追踪服务代理层可以根据该基本树形过滤和构造跟踪数据。在该基本树形中同一行的节点可以对应同一追踪步骤类型。本实施例中需要进行校验的业务包括上传和下载,其中,上传具体可以是将一个大的数据块分割成多个小数据块,并将多个小数据块分散到不同位置的过程。下载具体可以是从不同位置将多个小数据块聚合成一个大数据块并取回的过程。例如,在图6中,节点A进行上传的过程中,可以将一个大的数据块分割成多个小数据块,多个小数据块可以分散到节点B 和节点C。节点B和节点C进一步将多个小数据块分散到节点D、节点E、节点F、节点G。节点D进一步可以将小数据块通过节点H和节点I分散到节点 J和节点K。节点E进一步可以将小数据块分散到节点M。节点F进一步可以将小数据块分散到节点N。节点G进一步可以将小数据块分散到节点O。也就是说,由节点A分割成的多个小数据块最终可以分散到节点J、节点K、节点 M、节点N、节点O。在节点R进行下载的过程中,来自节点J、节点K、节点M、节点N、节点O的多个小数据块可以聚合成一个大的数据块,从而使得节点R可以获取到该大的数据块。本实施例为了提高效率,可以结合分布式存储的业务特点对该基本树形做如下几方面的限定:
1)该基本树形的深度n为偶数。
2)深度小于等于n/2的的节点数等于深度大于n/2的节点数。
3)该基本树形中的每个节点都有唯一一个与之对称的节点。例如,节点A 的对称节点为节点R,节点H的对称节点为节点J,以此类推,也就是说,该基本树形中的节点是上下对称的。
本申请实施例通过第一设备根据该第一追踪标识符,确定该第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符,在该第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,该第一设备获取该第一追踪标识符对应的未知类型的追踪树节点,并根据该第一追踪步骤的类型信息,修改该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,得到修改后的追踪树节点,将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中。在该第一追踪标识符不是未知类型的追踪树节点包括的追踪标识符的情况下,该第一设备根据该第一追踪信息生成追踪树节点,将该追踪树节点插入到该主追踪标识符对应的追踪树中。通过未知类型的追踪树节点缓存暂未到达的追踪树节点,可以提前建立父子节点的联系,从而避免在父节点真正到达时产生不必要的性能消耗,提高了系统性能。
在图4的基础上,该第一设备将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中之后或者该第一设备将该追踪树节点插入到该主追踪标识符对应的追踪树中之后,该方法还包括如图7所示的如下几个步骤:
S701、该第一设备根据该追踪树节点对应的追踪步骤类型,确定该追踪树节点对应的追踪步骤是否为起始步骤。
具体的,本实施例中的该追踪树节点具体可以是插入到追踪树中的由分布式追踪服务修改后的该追踪树节点。或者,本实施例中的该追踪树节点具体可以是插入到追踪树中的由分布式追踪服务根据第一追踪信息生成的追踪树节点。
S702、在该追踪树节点对应的追踪步骤为起始步骤的情况下,该第一设备确定该追踪树节点是否属于该追踪树的上半棵树。
S703、在该追踪树节点属于该追踪树的上半棵树的情况下,该第一设备更新该追踪树中需要进行子节点数目校验的追踪树节点的数目。
例如,在分布式追踪服务确定该追踪树节点属于该追踪树的上半棵树的情况下,可以对如图5所示的追踪树表中记录的需要进行子节点数目校验的追踪树节点的数目进行更新,例如,分布式追踪服务可以对追踪树表中记录的需要进行子节点数目校验的追踪树节点的数目进行加1操作。
S704、在该追踪树节点不属于该追踪树的上半棵树的情况下,该第一设备确定该追踪树节点的所有子节点是否已存在。
例如,在该追踪树节点不属于该追踪树的上半棵树的情况下,分布式追踪服务可以判断其是否已经集齐该追踪树节点的所有子节点,即判断该追踪树节点是否已经集齐所有子节点。
S705、在该追踪树节点的所有子节点已存在的情况下,该第一设备更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
例如,在分布式追踪服务已经集齐该追踪树节点的所有子节点,或者该追踪树节点已经集齐所有子节点的情况下,分布式追踪服务可以对如图5所示的追踪树表中记录的已经完成子节点数目校验的追踪树节点的数目进行更新,例如,分布式追踪服务可以对已经完成子节点数目校验的追踪树节点的数目进行加1操作。
S706、在该追踪树节点对应的追踪步骤不为起始步骤的情况下,该第一设备确定该追踪树节点的父节点是否已存在。
例如,在该追踪树节点对应的追踪步骤不为起始步骤的情况下,分布式追踪服务可以确定该追踪树节点的父节点是否已经存储在分布式追踪服务中。
S707、在该追踪树节点的父节点已存在的情况下,该第一设备更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
例如,在该追踪树节点的父节点已存在的情况下,分布式追踪服务可以更新该追踪树节点和该追踪树节点的父节点之间的关联信息,例如,在该追踪树节点中增加父节点,和/或在该追踪树节点的父节点中增加子节点。
S708、在该追踪树节点的父节点不存在的情况下,该第一设备将该追踪树节点的父节点记录为未知类型的追踪树节点。
例如,在该追踪树节点的父节点不存在的情况下,分布式追踪服务可以将该追踪树节点的父节点记录为未知类型的追踪树节点,即将该追踪树节点的父节点放入如图5所示的未知类型的追踪树节点中。该追踪树节点的父节点的追踪标识符可以是第一追踪信息中的第二追踪标识符。
S709、该第一设备更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
例如,在分布式追踪服务将该追踪树节点的父节点放入如图5所示的未知类型的追踪树节点中的情况下,分布式追踪服务可以进一步更新该追踪树节点和该追踪树节点的父节点之间的关联信息,例如,在该追踪树节点中增加父节点,和/或在该追踪树节点的父节点中增加子节点。
可选的,在S707和S709之后,即该第一设备更新该追踪树节点和该追踪树节点的父节点之间的关联信息之后,该方法还包括如图8所示的如下步骤:
S801、该第一设备确定该追踪树节点的父节点的所有子节点是否已存在。
例如,在S707和S709之后,分布式追踪服务还可以进一步确定该追踪树节点的父节点的所有子节点是否已存在,即分布式追踪服务判断该追踪树节点的父节点的所有子节点是否已经存储在该分布式追踪服务中,或者分布式追踪服务判断该追踪树节点的父节点是否已经集齐所有子节点。
S802、在该追踪树节点的父节点的所有子节点已存在的情况下,该第一设备更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
例如,在该追踪树节点的父节点已经集齐所有子节点的情况下,分布式追踪服务可以对如图5所示的追踪树表中记录的已经完成子节点数目校验的追踪树节点的数目进行更新,例如,分布式追踪服务可以对已经完成子节点数目校验的追踪树节点的数目进行加1操作。
本实施例通过该第一设备根据该追踪树节点对应的追踪步骤类型,确定该追踪树节点对应的追踪步骤是否为起始步骤,在该追踪树节点对应的追踪步骤不为起始步骤的情况下,该第一设备确定该追踪树节点的父节点是否已存在,在该追踪树节点的父节点不存在的情况下,该第一设备将该追踪树节点的父节点记录为未知类型的追踪树节点,通过未知类型的追踪树节点缓存暂未到达的追踪树节点,可以提前建立父子节点的联系,从而避免在父节点真正到达时产生不必要的性能消耗,提高了系统性能。
图9示出根据本申请一实施例的数据校验方法的流程图。如图9所示,该方法可以包括:
S901、开始。
S902、根据第一追踪信息中的第一追踪标识符,判断该第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符。若是则执行S903,否则执行 S904。
S903、获取该第一追踪标识符对应的未知类型的追踪树节点,修改该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,将修改后的追踪树节点插入到追踪树。
S904、根据第一追踪信息构造新的追踪树节点,并将新构造的追踪树节点插入到追踪树。
S905、对插入到追踪树中的该追踪树节点进行数据更新。
例如,第一追踪信息中包括如上所述的主追踪标识符、追踪步骤类型、第一追踪标识符、第二追踪标识符、数据信息、原始校验值。此处对插入到追踪树中的该追踪树节点进行数据更新的过程具体可以是将第一追踪信息中的主追踪标识符、追踪步骤类型、第一追踪标识符、数据信息、原始校验值等写入到该追踪树节点的数据结构中。
S906、根据该追踪树节点对应的追踪步骤类型,判断该追踪树节点对应的追踪步骤是否为起始步骤。若是则执行S907,否则执行S911。
S907、根据该追踪树节点对应的追踪步骤类型,判断该追踪树节点是否属于该追踪树的上半棵树。若是则执行S908,否则执行S909。
S908、需要完成子节点数目校验的追踪树节点的数目加1。
S909、判断该追踪树节点是否已经集齐所有的子节点。若是则执行S910,否则执行S916。
S910、已经完成子节点数目校验的追踪树节点的数目加1。
S911、判断该追踪树节点的父节点是否已存在。若是则执行S912,否则执行S913。
S912、更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
S913、将该追踪树节点的父节点记录为未知类型的追踪树节点。
S914、判断该追踪树节点的父节点是否已经集齐所有的子节点。若是则执行S915,否则执行S907。
S915、已经完成子节点数目校验的追踪树节点的数目加1。
S916、结束。
可以理解的是,S901-S916的具体原理和实现过程与上述实施例所述的具体原理和实现过程一致,此处不再赘述。
在上述实施例的基础上,该第一设备根据该第一追踪信息,构建追踪树之后,该方法还包括如图10所示的如下几个步骤:
S1001、开始。
S1002、该第一设备针对该追踪树中的每个追踪树节点,确定该追踪树节点中是否存储有数据块。若是则执行S1003,否则执行S1009。
例如,分布式追踪服务在构建完追踪树之后,可以针对该追踪树中的每个追踪树节点,确定该追踪树节点中是否存储有数据块。
S1003、在该追踪树节点中存储有数据块的情况下,该第一设备确定该追踪树节点是否为该追踪树的根节点。若是则执行S1004,否则执行S1005。
例如,在分布式追踪服务确定当前遍历到的该追踪树节点中存储有数据块的情况下,分布式追踪服务可以进一步确定该追踪树节点是否为该追踪树的根节点。
S1004、在该追踪树节点是该追踪树的根节点的情况下,该第一设备将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
例如,在分布式追踪服务当前遍历到的该追踪树节点是该追踪树的根节点的情况下,分布式追踪服务可以将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。例如图3所示,每个追踪树节点的数据结构中可以包括一个数据块。在本实施例中,可以将每个追踪树节点的数据结构中的数据块存储到该追踪树之外的存储空间中。
S1005、在该追踪树节点不是该追踪树的根节点的情况下,该第一设备确定从该追踪树节点到该追踪树的根节点的路径是否完整。若是则执行S1006,否则执行S1013。
例如,在分布式追踪服务当前遍历到的该追踪树节点不是该追踪树的根节点的情况下,分布式追踪服务可以确定从该追踪树节点到该追踪树的根节点的路径是否完整。
S1006、在从该追踪树节点到该追踪树的根节点的路径完整的情况下,该第一设备获取从该追踪树节点的对称节点到该根节点的路径中包括的其他追踪树节点中的数据块偏移量。
例如,在分布式追踪服务确定从该追踪树节点到该追踪树的根节点的路径是否完整的情况下,分布式追踪服务可以获取从该追踪树节点的对称节点到该根节点的路径中包括的其他追踪树节点中的数据块偏移量。该数据块偏移量例如可以是如图3所示的每个追踪树节点的数据结构中的偏移量。
S1007、该第一设备对该其他追踪树节点中的数据块偏移量进行累加,得到累加偏移量。
可以理解的是,从该追踪树节点的对称节点到该根节点的路径中包括的其他追踪树节点的个数可以是一个或多个。进一步,分布式追踪服务可以对该其他追踪树节点中的数据块偏移量进行累加,得到累加偏移量。
S1008、该第一设备根据该累加偏移量,将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
进一步,分布式追踪服务可以根据该累加偏移量,将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
S1009、在该追踪树节点中没有存储数据块的情况下,该第一设备确定该追踪树节点是否属于该追踪树的上半棵树。若是则执行S1010,否则执行S1013。
例如,在分布式追踪服务确定当前遍历到的该追踪树节点中没有存储数据块的情况下,分布式追踪服务可以进一步确定该追踪树节点是否属于该追踪树的上半棵树。
S1010、在该追踪树节点属于该追踪树的上半棵树的情况下,该第一设备确定从该追踪树节点到该追踪树的根节点的路径是否完整。若是则执行S1011,否则执行S1013。
在该追踪树节点属于该追踪树的上半棵树的情况下,分布式追踪服务可以进一步确定从该追踪树节点到该追踪树的根节点的路径是否完整。
S1011、在从该追踪树节点到该追踪树的根节点的路径完整的情况下,该第一设备确定从该追踪树节点到该追踪树的叶子节点的路径中是否存在存储有数据块的其他追踪树节点。若是则执行S1012,否则执行S1013。
例如,在从该追踪树节点到该追踪树的根节点的路径完整的情况下,分布式追踪服务可以进一步确定从该追踪树节点到该追踪树的叶子节点的路径中是否存在存储有数据块的其他追踪树节点。
S1012、在从该追踪树节点到该追踪树的叶子节点的路径中存在存储有数据块的其他追踪树节点的情况下,该第一设备将该其他追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
可以理解的是,从该追踪树节点到该追踪树的叶子节点的路径中可能存在存储有数据块的其他追踪树节点,也可能不存在存储有数据块的其他追踪树节点。在从该追踪树节点到该追踪树的叶子节点的路径中存在存储有数据块的其他追踪树节点的情况下,该其他追踪树节点的个数可以是一个或多个。分布式追踪服务可以进一步将该其他追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
S1013、结束。
可以理解的是,在将该追踪树中的部分或全部追踪树节点中的数据块存储到该追踪树之外的存储空间中的情况下,进一步,可以将该部分或全部追踪树节点的数据结构中的数据块替换为数据块长度,如图11所示为将数据块替换为数据块长度之后的追踪树节点的数据结构的示意图。
本实施例通过将该追踪树中的部分或全部追踪树节点中的数据块存储到该追踪树之外的存储空间中,可以有效减小该追踪树占用的存储空间,同时还可以提高该追踪树的计算效率。
在上述实施例的基础上,该第一设备根据该第一追踪信息,构建追踪树之后,数据校验方法还包括:该第一设备确定该追踪树是否完整。例如,在分布式追踪服务构建完追踪树之后,分布式追踪服务还可以进一步确定该追踪树是否完整。
具体的,该第一设备确定该追踪树是否完整包括如图12所示的如下几个步骤:
S1201、开始。
S1202、该第一设备确定未知类型的追踪树节点是否为空。若是则执行 S1206,否则执行S1203。
S1203、在该未知类型的追踪树节点不为空的情况下,该第一设备确定该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目是否相等。若是则执行S1204,否则执行S1206。
S1204、在该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目相等的情况下,该第一设备确定该追踪树中的每个追踪树节点是否存在与其对称的追踪树节点。若是则执行S1205,否则执行S1206。
例如,分布式追踪服务确定该追踪树中的每个追踪树节点是否存在与其对称的追踪树节点的一种可行的实现方式是:判断追踪树表中相互对称的追踪步骤类型的个数是否相等。在追踪树表中相互对称的追踪步骤类型的个数相等的情况下,分布式追踪服务可以确定该追踪树中的每个追踪树节点存在与其对称的追踪树节点。
S1205、在该追踪树中的每个追踪树节点存在与其对称的追踪树节点的情况下,该第一设备确定该追踪树是完整的。
S1206、结束。
本实施例通过该第一设备确定未知类型的追踪树节点是否为空,在该未知类型的追踪树节点不为空的情况下,该第一设备确定该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目是否相等,在该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目相等的情况下,该第一设备确定该追踪树中的每个追踪树节点是否存在与其对称的追踪树节点,在该追踪树中的每个追踪树节点存在与其对称的追踪树节点的情况下,该第一设备确定该追踪树是完整的,即对追踪树的完整性校验通过,从而提高了追踪树的完整性。
在一种可行的实现方式中,该数据信息包括:数据块偏移量和数据块长度。例如图11所示,追踪树节点的数据结构中的数据信息包括:偏移量和数据块长度。该偏移量可以是如图3所示的数据块的偏移量,该偏移量具体如上所述,此处不再赘述。该数据块长度可以是如图3所示的数据块的长度。
该第一设备根据该追踪树进行数据校验,得到校验结果,包括如图13所示的如下几个步骤:
S1301、该第一设备针对该追踪树中的每个追踪树节点,根据该追踪树节点包括的数据块偏移量和数据块长度,获取该追踪树节点对应的数据块。
例如,分布式追踪服务根据该追踪树进行数据校验的一种实现方式是对该追踪树中的每个追踪树节点进行数据校验。具体的,分布式追踪服务可以对每个追踪树节点中的数据块进行数据校验。在将该追踪树中的部分或全部追踪树节点中的数据块存储到该追踪树之外的存储空间中的情况下,由于每个追踪树节点的数据块存储到该追踪树之外的存储空间中。因此,针对该追踪树中的每个追踪树节点,分布式追踪服务可以根据该追踪树节点包括的数据块偏移量和数据块长度,从该追踪树之外的存储空间中获取该追踪树节点对应的数据块。
例如,以该追踪树中的任意一个追踪树节点为例,在将该追踪树中的部分或全部追踪树节点中的数据块存储到该追踪树之外的存储空间中的情况下,该追踪树节点的数据结构如图11所示,即该追踪树节点的数据信息中包括偏移量和数据块长度。进一步,分布式追踪服务可以根据该追踪树节点包括的偏移量和数据块长度,从该追踪树之外的存储空间中获取该追踪树节点对应的数据块。
S1302、该第一设备计算该追踪树节点对应的数据块的校验信息。
在分布式追踪服务获取到该追踪树节点对应的数据块的情况下,分布式追踪服务可以采用如上所述的校验算法,例如CRC,计算该追踪树节点对应的数据块的校验信息,例如校验值。
S1303、该第一设备通过比较该计算得到的该校验信息和该数据块的原始校验信息,得到该追踪树节点的校验结果。
如图11所示,该追踪树节点的数据结构中还可以包括原始校验值,该原始校验值可以是该追踪树节点对应的数据块的原始校验信息。在分布式追踪服务计算出该追踪树节点对应的数据块的校验信息的情况下,分布式追踪服务可以进一步比较其计算得到的该校验信息和该追踪树节点的数据结构中包括的原始校验值,从而得到该追踪树节点的校验结果。
可选的,该第一设备通过比较该计算得到的该校验信息和该数据块的原始校验信息,得到该追踪树节点的校验结果,包括:在该计算得到的该校验信息和该数据块的原始校验信息不一致的情况下,该第一设备确定该追踪树节点发生校验错误。
例如,在分布式追踪服务计算得到的该校验信息和该追踪树节点的数据结构中包括的原始校验值不一致的情况下,分布式追踪服务可以确定该追踪树节点发生校验错误,即该追踪树节点对应的数据块发生了变化。进一步,分布式追踪服务还可以将该追踪树节点的校验结果记录到如图11所示的该追踪树节点的数据结构包括的校验状态中。
可以理解的是,分布式追踪服务对该追踪树中每个追踪树节点进行数据校验的过程均与如上所述的对该追踪树中任意一个追踪树节点进行数据校验的过程类似,此处不再赘述,从而可以得到该追踪树中每个追踪树节点分别对应的校验结果,例如,每个追踪树节点是否发生校验错误,或者每个追踪树节点对应的数据块是否发生变化。进一步,分布式追踪服务还可以将每个追踪树节点的校验结果分别记录到每个追踪树节点的数据结构包括的校验状态中。
可选的,该第一设备根据该追踪树进行数据校验,得到校验结果之后,该方法还包括:该第一设备根据该校验结果定位该追踪树中发生校验错误的追踪树节点。
例如,在分布式追踪服务对该追踪树中的每个追踪树节点进行数据校验之后,由于通过该追踪树可以高效的确定出每个追踪树节点,因此,在该追踪树中的部分追踪树节点发生校验错误的情况下,分布式追踪服务可以根据如图11 所示的每个追踪树节点的数据结构包括的校验状态定位出该追踪树中发生校验错误的追踪树节点。
本申请实施例通过在对追踪树的完整性校验通过的情况下,还可以遍历该追踪树中的每个追踪树节点,根据每个追踪树节点的数据块偏移量和数据块长度,获取该追踪树节点对应的数据块,并计算该数据块的校验值。进一步将该计算得到的校验值和该数据块的原始校验值进行比较,从而确定该数据块是否发生变化、以及该追踪树节点是否发生校验错误。进一步,根据该追踪树即可快速定位到该追踪树中发生校验错误的追踪树节点,通过该追踪树的回溯过程可以进行故障排查,从而提高了数据校验的效率。
综上所述,本公开实施例通过向需要追踪的服务中添加中间层例如追踪服务代理层,可以根据分布式存储中数据校验的特点,自定义与实际业务相关的基本树形,并由追踪服务代理层过滤指定步骤,以及将追踪信息转发给分布式追踪服务。分布式追踪服务可以以该基本树形为模板,高效地构造追踪树,并完成数据校验,从而使得分布式存储中的分布式链路追踪可以在链路追踪的情况下进行数据校验。
图14示出根据本申请一实施例的数据校验装置的结构框图。在本申请实施例中,该装置具体可以是如上实施例中的第一设备,或第一设备中的部件。如图14所示,该装置140可以包括:
接收模块141,用于接收第二设备发送的第一追踪信息,该第一追踪信息是该第二设备在对被追踪服务进行分布式链路追踪的情况下生成的;
构建模块142,用于根据该第一追踪信息,构建追踪树,该追踪树包括一个或多个追踪树节点,该一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息;
数据校验模块143,用于根据该追踪树进行数据校验,得到校验结果。
可选的,该第一追踪信息包括主追踪标识符、该被追踪服务中第一追踪步骤对应的第一追踪标识符、该被追踪服务中第二追踪步骤对应的第二追踪标识符,该第二追踪步骤是该第一追踪步骤的上一步骤。
可选的,该第二追踪信息包括追踪步骤类型、该主追踪标识符、该追踪树节点对应的追踪步骤的追踪标识符。
可选的,构建模块142具体用于:
根据该第一追踪标识符,确定该第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符;
在该第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,获取该第一追踪标识符对应的未知类型的追踪树节点;
根据该第一追踪步骤的类型信息,修改该第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,得到修改后的追踪树节点;
将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中。
可选的,构建模块142具体用于:
在该第一追踪标识符不是未知类型的追踪树节点包括的追踪标识符的情况下,根据该第一追踪信息生成追踪树节点;
将该追踪树节点插入到该主追踪标识符对应的追踪树中。
可选的,该装置140还包括:确定模块144和更新模块145,确定模块144 用于在构建模块142将修改后的该追踪树节点插入到该主追踪标识符对应的追踪树中之后或者将该追踪树节点插入到该主追踪标识符对应的追踪树中之后,根据该追踪树节点对应的追踪步骤类型,确定该追踪树节点对应的追踪步骤是否为起始步骤;在该追踪树节点对应的追踪步骤为起始步骤的情况下,确定该追踪树节点是否属于该追踪树的上半棵树;更新模块145用于在该追踪树节点属于该追踪树的上半棵树的情况下,更新该追踪树中需要进行子节点数目校验的追踪树节点的数目。
可选的,确定模块144还用于:在该追踪树节点不属于该追踪树的上半棵树的情况下,确定该追踪树节点的所有子节点是否已存在;更新模块145还用于在该追踪树节点的所有子节点已存在的情况下,更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
可选的,确定模块144还用于:在该追踪树节点对应的追踪步骤不为起始步骤的情况下,确定该追踪树节点的父节点是否已存在;更新模块145还用于在该追踪树节点的父节点已存在的情况下,更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
可选的,该装置140还包括:记录模块146,用于在该追踪树节点的父节点不存在的情况下,将该追踪树节点的父节点记录为未知类型的追踪树节点;更新模块145还用于更新该追踪树节点和该追踪树节点的父节点之间的关联信息。
可选的,确定模块144还用于:在更新模块145更新该追踪树节点和该追踪树节点的父节点之间的关联信息之后,确定该追踪树节点的父节点的所有子节点是否已存在;确定模块144还用于:在该追踪树节点的父节点的所有子节点已存在的情况下,更新该追踪树中已经完成子节点数目校验的追踪树节点的数目。
可选的,该装置140还包括:存储模块147。确定模块144还用于:在构建模块142根据该第一追踪信息,构建追踪树之后,针对该追踪树中的每个追踪树节点,确定该追踪树节点中是否存储有数据块;在该追踪树节点中存储有数据块的情况下,确定该追踪树节点是否为该追踪树的根节点;存储模块147 用于在该追踪树节点是该追踪树的根节点的情况下,将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
可选的,该装置140还包括:获取模块148和计算模块149。确定模块144 还用于:在该追踪树节点不是该追踪树的根节点的情况下,确定从该追踪树节点到该追踪树的根节点的路径是否完整;获取模块148用于在从该追踪树节点到该追踪树的根节点的路径完整的情况下,获取从该追踪树节点的对称节点到该根节点的路径中包括的其他追踪树节点中的数据块偏移量;计算模块149用于对该其他追踪树节点中的数据块偏移量进行累加,得到累加偏移量;存储模块147还用于根据该累加偏移量,将该追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
可选的,确定模块144还用于:在该追踪树节点中没有存储数据块的情况下,确定该追踪树节点是否属于该追踪树的上半棵树;在该追踪树节点属于该追踪树的上半棵树的情况下,确定从该追踪树节点到该追踪树的根节点的路径是否完整;在从该追踪树节点到该追踪树的根节点的路径完整的情况下,确定从该追踪树节点到该追踪树的叶子节点的路径中是否存在存储有数据块的其他追踪树节点;存储模块147还用于:在从该追踪树节点到该追踪树的叶子节点的路径中存在存储有数据块的其他追踪树节点的情况下,将该其他追踪树节点中存储的数据块存储到该追踪树之外的存储空间中。
可选的,确定模块144还用于:在构建模块142根据该第一追踪信息,构建追踪树之后,确定该追踪树是否完整。
可选的,确定模块144具体用于:确定未知类型的追踪树节点是否为空;在该未知类型的追踪树节点不为空的情况下,确定该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目是否相等;在该追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目相等的情况下,确定该追踪树中的每个追踪树节点是否存在与其对称的追踪树节点;在该追踪树中的每个追踪树节点存在与其对称的追踪树节点的情况下,确定该追踪树是完整的。
可选的,该数据信息包括:数据块偏移量和数据块长度;数据校验模块143 具体用于:针对该追踪树中的每个追踪树节点,根据该追踪树节点包括的数据块偏移量和数据块长度,获取该追踪树节点对应的数据块;计算该追踪树节点对应的数据块的校验信息;通过比较该计算得到的该校验信息和该数据块的原始校验信息,得到该追踪树节点的校验结果。
可选的,数据校验模块143具体用于:在该计算得到的该校验信息和该数据块的原始校验信息不一致的情况下,该第一设备确定该追踪树节点发生校验错误。
可选的,确定模块144还用于:数据校验模块143根据该追踪树进行数据校验,得到校验结果之后,根据该校验结果定位该追踪树中发生校验错误的追踪树节点。
本申请实施例各装置中的各模块的功能可以参见上述方法中的对应描述,在此不再赘述。
图15示出根据本申请一实施例的数据校验设备的结构框图。在本申请实施例中,该数据校验设备具体可以是如上实施例中的第一设备。如图15所示,该数据校验设备设备包括:存储器1510和处理器1520,存储器1510内存储有可在处理器1520上运行的计算机程序。处理器1520执行该计算机程序时实现上述实施例中的数据校验设备的方法。存储器1510和处理器1520的数量可以为一个或多个。
该应用程序现场还原设备还包括:
通信接口1530,用于与外界设备进行通信,进行数据交互传输。
如果存储器1510、处理器1520和通信接口1530独立实现,则存储器1510、处理器1520和通信接口1530可以通过总线相互连接并完成相互间的通信。该总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(PeripheralComponent Interconnect,PCI)总线或扩展工业标准体系结构(Extended IndustryStandard Architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图15中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器1510、处理器1520及通信接口1530 集成在一块芯片上,则存储器1510、处理器1520及通信接口1530可以通过内部接口完成相互间的通信。
本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现本申请实施例中提供的方法。
本申请实施例还提供了一种芯片,该芯片包括,包括处理器,用于从存储器中调用并运行存储器中存储的指令,使得安装有芯片的通信设备执行本申请实施例提供的方法。
本申请实施例还提供了一种芯片,包括:输入接口、输出接口、处理器和存储器,输入接口、输出接口、处理器以及存储器之间通过内部连接通路相连,处理器用于执行存储器中的代码,当代码被执行时,处理器用于执行申请实施例提供的方法。
应理解的是,上述处理器可以是中央处理器(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(fieldprogrammablegate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,处理器可以是支持进阶精简指令集机器(advanced RISC machines,ARM)架构的处理器。
进一步地,可选的,上述存储器可以包括只读存储器和随机存取存储器,还可以包括非易失性随机存取存储器。该存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以包括只读存储器(read-onlymemory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以包括随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用。例如,静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic random access memory,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data date SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包括于本申请的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统) 使用,或结合这些指令执行系统、装置或设备而使用。
应理解的是,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。上述实施例方法的全部或部分步骤是可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。上述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。该存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (19)
1.一种数据校验方法,其特征在于,所述方法包括:
第一设备接收第二设备发送的第一追踪信息,所述第一追踪信息是所述第二设备在对被追踪服务进行分布式链路追踪的情况下生成的,其中,所述第一追踪信息包括主追踪标识符、所述被追踪服务中第一追踪步骤对应的第一追踪标识符、所述被追踪服务中第二追踪步骤对应的第二追踪标识符,所述第二追踪步骤是所述第一追踪步骤的上一步骤;
所述第一设备根据所述第一追踪信息,构建追踪树,所述追踪树包括一个或多个追踪树节点,所述一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息;
所述第一设备根据所述追踪树进行数据校验,得到校验结果;
其中,所述第一设备根据所述第一追踪信息,构建追踪树,包括:
所述第一设备根据所述第一追踪标识符,确定所述第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符;
在所述第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,所述第一设备获取所述第一追踪标识符对应的未知类型的追踪树节点;
所述第一设备根据所述第一追踪步骤的类型信息,修改所述第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,得到修改后的追踪树节点;
所述第一设备将修改后的所述追踪树节点插入到所述主追踪标识符对应的追踪树中。
2.根据权利要求1所述的方法,其特征在于,所述第二追踪信息包括追踪步骤类型、所述主追踪标识符、所述追踪树节点对应的追踪步骤的追踪标识符。
3.根据权利要求1所述的方法,其特征在于,所述第一设备根据所述第一追踪信息,构建追踪树,还包括:
在所述第一追踪标识符不是未知类型的追踪树节点包括的追踪标识符的情况下,所述第一设备根据所述第一追踪信息生成追踪树节点;
所述第一设备将所述追踪树节点插入到所述主追踪标识符对应的追踪树中。
4.根据权利要求3所述的方法,其特征在于,所述第一设备将修改后的所述追踪树节点插入到所述主追踪标识符对应的追踪树中之后或者所述第一设备将所述追踪树节点插入到所述主追踪标识符对应的追踪树中之后,所述方法还包括:
所述第一设备根据所述追踪树节点对应的追踪步骤类型,确定所述追踪树节点对应的追踪步骤是否为起始步骤;
在所述追踪树节点对应的追踪步骤为起始步骤的情况下,所述第一设备确定所述追踪树节点是否属于所述追踪树的上半棵树;
在所述追踪树节点属于所述追踪树的上半棵树的情况下,所述第一设备更新所述追踪树中需要进行子节点数目校验的追踪树节点的数目。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述追踪树节点不属于所述追踪树的上半棵树的情况下,所述第一设备确定所述追踪树节点的所有子节点是否已存在;
在所述追踪树节点的所有子节点已存在的情况下,所述第一设备更新所述追踪树中已经完成子节点数目校验的追踪树节点的数目。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述追踪树节点对应的追踪步骤不为起始步骤的情况下,所述第一设备确定所述追踪树节点的父节点是否已存在;
在所述追踪树节点的父节点已存在的情况下,所述第一设备更新所述追踪树节点和所述追踪树节点的父节点之间的关联信息。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述追踪树节点的父节点不存在的情况下,所述第一设备将所述追踪树节点的父节点记录为未知类型的追踪树节点;
所述第一设备更新所述追踪树节点和所述追踪树节点的父节点之间的关联信息。
8.根据权利要求7所述的方法,其特征在于,所述第一设备更新所述追踪树节点和所述追踪树节点的父节点之间的关联信息之后,所述方法还包括:
所述第一设备确定所述追踪树节点的父节点的所有子节点是否已存在;
在所述追踪树节点的父节点的所有子节点已存在的情况下,所述第一设备更新所述追踪树中已经完成子节点数目校验的追踪树节点的数目。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述第一设备根据所述第一追踪信息,构建追踪树之后,所述方法还包括:
所述第一设备针对所述追踪树中的每个追踪树节点,确定所述追踪树节点中是否存储有数据块;
在所述追踪树节点中存储有数据块的情况下,所述第一设备确定所述追踪树节点是否为所述追踪树的根节点;
在所述追踪树节点是所述追踪树的根节点的情况下,所述第一设备将所述追踪树节点中存储的数据块存储到所述追踪树之外的存储空间中。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
在所述追踪树节点不是所述追踪树的根节点的情况下,所述第一设备确定从所述追踪树节点到所述追踪树的根节点的路径是否完整;
在从所述追踪树节点到所述追踪树的根节点的路径完整的情况下,所述第一设备获取从所述追踪树节点的对称节点到所述根节点的路径中包括的其他追踪树节点中的数据块偏移量;
所述第一设备对所述其他追踪树节点中的数据块偏移量进行累加,得到累加偏移量;
所述第一设备根据所述累加偏移量,将所述追踪树节点中存储的数据块存储到所述追踪树之外的存储空间中。
11.根据权利要求9所述的方法,其特征在于,所述方法还包括:
在所述追踪树节点中没有存储数据块的情况下,所述第一设备确定所述追踪树节点是否属于所述追踪树的上半棵树;
在所述追踪树节点属于所述追踪树的上半棵树的情况下,所述第一设备确定从所述追踪树节点到所述追踪树的根节点的路径是否完整;
在从所述追踪树节点到所述追踪树的根节点的路径完整的情况下,所述第一设备确定从所述追踪树节点到所述追踪树的叶子节点的路径中是否存在存储有数据块的其他追踪树节点;
在从所述追踪树节点到所述追踪树的叶子节点的路径中存在存储有数据块的其他追踪树节点的情况下,所述第一设备将所述其他追踪树节点中存储的数据块存储到所述追踪树之外的存储空间中。
12.根据权利要求1至8中任一项所述的方法,其特征在于,所述第一设备根据所述第一追踪信息,构建追踪树之后,所述方法还包括:
所述第一设备确定所述追踪树是否完整。
13.根据权利要求12所述的方法,其特征在于,所述第一设备确定所述追踪树是否完整,包括:
所述第一设备确定未知类型的追踪树节点是否为空;
在所述未知类型的追踪树节点不为空的情况下,所述第一设备确定所述追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目是否相等;
在所述追踪树中需要进行子节点数目校验的追踪树节点的数目与已经完成子节点数目校验的追踪树节点的数目相等的情况下,所述第一设备确定所述追踪树中的每个追踪树节点是否存在与其对称的追踪树节点;
在所述追踪树中的每个追踪树节点存在与其对称的追踪树节点的情况下,所述第一设备确定所述追踪树是完整的。
14.根据权利要求1至8中任一项所述的方法,其特征在于,所述数据信息包括:数据块偏移量和数据块长度;
所述第一设备根据所述追踪树进行数据校验,得到校验结果,包括:
所述第一设备针对所述追踪树中的每个追踪树节点,根据所述追踪树节点包括的数据块偏移量和数据块长度,获取所述追踪树节点对应的数据块;
所述第一设备计算所述追踪树节点对应的数据块的校验信息;
所述第一设备通过比较所述计算得到的所述校验信息和所述数据块的原始校验信息,得到所述追踪树节点的校验结果。
15.根据权利要求14所述的方法,其特征在于,所述第一设备通过比较所述计算得到的所述校验信息和所述数据块的原始校验信息,得到所述追踪树节点的校验结果,包括:
在所述计算得到的所述校验信息和所述数据块的原始校验信息不一致的情况下,所述第一设备确定所述追踪树节点发生校验错误。
16.根据权利要求1所述的方法,其特征在于,所述第一设备根据所述追踪树进行数据校验,得到校验结果之后,所述方法还包括:
所述第一设备根据所述校验结果定位所述追踪树中发生校验错误的追踪树节点。
17.一种数据校验装置,其特征在于,所述装置包括:
接收模块,用于接收第二设备发送的第一追踪信息,所述第一追踪信息是所述第二设备在对被追踪服务进行分布式链路追踪的情况下生成的,其中,所述第一追踪信息包括主追踪标识符、所述被追踪服务中第一追踪步骤对应的第一追踪标识符、所述被追踪服务中第二追踪步骤对应的第二追踪标识符,所述第二追踪步骤是所述第一追踪步骤的上一步骤;
构建模块,用于根据所述第一追踪信息,构建追踪树,所述追踪树包括一个或多个追踪树节点,所述一个或多个追踪树节点中的每个追踪树节点包括数据信息和第二追踪信息;
数据校验模块,用于根据所述追踪树进行数据校验,得到校验结果;
其中,根据所述第一追踪信息,构建追踪树,包括:
根据所述第一追踪标识符,确定所述第一追踪标识符是否为未知类型的追踪树节点包括的追踪标识符;
在所述第一追踪标识符为未知类型的追踪树节点包括的追踪标识符的情况下,获取所述第一追踪标识符对应的未知类型的追踪树节点;
根据所述第一追踪步骤的类型信息,修改所述第一追踪标识符对应的未知类型的追踪树节点中包括的追踪步骤类型,得到修改后的追踪树节点;
将修改后的所述追踪树节点插入到所述主追踪标识符对应的追踪树中。
18.一种数据校验设备,其特征在于,包括:处理器和存储器,所述存储器中存储指令,所述指令由处理器加载并执行,以实现如权利要求1至16中任一项所述的方法。
19.一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至16中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011264117.2A CN112363697B (zh) | 2020-11-12 | 2020-11-12 | 数据校验方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011264117.2A CN112363697B (zh) | 2020-11-12 | 2020-11-12 | 数据校验方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112363697A CN112363697A (zh) | 2021-02-12 |
CN112363697B true CN112363697B (zh) | 2021-10-12 |
Family
ID=74514612
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011264117.2A Active CN112363697B (zh) | 2020-11-12 | 2020-11-12 | 数据校验方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112363697B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113395593B (zh) * | 2021-08-17 | 2021-10-29 | 深圳佳力拓科技有限公司 | 减少信息泄漏的数字电视终端的数据发送方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726016A (zh) * | 2017-10-30 | 2019-05-07 | 阿里巴巴集团控股有限公司 | 一种用于分布式系统的链路追踪方法、装置和系统 |
CN110457190A (zh) * | 2019-07-09 | 2019-11-15 | 优估(上海)信息科技有限公司 | 一种基于区块链的全链路监控方法、装置及系统 |
CN110708212A (zh) * | 2019-09-10 | 2020-01-17 | 中国平安财产保险股份有限公司 | 分布式系统中调用链路的追踪方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070106982A1 (en) * | 2005-11-04 | 2007-05-10 | International Business Machines Corporation | Method, apparatus, and computer program product for model based traceability |
-
2020
- 2020-11-12 CN CN202011264117.2A patent/CN112363697B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726016A (zh) * | 2017-10-30 | 2019-05-07 | 阿里巴巴集团控股有限公司 | 一种用于分布式系统的链路追踪方法、装置和系统 |
CN110457190A (zh) * | 2019-07-09 | 2019-11-15 | 优估(上海)信息科技有限公司 | 一种基于区块链的全链路监控方法、装置及系统 |
CN110708212A (zh) * | 2019-09-10 | 2020-01-17 | 中国平安财产保险股份有限公司 | 分布式系统中调用链路的追踪方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112363697A (zh) | 2021-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11086825B2 (en) | Telemetry system for a cloud synchronization system | |
US10055216B2 (en) | Minimizing image copying during partition updates | |
CN109683826A (zh) | 用于分布式存储系统的扩容方法和装置 | |
US11093387B1 (en) | Garbage collection based on transmission object models | |
CN110825420A (zh) | 分布式集群的配置参数更新方法、装置、设备及存储介质 | |
CN107885612A (zh) | 数据处理方法和系统及装置 | |
CN110018897B (zh) | 数据处理方法、装置及计算设备 | |
CN112087530B (zh) | 一种将数据上传至区块链系统的方法、装置、设备及介质 | |
CN112363697B (zh) | 数据校验方法、装置、设备及存储介质 | |
JP2019204527A (ja) | 記憶機器のデータ位置の処理方法及び処理装置、コンピュータ機器並びにコンピュータ読み取り可能な記憶媒体 | |
CN111143130B (zh) | 数据恢复方法、装置、计算机可读存储介质和计算机设备 | |
CN114218193A (zh) | 数据迁移方法、装置、计算机设备和可读存储介质 | |
CN113419901A (zh) | 数据灾备方法、装置及服务器 | |
CN110298031B (zh) | 一种词典服务系统及模型版本一致性配送方法 | |
CN115878381A (zh) | 基于srm盘的数据恢复方法及装置、存储介质、电子装置 | |
CN114003174A (zh) | 一种纠删码存储方法、系统及电子设备 | |
CN116107801A (zh) | 交易处理方法及相关产品 | |
CN108614838B (zh) | 一种用户群索引处理方法、装置及系统 | |
CN113157414A (zh) | 任务处理方法、装置、非易失性存储介质及处理器 | |
CN111857744A (zh) | 一种超融合系统的安装方法、系统、设备以及介质 | |
CN115730016B (zh) | 数据同步方法、系统、装置、计算机设备和存储介质 | |
CN115794164A (zh) | 一种云数据库升级方法、装置、设备及存储介质 | |
CN117992274A (zh) | 非关系型数据库的数据恢复方法、装置、计算设备集群 | |
CN115168444A (zh) | 基于区块链的状态数据的重建方法、装置和存储介质 | |
CN117593125A (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 |