临时故障时的数据修复方法及分布式缓存系统的制作方法

文档序号:7692490阅读:147来源:国知局
专利名称:临时故障时的数据修复方法及分布式缓存系统的制作方法
技术领域
本发明涉及云计算技术领域,尤其涉及一种临时故障时的数据修复方法及分布式缓存系统。
背景技术
云计算(Cloud Computing)是网格计算(Grid Computing)、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(UtilityComputing)网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机技术和网络技术发展融合的产物。它旨在通过网络把多个成本相对较低的计算实体整合成一个具有强大计算能力的系统。分布式缓存是云计算范畴中的一个领域,其作用是提供海量数据的分布式存储服务以及高速读写访问的能力。
分布式缓存系统由若干服务器节点和客户端互相连接构成,其中,服务器节点负责数据的存储,客户端可以对服务器节点做数据的写入、读取、更新、删除等操作。一般来说,写入的数据不可能只保存在单个服务器节点上,而是在多台服务器节点上保存同一个数据的副本,互为备份,所述数据由键(Key)和值(Value)构成,Key相当于数据的索引,Value是Key所代表数据的数据内容,逻辑上Key和Value是--对应的关系。在分布式缓存系统中,保证数据的一致性是关键问题。在故障恢复后,数据在分布式缓存系统中各服务器节点上保存的各个副本可能会变得不一致。例如,在对一个Key对应的数据反复执行写入、更新、删除等动作期间,如果存在网络故障或各种软硬件故障,则在故障恢复后,不同的服务器节点上保存的所述Key对应的Value可能就会不同。现有技术在故障恢复后,如果立即要通过Key读取数据,则将各个副本取出并比较,根据一定的数据版本号比较规则选择出正确的Value,同时对旧数据进行修复,以保持同一数据的多个副本的一致性。但如果从故障恢复到需要通过Key读取数据之间,多个副本所在的服务器节点相继发生了多次故障,则在需要通过Key读取数据时,可能会出现读不到数据、或读到较旧的数据、或读到的各个副本间无从比较新旧等情况,从而降低了分布式缓存系统的质量属性,并且严重影响了分布式缓存系统的应用体验。

