CN111813786B - 缺陷检测/处理方法和装置 - Google Patents
缺陷检测/处理方法和装置 Download PDFInfo
- Publication number
- CN111813786B CN111813786B CN201910296074.7A CN201910296074A CN111813786B CN 111813786 B CN111813786 B CN 111813786B CN 201910296074 A CN201910296074 A CN 201910296074A CN 111813786 B CN111813786 B CN 111813786B
- Authority
- CN
- China
- Prior art keywords
- shared data
- defect
- distributed system
- node
- failure
- 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
- 230000007547 defect Effects 0.000 title claims abstract description 188
- 238000001514 detection method Methods 0.000 title claims abstract description 26
- 238000003672 processing method Methods 0.000 title claims abstract description 14
- 238000012545 processing Methods 0.000 claims abstract description 46
- 238000002347 injection Methods 0.000 claims abstract description 17
- 239000007924 injection Substances 0.000 claims abstract description 17
- 238000000034 method Methods 0.000 claims description 42
- 230000005540 biological transmission Effects 0.000 claims description 15
- 238000012360 testing method Methods 0.000 claims description 15
- 239000000758 substrate Substances 0.000 claims 3
- 238000011084 recovery Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 102100022478 S-adenosylmethionine mitochondrial carrier protein Human genes 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000001364 causal effect Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 101150115956 slc25a26 gene Proteins 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000009172 bursting Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Classifications
-
- 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
- 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
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Hardware Redundancy (AREA)
Abstract
本申请公开了缺陷检测方法和装置,缺陷处理方法和装置。其中,缺陷检测方法包括:确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;根据执行轨迹确定候选的失效原子性缺陷;运行分布式系统,并将与候选的失效原子性缺陷对应的节点失效注入至分布式系统;获取运行分布式系统后的与失效原子性缺陷相关的多个共享数据;若多个共享数据不一致,则确定失效原子性缺陷。采用这种处理方式,使得通过观察分布式系统的一次正确执行,无需注入节点失效,即可预测可能的原子性违反错误,并通过最后重放工作负载,注入节点失效,确定性地确认缺陷、重放缺陷;因此,可以有效检测出失效原子性缺陷,从而提升分布式系统的可靠性。
Description
技术领域
本申请涉及分布式系统技术领域,具体涉及缺陷检测方法和装置,缺陷处理方法和装置。
背景技术
随着越来越多的数据与计算从本地向云端迁移,大规模分布式系统逐步得到广泛使用。与传统的单机部署系统相比,大规模分布式系统具有较好的可扩展性和容错能力,获得同样计算能力的成本较低。然而,大规模分布式系统必须管理大量分布式软件组件、硬件及其配置,使得该类系统异常复杂。因而,大规模分布式系统不可避免地会发生故障,并影响到大量终端用户,降低其可靠性和可用性。因此保证大规模分布式系统的高可靠性十分重要。
一种典型的保证分布式系统具有高可靠性的方式是,分布式系统需要管理其内部计算节点,并从上述节点失效行为中恢复,以保障系统的正常运行。为了应对节点失效,开发人员在分布式系统中引入了各种复杂的失效恢复机制,然而,大规模分布式系统在应对节点失效时,依然面临极大挑战。在大规模分布式系统中,任意节点在任何时间都可能发生失效,从而触发各种各样的失效场景。对开发人员来说,预测所有可能的失效场景、设计正确的失效恢复机制以及正确地实现失效恢复机制十分困难。同时,通过在所有可能场景下注入节点失效来达到彻底测试系统的目标也难以实现。因此,不正确的节点失效恢复机制及其实现会引入错综复杂的节点失效恢复相关缺陷,这些缺陷往往导致严重的后果,如节点宕机、数据不一致等。
目前,常见的节点失效与恢复缺陷检测方式至少包括如下几种:1)通过避免测试相同的恢复行为来尽可能地测试多种多样的失败场景,用户通过Datalog来描述故障测试方法以及分布式系统恢复规范,从而可以系统化测试分布式系统中故障恢复逻辑;2)SAMC拦截分布式系统中的不确定性事件并置换他们的顺序。SAMC采用灰盒测试技术,在传统黑盒模型检查的基础上,加入分布式系统的语义信息,从而消减了状态空间,尽可能避免模型检查中的状态爆炸问题;3)通过系统地生成和探索分布式系统执行中可能产生的文件信息,来检测与所有副本同时失效相关的分布式系统漏洞。
在实现本发明过程中,发明人发现一种新的节点失效后恢复缺陷,即:分布式系统中某些关联操作期待被原子地执行,不能被节点失效所打断,如果发生节点失效,将导致分布式系统处于数据不一致,分布式系统无法正常恢复到正常状态,本发明将该类节点失效称为失效原子性。然而,发明人发现上述现有技术方案无法对该类节点失效进行恢复,如上述方法一将分布式系统看做一个黑盒,并不关心在系统处于何种状态时注入一个节点失效会产生失效原子性违背,上述方法三也只关心与文件持久化相关的操作,并不关心失效原子性。综上所述,现有技术存在由节点失效导致的同一数据源的多个共享数据不一致的问题。
发明内容
本申请提供缺陷检测方法,以解决现有技术存在的由节点失效导致的同一数据源的多个共享数据不一致的问题。本申请另外提供缺陷检测装置,以及缺陷处理方法和装置。
本申请提供一种缺陷检测方法,包括:
确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;
根据所述执行轨迹确定候选的失效原子性缺陷;
运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;
获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;
若所述多个共享数据不一致,则确定失效原子性缺陷。
可选的,所述多个共享数据处理操作包括在一个节点内对两个以上文件的共享数据写操作;
所述失效原子性缺陷包括任意两次共享数据写操作间的节点失效原子性缺陷。
可选的,所述多个共享数据处理操作包括在源节点内对文件的共享数据写操作、和源节点对目标节点的共享数据发送操作;
所述失效原子性缺陷包括共享数据写操作与共享数据发送操作间的源节点失效原子性缺陷。
可选的,所述多个共享数据处理操作包括源节点对第一目标节点的共享数据发送操作、和源节点对第二目标节点的共享数据发送操作;
所述失效原子性缺陷包括第一共享数据发送操作与第二共享数据发送操作间的源节点失效原子性缺陷。
可选的,所述执行轨迹采用如下步骤确定:
对所述分布式系统执行系统测试,并记录所述分布式系统在测试数据下的所述执行轨迹。
可选的,所述运行所述分布式系统,包括:
根据所述测试数据重新对所述分布式系统执行系统测试。
可选的,还包括:
确定与各个数据源分别对应的多个共享数据。
可选的,所述多个共享数据处理操作包括以下操作的至少一个:数据写操作,数据发送操作。
本申请还提供一种缺陷处理方法,还包括:
确定分布式系统包括的失效原子性缺陷;
在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码;所述错误处理程序代码包括使与所述失效原子性缺陷相关的多个共享数据保持一致的代码;
若所述分布式系统在执行时发生与所述失效原子性缺陷对应的节点失效,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致。
可选的,所述确定分布式系统的失效原子性缺陷,包括:
确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;
根据所述执行轨迹确定候选的失效原子性缺陷;
运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;
获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;若所述多个共享数据不一致,则确定所述失效原子性缺陷。
本申请还提供一种缺陷检测装置,包括:
执行轨迹确定单元,用于确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;
候选缺陷确定单元,用于根据所述执行轨迹确定候选的失效原子性缺陷;
节点失效注入单元,用于运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;
共享数据获取单元,用于获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;
缺陷确定单元,用于若所述多个共享数据不一致,则确定所述失效原子性缺陷。
本申请还提供一种缺陷处理装置,包括:
缺陷确定单元,用于确定分布式系统包括的失效原子性缺陷;
错误代码增加单元,用于在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码;
错误处理单元,用于若所述分布式系统在执行时发生与所述失效原子性缺陷对应的节点失效,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各种方法。
本申请还提供一种包括指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各种方法。
与现有技术相比,本申请具有以下优点:
本申请实施例提供的缺陷检测方法,通过确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;根据所述执行轨迹确定候选的失效原子性缺陷;运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;若所述多个共享数据不一致,则确定所述失效原子性缺陷;这种处理方式,使得通过观察分布式系统的一次正确执行,无需注入节点失效,即可预测可能的原子性违反错误,并通过最后重放工作负载,注入节点失效,确定性地确认缺陷、重放缺陷;因此,可以有效检测出失效原子性缺陷,从而提升分布式系统的可靠性。
本申请实施例提供的缺陷处理方法,通过确定分布式系统包括的失效原子性缺陷;在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码;所述错误处理程序代码包括使所述多个共享数据保持一致的代码;若所述分布式系统在执行时发生与所述失效原子性缺陷对应的节点失效,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致;这种处理方式,使得当分布式系统发生与所述失效原子性缺陷对应的节点失效时,可及时捕获及处理该错误,对多个共享数据执行一致性处理;因此,可以有效提升共享数据一致性,从而提升分布式系统的可靠性。
附图说明
图1是本申请提供的一种缺陷检测方法的实施例的流程图;
图2是本申请提供的一种缺陷检测方法的实施例的共享数据及关键操作的示意图;
图3a是本申请提供的一种缺陷检测方法的实施例的一种失效原子性违背模式的示意图;
图3b是本申请提供的一种缺陷检测方法的实施例的另一种失效原子性违背模式的示意图;
图3c是本申请提供的一种缺陷检测方法的实施例的又一种失效原子性违背模式的示意图;
图4是本申请提供的一种缺陷检测装置的实施例的示意图;
图5是本申请提供的一种缺陷处理方法的实施例的流程图;
图6是本申请提供的一种缺陷处理装置的实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,提供了缺陷检测方法和装置,以及缺陷处理方法和装置。在下面的实施例中逐一对各种方案进行详细说明。
本申请实施例提供的技术方法,其核心的技术思想是:通过观察分布式系统的一次正确执行,无需注入节点失效,即可预测可能的原子性违反错误,并通过最后重放工作负载,注入节点失效,确定性地确认缺陷、重放缺陷。由于可以检测出原子性违反错误,因此可以有效提升分布式系统的可靠性。
第一实施例
请参考图1,其为本申请提供的一种缺陷检测方法实施例的流程图,该方法的执行主体包括缺陷检测装置。本申请提供的一种缺陷检测方法包括:
步骤S101:确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹。
所述分布式系统,包括但不限于:分布式存储系统、分布式计算框架、同步服务、集群管理服务等等,如HDFS、HBase、Hadoop、Spark、ZooKeeper、Mesos、YARN。在本实施例中,分布式系统为分布式应用程序协调服务Zookeeper。
分布式系统提供的服务中的一些操作在多个共享数据一致性维度上是原子不可分的,各步操作要么都执行了,要么都不执行,本申请实施例将这些操作称为具有原子性关系的多个共享数据处理操作,简称为原子性关联操作。在这些原子性关联操作结束之后,相关的各个共享数据处理结果都应该保持一致。所述失效原子性缺陷与针对同一数据源的多个共享数据的关联操作有关,可包括一个或多个节点失效,节点失效可发生在两个原子性关联操作之间的时刻。
需要说明的是,共享数据一致性并不局限于每个共享数据完全相同,如文件1和文件2中的商品库存数量均为1000;也可以是每个共享数据间部分数据相同,如文件1中的商品编号为“123”,文件2中的商品编号为“A-123”等等。
步骤S101可采用如下方式实现:运行指定的工作负载,如系统本身自带的测试用例,驱动分布式系统运行,记录在该负载下,共享数据的使用过程,生成系统执行轨迹。例如,与共享数据v对应的具有原子性关系的关键操作包括:1)将共享数据v写入节点1中的文件file1,以及将共享数据v写入节点1中的文件file2;2)将共享数据v发送至节点2,以及将共享数据v写入节点2中的资源resource;3)将共享数据v发送至节点3,存储在节点3的内存变量中;共享数据v的系统执行轨迹为节点1中的文件file1和file2、节点2中的资源resource、节点3中的内存变量。
在本实施例中,除了记录与共享数据对应的具有原子性关系的关键操作(如文件写、网络数据发送等等操作),也记录其他关键操作,如线程创建/合并,线程通知/等待,消息收发操作等。通过这些数据及数据处理过程,构建事件之间的因果关系,可以更为准确地追踪共享数据的使用过程,从而提升系统执行轨迹的准确度。
在本实施例中,所述方法还可包括如下步骤:识别分布式系统中的关键操作;根据识别出的关键操作确定共享数据。
所述关键操作,包括涉及文件写、网络数据发送的操作。例如,Zookeeper中的关键操作包括涉及文件读写、网络读写的应用程序编程接口(Application ProgrammingInterface,API)等等。
要识别分布式系统(比如Zookeeper)中的关键操作,可采用如下方式:首先,通过人工分析,识别基本的文件操作指令,如Java中文件相关的IO操作等;接着,通过分析调用关系,识别系统中涉及文件读写、网络读写的API,将这些API视为关键操作。具体实施时,可通过静态分析方式自动提取关键操作,以识别具有原子性关系的关键操作对。
所述多个共享数据包括源于同一数据源的数据,这些数据具有共享关系。所述共享数据,可以是位于同一个节点的不同持久化文件中的数据,如被节点N分别写入三个文件中的数据为共享数据;也可以是被某个节点写入持久化文件并发送给另外一个节点的数据,如被节点N1写入文件x并发送给节点N2的两个数据为共享数据;还可以是被某个节点发送给多个节点的数据,如被节点N1发送给节点N2和N3的两个数据为共享数据。
要识别分布式系统中的共享数据,可采用如图2所示的方式实现:从所述分布式系统的源程序代码中所有的文件操作和消息发送操作出发,通过数据依赖分析,分析写入文件的数据以及消息包中的数据的来源,直到找到它们的一份共享数据来源,则把这样的数据标记为共享数据。例如,如果发现三个文件中的数据都是由节点N写入的,则这三个文件中的数据为共享数据。步骤S103:根据所述执行轨迹确定候选的失效原子性缺陷。
确定执行轨迹的目的是为了追踪共享数据的使用过程(轨迹)和因果链条,从而确定在哪些节点上发生了数据共享。本申请实施例通过分析分布式系统的执行轨迹,发现共享数据的使用过程,将其与预设的失效原子性缺陷模式进行匹配,发现可能会引发失效原子性违背的节点失效注入点。
如图3所示,本发明的发明人发现如下3类失效原子性违背模式:
第一种模式如图3a所示,变量v(如姓名“张三”,v0)是一份共享数据,它可能被节点N分别写入文件1(如file1)和文件2(如file2),因此保存在这两份文件中的v(v1和v2)的值应该具有一致性,对这两个文件的写操作w1和w2可以看做是一对关联操作。当一个节点失效发生在这两次文件写操作中间(如t1时刻执行w1操作,t2时刻执行w2操作,则节点N在t1和t2之间某时刻失效)时,可能会使这两份文件产生不一致(v1<>v2),进而在节点失效恢复过程中产生异常(节点N恢复后v1<>v2)。
如果根据系统执行轨迹确定共享数据的使用过程符合上述第一种模式,则可确定与该共享数据关联的关键操作构成候选的失效原子性缺陷,节点失效注入点可以是:在执行w1操作后且在执行w2操作前的某个时刻使得节点N失效。
第二种模式如图3b所示,变量v是一份共享数据,它可能被节点1写入文件file1(v1),同时被节点1发送给节点2。当节点2收到消息后,有可能会把v的值保存到某份资源resource(v2)中,如写入某个文件或保存在某个内存变量中,因此保存在file1和resource中的v值应当具有一致性。当节点1在写文件操作和发送消息操作之间发生节点失效时,可能会造成两份不一致的数据,进而在节点失效恢复过程中产生异常。
如果根据系统执行轨迹确定共享数据的使用过程符合上述第二种模式,则可确定与该共享数据关联的关键操作构成候选的失效原子性缺陷,节点失效注入点包括但不限于:在执行w1操作后使得节点1失效,在执行w2操作前使得节点2失效。
第三种模式如图3c所示,变量v是一份共享数据,它可能被节点1分别发送给节点2和节点3,在收到消息之后,节点2和节点3分别将v的值保存在资源1(v1)和资源2中(v2),因此保存在节点2和节点3上的这两份数据v1和v2应当具有一致性。当节点1在两次消息发送操作中间发生节点失效时,可能会造成节点2和节点3上的数据(v1和v2)不一致,进而在节点失效恢复过程中产生异常。
如果根据系统执行轨迹确定共享数据的使用过程符合上述第三种模式,则可确定与该共享数据关联的关键操作构成候选的失效原子性缺陷,节点失效注入点包括但不限于:在节点1将共享数据v发送给节点2后使得节点1失效,在节点2执行w1操作后使得节点1失效,在节点3执行w2操作前使得节点3失效。
步骤S105:运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统。
根据上一步发现的节点失效注入点,重新运行所述分布式系统,并在相应的失效注入点插入节点失效。在本实施例中,重放步骤S101的工作负载运行所述分布式系统。
例如,在上述第一种模式中,通过在执行w1操作后注入节点N失效,使得在节点N将变量v0写入文件file1后,不会继续执行w2操作,即不会使得节点N将变量v0写入文件file2中。
再例如,在上述第二种模式中,通过在执行w1操作后注入节点1失效,使得在节点1将变量v0写入文件file1后,不会继续执行将变量v0发送给节点2,即不会使得节点2将变量v0写入节点2的资源resource或内存中。
又例如,在上述第三种模式中,通过在节点1将变量v0发送给节点2后注入节点1失效,使得在节点1将变量v0发送给节点2后,不会继续执行将变量v0发送给节点3,即不会使得节点3将变量v0写入节点3的资源resource或内存中。
步骤S107:获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据。
要观察注入节点失效后系统是否满足用户约束,需要获取系统注入节点失效后的与所述失效原子性缺陷相关的多个共享数据。在本实施例中,在执行完多个原子性关联操作后,可以根据多个共享数据的位置及数据名获取与这些操作关联的多个共享数据。例如,在上述第一种模式中,分别从节点N的文件file1、file2中读取与数据源v0关联的共享数据v1和v2;在上述第二种模式中,分别从节点1中的文件file1、节点2中的资源resource或内存中读取共享数据v1和v2;在上述第三种模式中,分别从节点2中的resource、节点3中的resource中读取共享数据v1和v2。
在获取多个共享数据后,就可以进入下一步观察系统是否满足用户约束,从而确定候选的失效原子性缺陷是否为真正的失效原子性缺陷。
步骤S109:若所述多个共享数据不一致,则确定失效原子性缺陷。
通过判断所述多个共享数据是否一致,也就是说观察分布式系统是否满足用户约束,确定候选的失效原子性缺陷是否为真正的失效原子性缺陷。其中,用户约束包括所述多个共享数据相互一致的约束。
以上述第一种模式为例,在节点失效恢复过程中,如果这两份文件的共享数据一致(v1=v2),即未产生异常,则表示步骤S103确定的候选的失效原子性缺陷不是真正的失效原子性缺陷;如果这两份文件的共享数据产生不一致(v1<>v2),即产生异常(节点N恢复后v1<>v2),则表示步骤S103确定的候选的失效原子性缺陷是真正的失效原子性缺陷。
在本实施例中,所述缺陷检测方法的处理过程包括如下步骤:
1)通过静态分析方式,根据分布式系统的源程序代码确定关键操作;
2)通过分析数据依赖关系,根据关键操作确定共享数据;
3)运行分布式系统确定共享数据的执行轨迹;
4)根据执行轨迹确定与共享数据相关的待验证的节点失效;
5)向分布式系统注入待验证的节点失效;
6)如果共享数据在注入节点失效后并不一致,则确定失效原子性缺陷。
从上述实施例可见,通过确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;根据所述执行轨迹确定候选的失效原子性缺陷;运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;若所述多个共享数据不一致,则确定所述失效原子性缺陷;这种处理方式,使得通过观察分布式系统的一次正确执行,无需注入节点失效,即可预测可能的原子性违反错误,并通过最后重放工作负载,注入节点失效,确定性地确认缺陷、重放缺陷;因此,可以有效检测出失效原子性缺陷,从而提升分布式系统的可靠性。
在上述的实施例中,提供了一种缺陷检测方法,与之相对应的,本申请还提供一种缺陷检测装置。该装置是与上述方法的实施例相对应。
第二实施例
请参看图4,其为本申请的缺陷检测装置的实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本申请另外提供一种缺陷检测装置,包括:
执行轨迹确定单元401,用于确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;
候选缺陷确定单元403,用于根据所述执行轨迹确定候选的失效原子性缺陷;
节点失效注入单元405,用于运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;
共享数据获取单元407,用于获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;
缺陷确定单元409,用于若所述多个共享数据不一致,则确定所述失效原子性缺陷。
可选的,所述多个共享数据处理操作包括在一个节点内对两个以上文件的共享数据写操作;所述失效原子性缺陷包括任意两次共享数据写操作间的节点失效原子性缺陷。
可选的,所述多个共享数据处理操作包括在源节点内对文件的共享数据写操作、和源节点对目标节点的共享数据发送操作;所述失效原子性缺陷包括共享数据写操作与共享数据发送操作间的源节点失效原子性缺陷。
可选的,所述多个共享数据处理操作包括源节点对第一目标节点的共享数据发送操作、和源节点对第二目标节点的共享数据发送操作;所述失效原子性缺陷包括第一共享数据发送操作与第二共享数据发送操作间的源节点失效原子性缺陷。
可选的,所述执行轨迹确定单元401,具体用于对所述分布式系统执行系统测试,并记录所述分布式系统在测试数据下的所述执行轨迹。
可选的,所述节点失效注入单元405包括:
系统运行子单元,具体用于根据所述测试数据重新对所述分布式系统执行系统测试。
可选的,还包括:
共享数据确定单元,用于根据所述分布式系统的源程序代码,确定与各个数据源分别对应的多个共享数据、和所述多个共享数据处理操作。
可选的,所述多个共享数据处理操作包括以下操作的至少一个:数据写操作,数据发送操作。
在上述的实施例中,提供了一种缺陷检测方法,与之相对应的,本申请还提供一种缺陷处理方法。该方法是与上述方法的实施例相对应。
第三实施例
请参考图5,其为本申请的缺陷处理方法的实施例的流程图。由于该方法实施例与实施例一的方法实施例相对应,所以描述得比较简单,相关之处参见方法实施例一的部分说明即可。
本申请另外提供一种缺陷处理方法,包括:
步骤S501:确定分布式系统包括的失效原子性缺陷。
本步骤可采用上述实施例一的方式实现,也可以采用其它实施方式,如通过人工方式识别失效原子性缺陷等等。
步骤S503:在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码。
所述错误处理程序代码,包括使与所述失效原子性缺陷相关的多个共享数据保持一致的代码,包括但不限于:所述失效原子性缺陷的错误捕获代码,以及,捕获到错误后的共享数据一致性处理代码。
在源程序代码中增加错误处理程序代码后,就可以运行所述分布式系统,使其接收来自用户的服务请求。所述用户可以是人,人可以通过客户端向所述分布式系统发送服务请求;所述用户也可以是其它软件系统等等。
步骤S505:若所述分布式系统在执行时发生与所述失效原子性缺陷对应的节点失效,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致。
在所述分布式系统运行过程中,如果发生所述失效原子性缺陷,即在该缺陷相关的多个原子性关联操作间出现节点失效,则将通过所述错误处理程序代码捕获所述失效原子性缺陷的错误,并通过所述错误处理程序代码处理该错误。
在一个示例中,所述共享数据一致性处理代码包括回滚已执行的共享数据关联操作的程序代码。
在一个示例中,所述共享数据一致性处理代码包括根据已执行的共享数据关联操作处理的共享数据,执行在所述已执行的共享数据关联操作之后的关联操作。
需要说明的是,大规模分布式系统由数量众多的计算节点组成,运行不同的复杂协议。这些系统中的计算节点可能面临以下异常情况:1)单个计算节点通常是普通的个人电脑(PC),其存在多种可靠性问题,比如,磁盘损坏、内存错误等硬件问题,以及操作系统崩溃等等,这将导致计算节点失效(Node crash),或者具有错误的数据与行为;2)单个计算节点或者整个数据中心出现断电等行为,导致多个计算节点宕机、重启等等;3)由于数据中心管理的需求,比如突发用户请求,需要将某些节点加入数据中心,或者负载较轻时,移除部分计算节点。上述这些行为将导致计算结点、数据中心等出现节点失效。
从上述实施例可见,本申请实施例提供的缺陷处理方法,通过确定分布式系统包括的失效原子性缺陷;在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码;所述错误处理程序代码包括使与所述失效原子性缺陷相关的多个共享数据保持一致的代码;若所述分布式系统在执行时发生与所述失效原子性缺陷对应的错误,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致;这种处理方式,使得当分布式系统发生与所述失效原子性缺陷对应的节点失效时,可及时捕获及处理该错误,对多个共享数据执行一致性处理;因此,可以有效提升共享数据一致性,从而提升分布式系统的可靠性。
在上述的实施例中,提供了一种缺陷处理方法,与之相对应的,本申请还提供一种缺陷处理装置。该装置是与上述方法的实施例相对应。
第四实施例
请参看图6,其为本申请的缺陷处理装置的实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本申请另外提供一种缺陷处理装置,包括:
缺陷确定单元601,用于确定分布式系统包括的失效原子性缺陷;
错误代码增加单元603,用于在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码;
错误处理单元605,用于若所述分布式系统在执行时发生与所述失效原子性缺陷对应的节点失效,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (11)
1.一种缺陷检测方法,其特征在于,包括:
确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;
将所述执行轨迹与失效原子性缺陷模式进行匹配,若符合所述模式,则确定与所述共享数据关联的具有原子性关系的关键操作构成候选的失效原子性缺陷;
运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;
获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;
若所述多个共享数据不一致,则确定失效原子性缺陷。
2.根据权利要求1所述的方法,其特征在于,
所述多个共享数据处理操作包括在一个节点内对两个以上文件的共享数据写操作;
所述失效原子性缺陷包括任意两次共享数据写操作间的节点失效原子性缺陷。
3.根据权利要求1所述的方法,其特征在于,
所述多个共享数据处理操作包括在源节点内对文件的共享数据写操作、和源节点对目标节点的共享数据发送操作;
所述失效原子性缺陷包括共享数据写操作与共享数据发送操作间的源节点失效原子性缺陷。
4.根据权利要求1所述的方法,其特征在于,
所述多个共享数据处理操作包括源节点对第一目标节点的共享数据发送操作、和源节点对第二目标节点的共享数据发送操作;
所述失效原子性缺陷包括第一共享数据发送操作与第二共享数据发送操作间的源节点失效原子性缺陷。
5.根据权利要求1所述的方法,其特征在于,所述执行轨迹采用如下步骤确定:
对所述分布式系统执行系统测试,并记录所述分布式系统在测试数据下的所述执行轨迹。
6.根据权利要求5所述的方法,其特征在于,所述运行所述分布式系统,包括:
根据所述测试数据重新对所述分布式系统执行系统测试。
7.根据权利要求1所述的方法,其特征在于,还包括:
确定与各个数据源分别对应的多个共享数据。
8.根据权利要求1所述的方法,其特征在于,所述多个共享数据处理操作包括以下操作的至少一个:数据写操作,数据发送操作。
9.一种缺陷处理方法,其特征在于,还包括:
采用权利要求1至8任一项所述的方法,确定分布式系统包括的失效原子性缺陷;
在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码;所述错误处理程序代码包括使与所述失效原子性缺陷相关的多个共享数据保持一致的代码;
若所述分布式系统在执行时发生与所述失效原子性缺陷对应的节点失效,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致。
10.一种缺陷检测装置,其特征在于,包括:
执行轨迹确定单元,用于确定分布式系统中具有原子性关系的多个共享数据处理操作的执行轨迹;
候选缺陷确定单元,用于将所述执行轨迹与失效原子性缺陷模式进行匹配,将匹配的所述模式作为候选的失效原子性缺陷;
节点失效注入单元,用于运行所述分布式系统,并将与所述候选的失效原子性缺陷对应的节点失效注入至所述分布式系统;
共享数据获取单元,用于获取运行所述分布式系统后的与所述失效原子性缺陷相关的多个共享数据;
缺陷确定单元,用于若所述多个共享数据不一致,则确定所述失效原子性缺陷。
11.一种缺陷处理装置,其特征在于,包括:
缺陷确定单元,用于采用权利要求1至8任一项所述的方法,确定分布式系统包括的失效原子性缺陷;
错误代码增加单元,用于在所述分布式系统的源程序代码中增加针对所述失效原子性缺陷的错误处理程序代码;
错误处理单元,用于若所述分布式系统在执行时发生与所述失效原子性缺陷对应的节点失效,则执行所述错误处理程序代码,以使与所述失效原子性缺陷相关的多个共享数据保持一致。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910296074.7A CN111813786B (zh) | 2019-04-12 | 2019-04-12 | 缺陷检测/处理方法和装置 |
PCT/CN2020/082707 WO2020207310A1 (zh) | 2019-04-12 | 2020-04-01 | 缺陷检测/处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910296074.7A CN111813786B (zh) | 2019-04-12 | 2019-04-12 | 缺陷检测/处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111813786A CN111813786A (zh) | 2020-10-23 |
CN111813786B true CN111813786B (zh) | 2024-06-11 |
Family
ID=72750888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910296074.7A Active CN111813786B (zh) | 2019-04-12 | 2019-04-12 | 缺陷检测/处理方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111813786B (zh) |
WO (1) | WO2020207310A1 (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999604A (zh) * | 2012-11-20 | 2013-03-27 | 北京奇虎科技有限公司 | 一种数据库性能的检测方法和装置 |
CN103473031A (zh) * | 2013-01-18 | 2013-12-25 | 龙建 | 协同并发式消息总线、主动构件组装模型及构件拆分方法 |
CN103823722A (zh) * | 2012-11-16 | 2014-05-28 | 国际商业机器公司 | 基于请求类型的选择性后置数据错误检测 |
CN105095092A (zh) * | 2015-09-25 | 2015-11-25 | 南京大学 | 基于静态分析和动态运行的Web应用JavaScript代码原子性违反检测 |
CN105117369A (zh) * | 2015-08-04 | 2015-12-02 | 复旦大学 | 一种基于异构平台的多种并行错误检测体系架构 |
CN106874074A (zh) * | 2016-12-26 | 2017-06-20 | 哈尔滨工业大学 | 一种基于软件事务内存的并发缺陷规避系统及方法 |
CN108804205A (zh) * | 2017-04-28 | 2018-11-13 | 英特尔公司 | 原子操作的智能线程分派和向量化 |
CN109522097A (zh) * | 2018-10-11 | 2019-03-26 | 天津大学 | 一种基于自适应随机测试的并发缺陷检测方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2001259403A1 (en) * | 2000-05-02 | 2001-11-12 | Sun Microsystem, Inc. | Method and system for providing cluster replicated checkpoint services |
CN101183377B (zh) * | 2007-12-10 | 2010-09-08 | 华中科技大学 | 一种基于消息中间件的高可用性数据库集群系统 |
US7827438B2 (en) * | 2008-06-10 | 2010-11-02 | Microsoft Corporation | Distributed testing system and techniques |
US10025788B2 (en) * | 2015-09-29 | 2018-07-17 | International Business Machines Corporation | Detection of file corruption in a distributed file system |
CN109002462B (zh) * | 2018-06-04 | 2020-11-27 | 北京明朝万达科技股份有限公司 | 一种实现分布式事务的方法及系统 |
-
2019
- 2019-04-12 CN CN201910296074.7A patent/CN111813786B/zh active Active
-
2020
- 2020-04-01 WO PCT/CN2020/082707 patent/WO2020207310A1/zh active Application Filing
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823722A (zh) * | 2012-11-16 | 2014-05-28 | 国际商业机器公司 | 基于请求类型的选择性后置数据错误检测 |
CN102999604A (zh) * | 2012-11-20 | 2013-03-27 | 北京奇虎科技有限公司 | 一种数据库性能的检测方法和装置 |
CN103473031A (zh) * | 2013-01-18 | 2013-12-25 | 龙建 | 协同并发式消息总线、主动构件组装模型及构件拆分方法 |
CN105117369A (zh) * | 2015-08-04 | 2015-12-02 | 复旦大学 | 一种基于异构平台的多种并行错误检测体系架构 |
CN105095092A (zh) * | 2015-09-25 | 2015-11-25 | 南京大学 | 基于静态分析和动态运行的Web应用JavaScript代码原子性违反检测 |
CN106874074A (zh) * | 2016-12-26 | 2017-06-20 | 哈尔滨工业大学 | 一种基于软件事务内存的并发缺陷规避系统及方法 |
CN108804205A (zh) * | 2017-04-28 | 2018-11-13 | 英特尔公司 | 原子操作的智能线程分派和向量化 |
CN109522097A (zh) * | 2018-10-11 | 2019-03-26 | 天津大学 | 一种基于自适应随机测试的并发缺陷检测方法 |
Non-Patent Citations (2)
Title |
---|
线程交互不变量的原子性违例错误并发检测;李兰英;孙建达;朱素霞;;计算机科学与探索;20170831(第07期);全文 * |
面向大数据的异构内存系统;王孝远;廖小飞;刘海坤;金海;;大数据;20180715(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111813786A (zh) | 2020-10-23 |
WO2020207310A1 (zh) | 2020-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Leesatapornwongsa et al. | TaxDC: A taxonomy of non-deterministic concurrency bugs in datacenter distributed systems | |
Huang et al. | Capturing and enhancing in situ system observability for failure detection | |
CN109643255B (zh) | 在云系统中自动检测分布式并发错误 | |
Khan et al. | Dustminer: troubleshooting interactive complexity bugs in sensor networks | |
US7475387B2 (en) | Problem determination using system run-time behavior analysis | |
Cotroneo et al. | How do bugs surface? A comprehensive study on the characteristics of software bugs manifestation | |
US9436583B1 (en) | Minimally disruptive debugging in a production environment | |
US10635575B2 (en) | Testing of enterprise resource planning systems | |
US11500854B2 (en) | Selective data synchronization to troubleshoot production environment failures | |
CN110121694B (zh) | 一种日志管理方法、服务器和数据库系统 | |
CN112789602B (zh) | 软件故障的反向调试 | |
CN107077350A (zh) | 用于在第一存储器中跟踪对象的方法和装置 | |
US10860411B2 (en) | Automatically detecting time-of-fault bugs in cloud systems | |
US12045739B2 (en) | Best outcome AIOps modeling with data confidence fabrics | |
Sun et al. | Reasoning about modern datacenter infrastructures using partial histories | |
CN111813786B (zh) | 缺陷检测/处理方法和装置 | |
WO2023083119A1 (en) | Real-time error debugging | |
US20160217027A1 (en) | Processing of PDSE Extended Sharing Violations Among Sysplexes with a Shared DASD | |
CN111949479B (zh) | 交互系统和索引创建情况的确定方法、设备 | |
CN111858307B (zh) | 模糊测试方法和设备 | |
Svensson et al. | A new leader election implementation | |
CN111104256A (zh) | 一种数据读取方法、装置、设备及存储介质 | |
US20230229582A1 (en) | Information processing apparatus, processing method for information processing apparatus, and storage medium | |
CN113609104B (zh) | 一种部分故障的键值对分布式存储系统访问方法及装置 | |
Rattanasuksun | A Comprehensive Framework to Replicate Process-Level Concurrency Faults |
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 |