发明内容
有鉴于此,本发明的主要目的在于提供一种临时故障时的数据修复方法及分布式缓存系统,能够在分布式缓存系统中服务器节点故障恢复后维持同一数据各副本的一致性。为达到上述目的,本发明的技术方案是这样实现的本发明提供了一种临时故障时的数据修复方法,所述方法包括协同服务器向副本服务器发起数据操作时,发现有副本服务器故障,则生成包含有操作过的各数据键(Key)的Key变更记录;在所述副本服务器从故障中恢复后,所述协同服务器根据所述Key变更记录,向所述副本服务器发起数据修复操作;所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复。在上述方案中,所述向副本服务器发起数据操作,包括向副本服务器发起数据的写入操作或更新操作。在上述方案中,所述生成包含有故障期间进行过操作的各数据Key的Key变更记录,还包括所述协同服务器为所述副本服务器建立存储集;在所述副本服务器故障期间,所述协同服务器生成包含有故障期间操作过的各数据Key的Key变更记录,并保存到所述副本服务器的存储集中。在上述方案中,所述协同服务器根据所保存的Key变更记录,向所述副本服务器 发起数据修复操作,包括所述协同服务器获取所述Key变更记录中各Key对应的所有数据副本,并识别出所述Key变更记录中各Key对应的上一次操作过的数据副本;使用识别出的所述上一次进行过操作的数据副本对所述副本服务器发起数据修复操作。在上述方案中,所述识别出所述Key变更记录中各Key对应的上一次操作过的数据副本,为对所获取的所有数据副本中相同Key的多个数据副本进行版本比较,得到所述各Key对应的上一次操作过的数据副本。在上述方案中,所述协同服务器获取所述Key变更记录中各Key对应的所有数据副本,为所述协同服务器从所述各Key对应的所有副本服务器中读取所述各Key对应的数据副本、以及从自身获取所述各Key对应的数据副本。在上述方案中,所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复,包括所述副本服务器根据所述Key变更记录中各Key对应的上一次操作过的数据副本,更新本地保存的数据副本。在上述方案中,在所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复之后,所述方法还包括所述副本服务器在更新本地保存的数据副本后,向所述协同服务器返回修复结果;在所述修复结果为失败时,所述协同服务器继续向所述副本服务器发起数据更新操作。本发明还提供了一种用于临时故障时数据修复的分布式缓存系统,所述系统包括协同服务器、以及一个或多个副本服务器,其中,协同服务器,用于向所述一个或多个副本服务器发起数据操作时,发现有副本服务器故障,则生成包含有操作过的各数据Key的Key变更记录;以及,用于在所述副本服务器从故障中恢复后,根据所述Key变更记录,向所述副本服务器发起数据修复操作;所述一个或多个副本服务器,用于在故障恢复后,根据所述协同服务器发起的数据修复操作进行本地数据修复。在上述方案中,所述协同服务器,还用于所述各副本服务器建立存储集;在所述各副本服务器故障期间,生成包含有故障期间操作过的各数据Key的Key变更记录,并保存到所述各副本服务器的存储集中。在上述方案中,所述协同服务器,还用于获取所述Key变更记录中各Key对应的所有数据副本,识别出所述Key变更记录中各Key对应的上一次操作过的数据副本,并使用识别出的所述上一次操作过的数据副本对所述副本服务器发起数据修复操作。在上述方案中,所述副本服务器,还用于根据所述协同服务器发起数据修复操作使用的所述上一次操作过的数据副本,更新本地保存的数据副本。在上述方案中,所述副本服务器,还用于在更新本地保存的数据副本后,向所述协同服务器返回修复结果;所述协同服务器,还用于在所述副本服务器反馈的修复结果为失 败时,继续向所述副本服务器发起数据更新操作。本发明所提供临时故障时的数据修复方法及分布式缓存系统,由协同服务器在发现有副本服务器故障时,生成Key变更记录,在所述副本服务器从故障中恢复后,根据所述Key变更记录向所述副本服务器发起数据修复操作,使得所述副本服务器能够及时进行本地数据修复,从而保证了临时故障恢复后,数据的多个副本间仍能够保持一致性,提高了分布式缓存系统保存数据的准确性,提升了分布式缓存系统的质量属性,优化了应用的体验。


图I为本发明一种临时故障时的数据修复方法的实现流程图;图2为本发明一种具体实施例中分布式缓存系统的组成结构示意图;图3为本发明一种具体实施例中分布式缓存系统临时故障时数据修复过程的实现流程图。
具体实施例方式本发明的基本思想是在进行数据操作时,如进行数据的写入或更新时,分布式缓存系统中的协同服务器发现有副本服务器故障时,生成所述数据的变更记录并保存;在所述副本服务器故障恢复后,协同服务器根据所述数据的变更记录对所述副本服务器进行数据修复,使得所述副本服务器上所述数据的副本与其他副本服务器中所述数据的副本保持一致,如此,保证了临时故障恢复后数据的多个副本间的一致性。本发明的一种临时故障时的数据修复方法,应用于分布式缓存系统,能够,在临时故障恢复后,快速保持数据副本间的一致性,参照图I所示,所述方法主要包括以下步骤步骤101 :协同服务器向副本服务器发起数据操作时,发现有副本服务器故障,则生成包含有操作过的各数据Key的Key变更记录;具体地,协同服务器在接收到客户端发起的Key-Value的数据写入请求或数据更新请求后,需要向各副本服务器发起数据的写入操作或更新操作时,发现有副本服务器故障,贝1J生成Key变更记录。其中,协同服务器是分布式缓存系统中运行正常的服务器节点,用于接收客户端发起的数据操作,并相应的向各副本服务器发起数据操作。
副本服务器是分布式缓存系统中保存有当前需操作数据的数据副本的所有服务器节点中、除所述协同服务器之外的各服务器节点。其中,Key变更记录中。实际应用中,所述协同服务器可以为各副本服务器建立存储集;在各副本服务器故障期间,所述协同服务器生成包含有故障期间操作过的各数据Key的Key变更记录,即包含故障期间发生过写入或更新的数据的Key的Key变更记录,并保存到各副本服务器的存储集中。如此,变更记录中只需要保存数据的Key即可,不需要保存数据的Value,代价很小,节省资源。步骤102 :在所述副本服务器从故障中恢复后,所述协同服务器根据所述Key变更记录,向所述副本服务器发起数据修复操作;具体地,所述协同服务器获取所述Key变更记录中各Key对应的所有数据副本,并识别出所述Key变更记录中各Key对应的上一次操作过的数据副本;使用识别出的所述上 一次进行过操作的数据副本对所述副本服务器发起数据修复操作。这里,协同服务器通过对所获取的所有数据副本中相同Key的多个数据副本进行版本比较,得到所述各Key对应的上一次操作过的数据副本。这里,所述协同服务器可以从所述各Key对应的所有副本服务器中读取所述各Key对应的数据副本、以及从自身获取所述各Key对应的数据副本,完成所述各Key对应的所有数据副本的获取。步骤103 :所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复。具体地,所述副本服务器根据所述Key变更记录中各Key对应的上一次操作过的数据副本,更新本地保存的数据副本。这里,所述副本服务器根据发起数据修复操作时使用的数据副本,将故障期间发生过写入或更新操作的Key及对应的Value和版本号信息等保存到本地,完成本地数据副本的更新。这里,在步骤103之后,所述方法还包括所述副本服务器在更新本地保存的数据副本后,向所述协同服务器返回修复结果;在所述修复结果为失败时,所述协同服务器继续向所述副本服务器发起数据更新操作。在所述修复结果为成功时,结束当前的数据修复过程。相应的,本发明还提供了一种用于临时故障时的数据修复的分布式缓存系统,所述系统包括协同服务器、以及一个或多个副本服务器,其中,协同服务器,用于向所述一个或多个副本服务器发起数据操作时,发现有副本服务器故障,则生成包含有操作过的各数据Key的Key变更记录;以及,用于在所述副本服务器从故障中恢复后,根据所述Key变更记录,向所述副本服务器发起数据修复操作;所述一个或多个副本服务器,用于在故障恢复后,根据所述协同服务器发起的数据修复操作进行本地数据修复。其中,所述协同服务器,还用于所述各副本服务器建立存储集;在所述各副本服务器故障期间,生成包含有故障期间操作过的各数据Key的Key变更记录,并保存到所述各副本服务器的存储集中。具体地,所述协同服务器,还用于获取所述Key变更记录中各Key对应的所有数据副本,识别出所述Key变更记录中各Key对应的上一次操作过的数据副本,并使用识别出的所述上一次操作过的数据副本对所述副本服务器发起数据修复操作。其中,所述副本服务器,还用于根据所述协同服务器发起数据修复操作使用的所述上一次操作过的数据副本,更新本地保存的数据副本。其中,所述副本服务器,还可以用于在更新本地保存的数据副本后,向所述协同服务器返回修复结果;所述协同服务器,还可以用于在所述副本服务器反馈的修复结果为失败时,继续向所述副本服务器发起数据更新操作,重新进行数据修复,直到所述修复结果为成功。实施例一本实施例中,由服务器节点和客户端构成的分布式缓存系统如图2所示,该分布式缓存系统包括三个服务器节点(第一服务器节点、第二服务器节点和第三服务器节点)和两个客户端(第一客户端和第二客户端),其中,各客户端与各服务器节点建立连接,月艮 务器节点间互相建立连接。在客户端发起数据更新操作后,在数据更新过程中进行临时故障的数据修复的具体实现过程,如图3所示,具体步骤如下步骤301,第一客户端发起数据更新操作,根据数据的Key选择一台服务器节点作为协同服务器,并向将所述协同服务器发送对一个Key-Value的数据更新请求;具体地,对于一个特定数据的Key,可以根据一定的优先级将分布式缓存系统的服务器集群可以看作是一个协同服务器和多个副本服务器的集群,不同的Key可能会有不同的协同服务器和副本服务器。此外,协同服务器的选取也需要参考当时的网络条件,该网络条件包括各服务器节点的工作状态是否正常等。本实施例中,根据需要进行更新操作的数据的Key和当前的网络条件,选择第一服务器节点作为协同服务器。步骤302,协同服务器接收所述数据更新请求,并将所述第一客户端发送数据更新请求时所发送数据的Key和Value进行存储,更新本地数据。这里,协同服务器更新本地数据时,如果更新失败,则向所述第一客户端返回更新失败的回应,可以返回步骤301重新进行,还可以结束当前流程。步骤303,协同服务器根据一定规则识别出所述数据的Key对应的副本服务器,并向识别出的各副本服务器发起数据更新操作;这里,协同服务器可以根据一致性哈希规则或根据按字段分段规则识别副本服务器。例如,可以通过哈希算法得到所述数据的Key对应的哈希值,由所得到的哈希值找到对应保存有所述Key对应的数据副本的其他服务器节点,所找到的其他服务器节点即为所述数据的Key对应的副本服务器。本实施例中,协同服务器识别出第二服务器节点和第三服务器节点为所述Key对应的副本服务器,向第二服务器节点和第三服务器节点发送数据更新请求,发起数据更新操作。步骤304,协同服务器在发起数据更新操作后,发现所述Key对应的副本服务器中有服务器节点存在故障,生成所述Key的变更记录并暂存于本地;
具体地,如果服务器节点存在故障,服务器节点将无法接收信息和发出信息。协同服务器在向各副本服务器发起数据更新操作时,发现无法向一个副本服务器发起数据更新操作,即无法将数据更新请求送达该副本服务器时,则认为该副本服务器存在故障。本实施例中,协同服务器发现作为副本服务器的第三服务器节点存在故障,此时,生成所述Key的变更记录并暂存于本地。这里,所述Key的变更记录包括进行过当前更新操作的所有Key。步骤305,协同服务器接收正常运行的各副本服务器返回的回应,将包含有各副本服务器返回的回应和所述协同服务器的本地更新结果的更新操作结果返回给第一客户端;这里,正常运行的各副本服务器接收到协同服务器发起的数据更新请求后,分别将所述数据更新请求中数据的Key和Value进行存储,更新本地数据,如果更新成功,则向 所述协同服务器返回更新成功的回应,如果更新失败,则向所述协同服务器返回更新失败的回应。实际应用中,在存储容量不够的情况或类似情况下,会出现更新失败的结果。如果所有副本服务器均返回更新失败的回应,则协同服务器认为此次更新操作失败,可以返回步骤303或步骤301重新进行,还可以结束当前流程;否则,协同服务器认为此次更新操作成功,可以继续后续流程。这里,如果所述协同服务器进行本地数据更新成功,则向所述第一客户端返回表示更新成功的本地更新结果,如果所述协同服务器进行本地数据更新失败,则向所述第一客户端返回表示更新失败的本地更新结果。所述本地更新结果为所述协同服务器进行数据更新步骤306,故障中副本服务器恢复正常,开始对外提供服务;步骤307,协同服务器发现副本服务器恢复正常,加载步骤304中生成的变更记录,准备进行数据修复;实际应用中,故障中的副本服务器恢复正常后,会与所述协同服务器进行建联,重新连接所述协同服务器,并且会在连接后,通知分布式缓存系统中各服务器节点(包括协同服务器)开始对外提供服务,如此,协同服务器在收到故障中副本服务器的通知后便可以获知副本服务器已恢复正常。步骤308,协同服务器根据步骤304中生成的变更记录,从本地以及所有副本服务器上读取进行更新操作的所述数据的Key和Value、以及对应的版本号信息,得到所述数据的多个副本;具体地,协同服务器分别向各副本服务器(包括从故障中恢复的副本服务器)发起数据读取操作,并进行本地数据读取,各副本服务器向协同服务器返回包括有所述数据副本的读取结果,得到所述数据保存在各服务器节点(包括协同服务器和所有副本服务器)中的副本。步骤309,协同服务器对步骤308中获得的多个副本进行版本比较,识别出最近一次更新的副本;具体地,协同服务器将所述数据各副本的版本号信息进行比较,识别出最近一次进行更新的副本。
步骤310,协同服务器对步骤306中从临时故障中恢复的副本服务器进行数据修复,使用步骤309中得出的最近一次更新操作的副本;具体地,协同服务器使用步骤309中得出的最近一次更新操作的副本,向从临时故障中恢复的副本服务器(本实施例的第三服务器节点)发起数据修复。实际应用中,协同服务器向所述临时故障中恢复的副本服务器发送数据修复请求,该数据修复请求包含有所述数据最近一次更新操作的副本。步骤311,从临时故障中恢复的副本服务器接受数据修复,进行本地数据更新,并且返回修复结果给协同服务器,如果修复成功,则结束当前流程,如果修复失败,则返回步骤307重复进行数据修复,直到所述数据修复成功。具体地,从临时故障中恢复的副本服务器接收所述协同服务器发送的数据修复请求,从所述数据修复请求中提取所述数据最近一次更新操作的副本,并将所述数据最近一次更新操作的副本中所述数据的Key和Value保存,完成本地数据更新。
这里,如果所述从临时故障中恢复的副本服务器更新本地数据成功,则修复成功,向所述协同服务器返回表示修复成功的修复结果,结束当前流程;如果所述从临时故障中恢复的副本服务器更新本地数据失败,则修复失败,向所述协同服务器返回表示修复失败的修复结果,并返回步骤307重复进行数据修复,直到所述数据修复成功。如此,客户端发起数据更新操作后,发送临时故障的服务器节点可以在恢复后及时进行数据修复,保证了数据各副本的一致性。实际应用中,修复过程中临时故障中恢复的副本服务器再次故障、或者网络故障、或者服务器繁忙长时间未响应都会造成修改失败。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种临时故障时的数据修复方法,其特征在于,所述方法包括 协同服务器向副本服务器发起数据操作时,发现有副本服务器故障,则生成包含有操作过的各数据键(Key)的Key变更记录; 在所述副本服务器从故障中恢复后,所述协同服务器根据所述Key变更记录,向所述副本服务器发起数据修复操作; 所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复。
2.根据权利要求I所述临时故障时的数据修复方法,其特征在于,所述向副本服务器发起数据操作,包括向副本服务器发起数据的写入操作或更新操作。
3.根据权利要求I或2所述临时故障时的数据修复方法,其特征在于,所述生成包含有故障期间进行过操作的各数据Key的Key变更记录,还包括 所述协同服务器为所述副本服务器建立存储集; 在所述副本服务器故障期间,所述协同服务器生成包含有故障期间操作过的各数据Key的Key变更记录,并保存到所述副本服务器的存储集中。
4.根据权利要求I或3所述临时故障时的数据修复方法,其特征在于,所述协同服务器根据所保存的Key变更记录,向所述副本服务器发起数据修复操作,包括 所述协同服务器获取所述Key变更记录中各Key对应的所有数据副本,并识别出所述Key变更记录中各Key对应的上一次操作过的数据副本; 使用识别出的所述上一次进行过操作的数据副本对所述副本服务器发起数据修复操作。
5.根据权利要求4所述临时故障时的数据修复方法,其特征在于,所述识别出所述Key变更记录中各Key对应的上一次操作过的数据副本,为 对所获取的所有数据副本中相同Key的多个数据副本进行版本比较,得到所述各Key对应的上一次操作过的数据副本。
6.根据权利要求4所述临时故障时的数据修复方法,其特征在于,所述协同服务器获取所述Key变更记录中各Key对应的所有数据副本,为 所述协同服务器从所述各Key对应的所有副本服务器中读取所述各Key对应的数据副本、以及从自身获取所述各Key对应的数据副本。
7.根据权利要求4所述临时故障时的数据修复方法,其特征在于,所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复,包括 所述副本服务器根据所述Key变更记录中各Key对应的上一次操作过的数据副本,更新本地保存的数据副本。
8.根据权利要求7所述临时故障时的数据修复方法,其特征在于,在所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复之后,所述方法还包括 所述副本服务器在更新本地保存的数据副本后,向所述协同服务器返回修复结果; 在所述修复结果为失败时,所述协同服务器继续向所述副本服务器发起数据更新操作。
9.一种用于临时故障时数据修复的分布式缓存系统,其特征在于,所述系统包括协同服务器、以及一个或多个副本服务器,其中, 协同服务器,用于向所述一个或多个副本服务器发起数据操作时,发现有副本服务器故障,则生成包含有操作过的各数据Key的Key变更记录;以及,用于在所述副本服务器从故障中恢复后,根据所述Key变更记录,向所述副本服务器发起数据修复操作; 所述一个或多个副本服务器,用于在故障恢复后,根据所述协同服务器发起的数据修复操作进行本地数据修复。
10.根据权利要求9所述的分布式缓存系统,其特征在于, 所述协同服务器,还用于所述各副本服务器建立存储集;在所述各副本服务器故障期间,生成包含有故障期间操作过的各数据Key的Key变更记录,并保存到所述各副本服务器的存储集中。
11.根据权利要求9所述的分布式缓存系统,其特征在于,所述协同服务器,还用于获取所述Key变更记录中各Key对应的所有数据副本,识别出所述Key变更记录中各Key对应的上一次操作过的数据副本,并使用识别出的所述上一次操作过的数据副本对所述副本服务器发起数据修复操作。
12.根据权利要求11所述的分布式缓存系统,其特征在于,所述副本服务器,还用于根据所述协同服务器发起数据修复操作使用的所述上一次操作过的数据副本,更新本地保存的数据副本。
13.根据权利要求12所述的分布式缓存系统,其特征在于, 所述副本服务器,还用于在更新本地保存的数据副本后,向所述协同服务器返回修复结果; 所述协同服务器,还用于在所述副本服务器反馈的修复结果为失败时,继续向所述副本服务器发起数据更新操作。
全文摘要
本发明公开了一种临时故障时的数据修复方法,所述方法包括协同服务器向副本服务器发起数据操作时,发现有副本服务器故障,则生成包含有操作过的各数据键(Key)的Key变更记录;在所述副本服务器从故障中恢复后,所述协同服务器根据所述Key变更记录,向所述副本服务器发起数据修复操作;所述副本服务器根据所述协同服务器发起的数据修复操作,进行本地数据修复。本发明还公开了一种用于临时故障时的数据修复的分布式缓存系统,保证了临时故障恢复后,数据的多个副本间仍能够保持一致性,提高了分布式缓存系统保存数据的准确性,提升了分布式缓存系统的质量属性,优化了应用的体验。
文档编号H04L29/08GK102833273SQ20111015769
公开日2012年12月19日 申请日期2011年6月13日 优先权日2011年6月13日
发明者郭斌, 陈典强, 韩银俊, 宫微微 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1