本申请涉及计算机技术领域,尤其涉及一种云计算技术领域中的状态机复制方法、装置、系统及存储介质。
背景技术:
在单机系统中,系统进行变更操作前,可以先持久化记录的日志,再将其应用到状态机,这样在系统宕机后,通过重做日志可以将系统恢复到原有的状态。尤其在分布式系统中,通过状态机复制(statemachinereplication)技术,能够实现分布式系统的高可用性和一致性。
现有技术中,paxos是分布式系统中最基础的一致性协议,基于该paxos进行变形和衍生的分布式状态机复制技术(例如,qjm和raft)可以实现多个节点的日志同步,从而保证了有状态服务的高可用和一致性。
然而,现有的分布式状态机复制技术一般要求同一个日志流在同一时间限定在固定的机器上,这导致单个日志流的性能和空间只能受限于单台机器,容错能力差,无法保证系统的高可用性。
技术实现要素:
本申请实施例提供一种状态机复制方法、装置、系统及存储介质,用于解决现有的分布式状态机复制技术存在的系统容错能力差、系统可用性低的问题。
第一方面,本申请提供一种状态机复制方法,应用于状态机复制系统中的任意一个节点,所述节点包括:日志服务模块和分布式文件系统dfs客户端,所述方法包括:
所述节点通过所述日志服务模块确定所述节点在所述状态机复制系统中的角色,所述角色为主节点或从节点,所述主节点为所述状态机复制系统的服务节点,所述从节点为所述状态机复制系统的备用节点;
在所述节点为主节点时,所述节点通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
在所述节点为从节点时,所述节点通过所述dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
在本实施例中,基于分布式文件系统实现日志文件的读写,同一个日志流不需要限定在固定的机器上,提高了系统的容错能力,提高了状态机复制系统的高可用性。
在第一方面的一种可能设计中,所述节点通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,包括:
所述节点通过所述dfs客户端将所述日志文件以流文件块的形式写入到所述分布式文件系统中至少一个存储节点中,每个流文件块具有预设的最大块容量。
在本实施例中,分布式文件系统可以支持变长的流文件的存储,这样用于存储日志文件的文件块不需要限制在固定的机器上,日志文件可以无限增长,从而实现了更好的负载均衡。
可选的,若所述节点为主节点,所述方法还包括:
所述节点通过所述dfs客户端确定正在写入的源存储节点出现异常时,基于封闭机制,封闭所述源存储节点;
所述节点通过所述dfs客户端与所述分布式文件系统的管理节点进行交互,确定待写入的目标存储节点;
所述节点将待写入所述源存储节点的日志文件写入到所述分布式文件系统中的所述目标存储节点中。
在本实施例中,主节点在确定状态机复制系统的主节点正在写入的源存储节点出现异常时,基于封闭机制,封闭上述源存储节点,并通过与分布式文件系统的管理节点进行交互,将待写入源存储节点的日志文件写入到目标存储节点中,实现了存储节点的透明容错,保证了日志写入的低延时高性能。
在第一方面的另一种可能设计中,若所述节点为从节点,所述方法还包括:
所述节点在确定所述主节点故障时,通过自身包括的日志服务模块自动切换为所述状态机复制系统的服务节点。
在本实施例中,从节点具有与主节点一致的状态机,在确定主节点故障时,能够利用同步到的日志文件,通过自身包括的日志服务模块自动切换为状态机复制系统的服务节点,进而替换主节点对外提供服务,提高了系统的高可用性。
在第一方面的再一种可能设计中,每个节点的日志服务模块是基于所述分布式文件系统的客户端软件开发工具包封装成的lib库,所述日志服务模块具有角色确定、日志复制、日志恢复、日志压缩和成员管理功能。
在本实施例中,节点的日志服务模块的上述功能,使得构建高可用性ha的方案成了可能,能够基于简单易用的接口实现完全无状态服务,提高了系统的性能。
在第一方面的又一种可能设计中,若所述节点为主节点,在所述节点通过所述dfs客户端将生成的日志文件写入到所述分布式文件系统中的至少一个存储节点中之前,所述方法还包括:
所述节点通过所述dfs客户端与所述分布式文件系统中的管理节点进行信息交互,确定所述分布式文件系统中用于存储日志文件的所述至少一个存储节点。
本实施例中,主节点通过dfs客户端与分布式文件系统的管理节点交互,能够确定出用于存储日志文件的存储节点,为主节点的及时填充提供了可能。
第二方面,本申请提供一种状态机复制方法,应用于状态机复制系统中的分布式文件系统,所述分布式文件系统包括至少一个存储节点和管理节点,所述方法包括:
所述管理节点通过与主节点的dfs客户端进行交互,确定所述状态机复制系统的主节点正在写入的源存储节点出现异常,所述主节点为所述状态机复制系统中的服务节点;
所述管理节点基于负载均衡策略,确定待写入的目标存储节点,并将所述目标存储节点的标识发送给所述主节点。
在本实施例中,管理节点确定状态机复制系统的主节点正在写入的源存储节点出现异常时,基于负载均衡策略重新确定用于写入的目标存储节点,实现了存储节点的透明容错,保证了日志写入的低延时高性能。
在第二方面的一种可能设计中,所述分布式文件系统支持如下功能:日志文件的多副本存储、日志文件的并行读写、日志文件的单节点写入模式和所述日志文件的原子操作功能。
第三方面,本申请提供一种状态机复制装置,应用于状态机复制系统中的任意一个节点,所述节点包括:日志服务模块和分布式文件系统dfs客户端,所述装置包括:处理模块和读写模块;
所述处理模块,用于通过所述日志服务模块确定所述节点在所述状态机复制系统中的角色,所述角色为主节点或从节点,所述主节点为所述状态机复制系统的服务节点,所述从节点为所述状态机复制系统的备用节点;
在所述节点为主节点时,所述读写模块,用于通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
在所述节点为从节点时,所述读写模块,用于通过所述dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
本申请第三方面提供的装置,可用于执行第一方面提供的方法,其实现原理和技术效果类似,在此不再赘述。
第四方面,本申请提供一种状态机复制装置,应用于状态机复制系统中的分布式文件系统,所述分布式文件系统包括至少一个存储节点和管理节点,所述装置包括:处理模块和发送模块;
所述处理模块,用于通过与主节点的dfs客户端进行交互,确定所述状态机复制系统的主节点正在写入的源存储节点出现异常,并基于负载均衡策略,确定待写入的目标存储节点,所述主节点为所述状态机复制系统中的服务节点;
所述发送模块,用于将所述目标存储节点的标识发送给所述主节点。
本申请第四方面提供的装置,可用于执行第二方面提供的方法,其实现原理和技术效果类似,在此不再赘述。
第五方面,本申请提供一种状态机复制系统,包括:两个节点和分布式文件系统,每个节点包括日志服务模块和分布式文件系统dfs客户端;
所述日志服务模块用于确定所属节点的角色,所述角色为主节点或从节点,所述主节点为所述状态机复制系统的服务节点,所述从节点为所述状态机复制系统的备用节点;
所述主节点用于通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
所述从节点用于通过所述dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
在第五方面的一种可能设计中,所述分布式文件系统支持如下功能:日志文件的多副本存储、日志文件的并行读写、日志文件的单节点写入模式和所述日志文件的原子操作功能。
在第五方面的另一种可能设计中,所述日志文件的写入格式为流文件块,所述日志文件包括多个流文件块,每个流文件块具有预设的最大块容量。
可选的,所述分布式文件系统支持封闭机制;所述封闭机制,用于指示所述主节点中的dfs客户端在确定所述主节点正在写入的源存储节点出现异常时,封闭所述源存储节点。
可选的,所述主节点还用于在通过所述dfs客户端确定正在写入的源存储节点出现异常时,基于封闭机制,封闭所述源存储节点,通过所述dfs客户端与所述分布式文件系统的管理节点进行交互,确定待写入的目标存储节点,并将待写入所述源存储节点的日志文件写入到所述分布式文件系统中的所述目标存储节点中。
在第五方面的再一种可能设计中,每个节点的日志服务模块具有自动切换所属节点角色的功能;
所述从节点的日志服务模块,用于在所述主节点故障时,自动将所属从节点切换为所述状态机复制系统的服务节点。
在第五方面的又一种可能设计中,每个节点的日志服务模块是基于所述分布式文件系统的客户端软件开发工具包封装成的lib库,所述日志服务模块具有角色确定、日志复制、日志恢复、日志压缩和成员管理功能。
第六方面,本申请提供一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使计算机执行第一方面以及第一方面各可能设计所述的方法;或者
所述计算机指令用于使计算机执行第二方面以及第二方面各可能设计所述的方法。
第七方面,本申请提供一种状态机复制方法,包括:
主节点将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,所述主节点为所述状态机复制系统的服务节点;
从节点从所述分布式文件系统的至少一个存储节点中读取日志文件,所述从节点为所述状态机复制系统的备用节点。
上述申请中的一个实施例具有如下优点或有益效果:节点通过包括的日志服务模块确定该节点在该状态机复制系统中的角色,主节点通过包括的dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,从节点通过包括的dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。该技术方案,基于分布式文件系统实现日志文件的读写,而且同一个日志流不需要限定在固定的机器上,提高了系统的容错能力,提高了状态机复制系统的高可用性。
上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1为分布式系统基于逻辑日志的状态服务示意图;
图2为多副本日志文件的存储示意图;
图3为本申请实施例提供的状态机复制系统的框架示意图;
图4为本申请第一实施例提供的状态机复制方法的交互示意图;
图5为本申请实施例中以流文件块表示的日志文件的示意图;
图6为本申请第二实施例提供的状态机复制方法的交互示意图;
图7为本申请第一实施例提供的状态机复制装置的框图;
图8为本申请第二实施例提供的状态机复制装置的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
日志(journal)是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。系统日志包括系统日志、应用程序日志和安全日志。通过日志,可以为系统死机或者崩溃现场保留最后的有效记录,便于开发人员或者维护人员根据相关信息及时快速地分析、定位死机或崩溃的位置和原因,从而大大缩减开发和维护的时间,节省人力资源成本。
在有状态软件系统中,日志是实现系统高可靠、高可用的最基本、最通用的技术。在单机系统中,系统进行变更操作前,首先持久化记录日志,成功后再真正应用到状态机,其中,状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。因而,在系统宕机后,能够通过重做(redo)日志恢复到原有一致的状态。
抽象来看,日志可以看作是按照时间有序的、只能追加的记录序列:日志的记录编号定义了日志生成在时间上的序;日志只能追加写入,对其内容不做修改。
日志在分布式系统中尤为重要,通过状态机复制技术,系统中的多个节点可以基于日志同步,实现有状态服务的高可用和一致性。示例性的,图1为分布式系统基于逻辑日志的状态服务示意图。如图1所示,分布式系统中,多个节点通过主备(primary-backup)的方式工作:主节点对外提供更新操作服务,在应用日志到状态机之前,先持久化日志,即首先将主节点的日志写到日志文件中,再从日志文件加载日志到从节点并重做日志redo。
示例性的,一旦主节点异常,从节点只要加载完整的日志,拥有一致的有序输入,就可以达到和主节点完全一致的状态,并将从节点切换为主节点继续对外提供服务。
可选的,在实际应用中,日志文件的存储方式也可以为多副本,例如,图2为多副本日志文件的存储示意图。参照图2所示,主节点生成的日志文件在复制生成多副本后分别存储到多个存储节点中,这样从节点可以从多个存储节点中的任意一个中读取上述日志文件。实际系统中通过多副本实现,可以保证系统的高可用。
在实际应用中,分布式系统基于日志的状态机复制技术,主要包括:主节点选择(leaderelection)、日志复制(logreplication)、日志恢复(logrecovery)、日志压缩(logcompaction)和成员管理(membershipmanagement)五个方面。,目前,paxos为分布式系统中最基础的一致性协议,后续衍生出了qjm、raft、zab、viewstampedreplication等一系列工程实现,成为当前实现上述高可用的主要方案。
现阶段,基于日志的状态机复制技术,普遍采用了基于paxos的一致性协议的变种和衍生方案。其中,最为通用的方案为:qjm和raft;
其中,qjm:hadoopv2中的默认高可用性(highavailable,ha)方案。在本方案中,qjm作为一个独立的系统部署,包含两个组件:journalnode和libqjm。libqjm作为客户端sdk负责日志的读写,包括异常情况下的一致性恢复,journalnode负责日志的持久化存储。qjm并不包含主节点选择,需要外部机制实现,例如,zookeeper。因而,首先该方案不是一个完整的解决方案,需要引入外部机制实现主节点选择;其次,qjm分布式应用场景有限,通常仅用于分布式系统中少数节点控制的ha;最后,qjm作为一个独立的第三方系统部署,引入额外的运维成本。
raft:当前最广泛使用的通用解决方案。该方案提供了一套通用的lib库,无需额外部署独立系统,并且包含主节点选择在内的完整状态机复制技术,其是目前最广泛使用的方案。但是,由于lib库链接到服务进程中,不需要额外部署服务,但其原理决定了如果容忍n台机器异常,服务要提供2n 1台机器。
综上可知,上述qjm和raft均存在如下问题:要求同一个日志流同一时间限定在固定的机器上,这使得单个日志流的性能和存储空间只能受限于单台机器,容错能力差,当出现异常节点时,无法通过快速切换节点来保证写入服务的可用性。
针对上述问题,本申请实施例提供了一种状态机复制方法,整体思路是:基于分布式文件系统实现系统的高可用性,其可以实现更少的系统依赖(相比qjm)、更少的节点(相比raft)、更强的系统容错能力(相比qjm、raft,意味着更好的系统可用性)和性能。
示例性的,图3为本申请实施例提供的状态机复制系统的框架示意图。如图3所示,在本实施例中,该状态机复制系统可以包括至少两个节点和分布式文件系统(distributedfilesystem,dfs)。该分布式文件系统包括至少一个存储节点和管理节点。
其中,主节点用于将生成的日志写入分布式文件系统中的存储节点,从节点用于从分布式文件系统中的存储节点读取日志,以使得从节点具有与主节点完全一致的状态。
分布式文件系统中的存储节点主要用于存储日志,管理节点主要用于对存储节点进行管理,并且确定主节点要写入的存储节点。
具体的,参照上述图3所示,在本申请实施例中,每个节点包括日志服务模块和dfs客户端。该日志服务模块用于确定所属节点的角色,该角色为主节点或从节点,主节点为所述状态机复制系统的服务节点,从节点为所述状态机复制系统的备用节点;
主节点用于通过包括的dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
从节点用于通过包括的dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
可选的,该分布式文件系统支持如下功能:日志文件的多副本存储、日志文件的并行读写、日志文件的单节点写入模式和所述日志文件的原子操作功能。
示例性的,该日志文件的写入格式为流文件块,所述日志文件包括多个流文件块,每个流文件块具有预设的最大块容量。
在本实施例中,所述分布式文件系统支持封闭机制;所述封闭机制,用于指示所述主节点中的dfs客户端在确定所述主节点正在写入的源存储节点出现异常时,封闭所述源存储节点。
相应的,主节点还用于在通过所述dfs客户端确定正在写入的源存储节点出现异常时,基于封闭机制,封闭所述源存储节点,通过所述dfs客户端与所述分布式文件系统的管理节点进行交互,确定待写入的目标存储节点,并将待写入所述源存储节点的日志文件写入到所述分布式文件系统中的目标存储节点中。
在本申请的上述任意一种可能设计中,每个节点的日志服务模块具有自动切换所属节点角色的功能;
该从节点的日志服务模块,用于在所述主节点故障时,自动将所属从节点切换为所述状态机复制系统的服务节点。
在本申请的上述任意一种可能设计中,每个节点的日志服务模块是基于所述分布式文件系统的客户端软件开发工具包封装成的lib库,所述日志服务模块具有角色确定、日志复制、日志恢复、日志压缩和成员管理功能。
本申请实施例提供的状态机复制系统是基于分布式文件系统设计和实现的,其应用的产品可以是分布式有状态服务系统,如分布式存储系统。
下面,通过具体实施例对本申请的技术方案进行详细说明。需要说明的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
图4为本申请第一实施例提供的状态机复制方法的交互示意图。该方法以图3所示状态机复制系统中的主节点、从节点和分布式文件系统的交互进行说明。如图4所示,该方法可以包括如下步骤:
s401、节点通过包括的日志服务模块确定该节点在该状态机复制系统中的角色。
其中,该角色为主节点或从节点,主节点为状态机复制系统的服务节点,从节点为状态机复制系统的备用节点。
在本申请的实施例中,状态机复制系统包括两个节点,这两个节点分别作为主从节点为状态机复制系统所在系统的应用提供服务。每个节点包括的日志服务模块具有角色确定功能,可以理解为选主机制,其能够自动决策所属节点的角色,保证最多只有单个主节点对外提供服务,并在主节点故障时,从节点自动切换为主节点,以保证系统的高可用性。
示例性的,每个节点是什么角色、主节点是否故障等都可以通过在dfs中设置的一个文件的记录状态来标识。可选的,dfs的管理节点也可以根据主节点是否在预设时间段内未向dfs写日志来确定主节点是否故障,从节点还可以根据主节点的写日志状态确定主节点是否故障。
可以理解的是,本申请实施例并不限定确定节点角色的具体实现方案,也不限定主节点是否故障的实现方案,其可以根据系统中的实际设计确定,此处不再赘述。
在实际应用中,主节点作为状态机复制系统的服务节点,运行一些实时任务,从节点作为对外服务的备用节点,在主节点正常工作时,虽然不对外提供服务,但是要随时知晓主节点是否处于正常工作状态,一旦发现主节点异常,则立即替换主节点执行相应的任务。
在该节点为主节点时,执行如下步骤:
s402、节点通过包括的dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中。
在本实施例中,由于主节点对外提供服务,其在运行的过程中,会产生一系列日志文件,为了保证主节点所在系统的高可用性,主节点可以通过包括的dfs客户端与dfs进行交互,并将生成的日志文件写入到分布式文件系统中。
在本申请的实施例中,主节点在s402之前,首先需要执行如下操作:
主节点通过包括的dfs客户端与分布式文件系统中的管理节点进行信息交互,确定分布式文件系统中用于存储日志文件的至少一个存储节点。
示例性的,主节点在产生日志文件后,为了确定分布式文件系统中用于存储日志文件的存储节点,主节点首先通过包括的dfs客户端与dfs的管理节点进行交互,确定出待写入的至少一个存储节点以及副本复制机制,再写入到dfs的上述至少一个存储节点上。
例如,主节点首先通过dfs客户端向分布式文件系统的管理节点发送存储请求,该管理节点根据负载均衡策略和存储安全性,在分布式文件系统包括的所有存储节点中确定出用于存储日志文件的至少一个存储节点,并将所述至少一个存储节点的标识反馈给主节点,这样主节点在接收到所述至少一个存储节点的标识后,便可以通过dfs客户端向上述至少一个存储节点中存储日志文件。
可以理解的是,主节点可以实时或周期性的将生成的日志文件写到dfs的存储节点中,从节点可以周期性启动读日志流程,并在读日志流程结束后,间隔预设时间再次启动。可选的,从节点的每次读日志流程可以在读不到日志文件时结束,也可以在读取预设时间后结束,还可以在读取预设大小的日志文件后结束,关于从节点的每次读日志流程的结束时机可以根据实际情况确定,此处不再赘述。
在本申请的一种可能设计中,该s402可以通过如下步骤实现:
主节点通过包括dfs客户端将日志文件以流文件块的形式写入到分布式文件系统中至少一个存储节点中,每个流文件块具有预设的最大块容量(maxblocksize)。
示例性的,为了更好的支持日志同步(复制)场景,本申请的实施例中设计了特殊文件类型,即流(stream)文件,流(stream)文件和普通(regular)文件的区别在于流文件的长度没有限制,可以视为一个只能追加(append-only)的流。
例如,图5为本申请实施例中以流文件块表示的日志文件的示意图。参照图5所示,日志文件可以表示为流文件块的链接形式,也即,日志文件可以包括多个流文件块,因而,在主节点中,每个流文件块具有预设的最大块容量,这样,主节点的dfs客户端可以根据预设的最大块容量,将日志文件划分为依次链接的多个流文件块,多个流文件块的顺序连接组成日志文件,再根据分布式文件中各存储节点的负载均衡策略,将不同的流文件块依次存储到分布式文件系统中至少一个存储节点中。
在本实施例中,通过对流文件块设置固定的最大块容量,这样当生成的日志文件大小超过流文件块的最大块容量时,可以对该日志文件进行切分,得到多个流文件块,再按照负载均衡策略和数据安全性,将多个流文件块分配到分布式文件系统中的至少一个存储节点中。
在设置具有最大块容量的流文件块的基础上,主节点便可以通过dfs客户端将日志文件以流文件块的形式写入到分布式文件系统中至少一个存储节点中,并且在每个流文件块的文件长度超过预设的最大块容量时,将日志文件进行切分,并将生成的多个流文件块写入到分布式文件系统的至少一个存储节点中。
可以理解的是,日志文件包括的多个流文件块可以存储到同一个存储节点上,也可以存储在不同的存储节点上,其可以根据存储节点的负载均衡策略和数据安全性确定,此处不对其进行限定。
在本实施例中,分布式文件系统可以支持变长的流文件的存储,这样用于存储日志文件的文件块不需要限制在固定的机器上,日志文件可以无限增长,从而实现了更好的负载均衡。
在该节点为从节点时,执行如下步骤:
s403、节点通过包括的dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
在本实施例中,为了提高状态机复制系统所在系统的性能,从节点需要定期从分布式文件系统中读取日志文件,以与主节点中的状态保持基本完全一致,这样在主节点异常时,从节点才可以完全替代主节点进而对外提供服务。
示例性的,在本申请的实施例中,上述分布式文件系统支持如下功能:日志文件的多副本存储、日志文件的并行读写、日志文件的单节点写入模式和日志文件的原子操作功能。
具体的,分布式文件系统以通用文件接口的方式提供多种基本功能。
其中,日志文件的多副本存储(多副本冗余),可以保证数据一致性。
日志文件的并行读写,即主节点在向分布式文件系统的一个存储节点写日志文件的同时,从节点可以通过包括的dfs客户端从存储有日志文件的另一个存储节点读取日志文件,提高了分布式文件系统的性能。
日志文件的单节点写入模式,即在同一时刻,分布式文件系统只能支持主节点写入,当主节点生成日志,且正在写入的日志文件超过流文件块的最大块容量时,可以将日志文件切分,得到新的流文件块,多个流文件块采用链接的形式得到日志文件,这样简化了分布式文件系统的读写策略,提高了状态机复制方法的性能。
日志文件的原子操作功能,也即,主节点只要开始向分布式文件系统的某个存储节点写入日志文件,便只有成功和失败两种结果。可选的,分布式文件系统的目录也支持原子操作,即分布式文件系统的存储节点中创建目录、原地重命名目录、对目录的时间属性进行修改均是原子操作。
进一步的,日志文件的每次写入都是原子的且不会持久化到流文件块。如果流文件块中继续写入日志文件会导致流文件块超过预设的最大块容量,则可以自动对日志文件进行切分并得到新的流文件块。这种组织方式使得日志文件不需要局限在固定节点,实现负载均衡和无限扩容。
本申请实施例提供的状态机复制方法,节点通过包括的日志服务模块确定该节点在该状态机复制系统中的角色,主节点通过包括的dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,从节点通过包括的dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。该技术方案,基于分布式文件系统实现日志文件的读写,而且同一个日志流不需要限定在固定的机器上,提高了系统的容错能力,提高了状态机复制系统的高可用性。
示例性的,在上述实施例的基础上,图6为本申请第二实施例提供的状态机复制方法的交互示意图。如图6所示,所述方法还可以包括如下步骤:
s601、主节点通过包括的dfs客户端确定正在写入的源存储节点出现异常。
在本实施例中,主节点通过包括的dfs客户端向dfs的存储节点写入日志文件,但是当dfs客户端发现正在写入的源存储节点是否出现异常,例如,写入缓慢或无法写入等问题时,可以确定主节点正在写入的源存储节点出现异常。
s602、主节点基于封闭机制,封闭上述源存储节点。
在本实施例中,如果主节点确定正在写入的存储节点为异常节点(慢节点),则可以直接将正在写入的源存储节点封闭(seal),使其不能再被写入,以保证主节点生成的日志文件能够被写入到正常的存储节点中,该封闭机制可以实现存储节点的透明容错,保证日志写入的低延时高性能。
s603、主节点通过dfs客户端与分布式文件系统的管理节点进行交互,确定待写入的目标存储节点。
具体的,主节点通过dfs客户端向管理节点发送写入请求,管理节点接收该写入请求后基于负载均衡策略,在分布式文件系统中确定待写入的目标存储节点。
在本实施例中,当主节点的dfs客户端确定主节点正在写入的源存储节点出现异常时,为了保证日志文件的写入具有低延时、高性能的特点,可以向管理节点发送写入请求,使得管理节点根据分布式文件系统所包括存储节点的负载信息和数据安全性,在分布式文件系统所包括存储节点中确定出用于写入日志文件的目标存储节点。
s604、主节点通过dfs客户端将待写入源存储节点的日志文件写入到分布式文件系统中的目标存储节点中。
在本实施例中,主节点确定出日志文件的目标存储节点后,可以通过dfs客户端将正在写入源存储节点的日志文件写入到目标存储节点中。
在本实施例中,在日志文件的写入过程中,若确定正写入的源存储节点异常,则能够快速切换到新的存储节点继续写入,具有完全的透明容错能力,显著降低了写入时延。
本申请实施例提供的状态机复制方法,主节点通过dfs客户端确定正在写入的源存储节点出现异常时,首先基于封闭机制,封闭该源存储节点,再通过dfs客户端与分布式文件系统的管理节点进行交互,确定待写入的目标存储节点,最后通过dfs客户端将待写入源存储节点的日志文件写入到分布式文件系统中的目标存储节点中,这样可以保证日志文件的正常写入,提高了状态机复制方法的透明容错能力,显著降低了写入时延,提高了状态机复制效率。
示例性的,在上述各实施例的基础上,对于状态机复制系统中的从节点,该方法还可以包括如下步骤:
该从节点在确定主节点故障时,通过自身包括的日志服务模块自动切换为状态机复制系统的服务节点。
在本实施例中,从节点能够及时并准确的从分布式文件系统中读取主节点的日志文件,使得从节点能够具有与主节点一致的状态机,所以,在从节点在确定主节点故障时,能够利用同步到的日志文件,通过自身包括的日志服务模块自动切换为状态机复制系统的服务节点,进而替换主节点对外提供服务,从而保证了分布式系统的性能。
示例性的,在本实施例中,每个节点的日志服务模块是基于分布式文件系统的客户端软件开发工具包封装成的lib库,该日志服务模块具有角色确定、日志复制、日志恢复、日志压缩和成员管理功能。
其中,角色确定即选主机制(leaderelection),选主机制能够自动决策节点角色,保证至多只有单个主节点对外提供服务,并在主节点故障时,从节点能够自动切换为主节点,以保证系统的高可用性。
在本实施例中,日志复制、日志恢复、日志压缩等统一称为日志相关的功能,其是基于dfs的sdk封装的日志访问接口。其中,日志文件采用上述的流文件块组成的流文件类型实现。
具体的,日志复制(logreplication)是基于dfs的sdk封装日志读写接口,日志文件的读写接口同普通文件的读写接口一致。流文件块的复制功能实际由底层的dfs完成,对每个节点的日志服务模块透明。
日志恢复(logrecovery):由于流文件块在dfs层,其日志恢复完全由dfs自行管理,对每个节点的日志服务模块透明;也即,当dfs的存储节点中存储的日志文件损坏时,可以利用该日志恢复功能恢复损坏的日志文件。
日志压缩(logcompaction):主节点的日志服务模块提供了多个容易使用的接口,故主节点可以将已经提交(apply)的日志状态机从镜像(dump)文件转换到快照(snapshot)文件。同时,基于流文件的截断头(truncatehead)接口,可以很容易的在保留流文件的前提下,删除已被压缩的日志文件,进而释放空间,不需要类似raft的复杂配置算法。流文件提供truncatehead接口,用于在logcompaction中截取流文件头部的一部分,也即,将指定偏移量(offset)之前的流文件块block进行删除。
成员管理(membershipmanagement):由于日志文件能够共享并存储在dfs中,主节点可以视为无状态服务,使得主从节点机制简化为一主一从,因而,如果分布式系统容忍n个节点异常,只需要部署n 1个节点,相对于rafa需要2n 1个节点的方案,节省n个节点,显著降低了分布式系统所在产品的成本。
进一步的,每个节点的日志服务模块作为lib库,能够链接到服务进程中,提供了以下简单易用的接口:
日志相关:写日志接口和读日志接口(writelog和readlog);
快照相关:下载快照和做快照(loadsnapshot和dosnapshot);
节点管理相关:主节点确定和身份添加(is_leader和add_peer)。
综上所述,本申请的技术方案尤其适用于已基于分布式文件系统的上层系统进一步构建高可用性ha的方案,能够基于简单易用的接口实现完全无状态服务,提高了系统的性能。
上述介绍了本申请实施例提到的状态机复制方法的具体实现,下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图7为本申请第一实施例提供的状态机复制装置的框图。如图7所示,该状态机复制装置应用于状态机复制系统中的任意一个节点,所述节点包括:日志服务模块和分布式文件系统dfs客户端,该装置包括:处理模块71和读写模块72。
其中,处理模块71,用于通过所述日志服务模块确定所述节点在所述状态机复制系统中的角色,所述角色为主节点或从节点,所述主节点为所述状态机复制系统的服务节点,所述从节点为所述状态机复制系统的备用节点;
在所述节点为主节点时,读写模块72,用于通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
在所述节点为从节点时,读写模块72,用于通过所述dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
在本申请实施例的一种可能设计中,读写模块72,用于通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,具体为:
读写模块72,具体用于通过所述dfs客户端将所述日志文件以流文件块的形式写入到所述分布式文件系统中至少一个存储节点中,每个流文件块具有预设的最大块容量。
可选的,若所述节点为主节点,参照图7所示,所述处理模块71,还用于通过所述dfs客户端确定正在写入的源存储节点出现异常时,基于封闭机制,封闭所述源存储节点,通过所述dfs客户端与所述分布式文件系统的管理节点进行交互,确定待写入的目标存储节点;
读写模块72,还用于通过所述dfs客户端将待写入所述源存储节点的日志文件写入到所述分布式文件系统中的所述目标存储节点中。
在本申请实施例的另一种可能设计中,若所述节点为从节点,处理模块71,还用于在确定所述主节点故障时,通过自身包括的日志服务模块自动切换为所述状态机复制系统的服务节点。
在本申请实施例的再一种可能设计中,每个节点的日志服务模块是基于所述分布式文件系统的客户端软件开发工具包封装成的lib库,所述日志服务模块具有角色确定、日志复制、日志恢复、日志压缩和成员管理功能。
在本申请实施例的再一种可能设计中,若所述节点为主节点,则上述处理模块,还用于在读写模块72通过所述dfs客户端将生成的日志文件写入到所述分布式文件系统中的至少一个存储节点中之前,通过所述dfs客户端与所述分布式文件系统中的管理节点进行信息交互,确定所述分布式文件系统中用于存储日志文件的所述至少一个存储节点。
本申请实施例提供的装置,可用于执行图4和图6所示实施例中节点侧的技术方案,其实现原理和技术效果类似,在此不再赘述。
图8为本申请第二实施例提供的状态机复制装置的框图。该装置应用于状态机复制系统中的分布式文件系统,该分布式文件系统包括至少一个存储节点和管理节点。如图8所示,该装置可以包括:处理模块81和发送模块82。
其中,处理模块81,用于通过与主节点的dfs客户端进行交互,确定所述状态机复制系统的主节点正在写入的源存储节点出现异常,基于负载均衡策略,确定待写入的目标存储节点。
其中,所述主节点为所述状态机复制系统中的服务节点。
该发送模块82,用于将所述目标存储节点的标识发送给所述主节点。
可选的,分布式文件系统支持如下功能:日志文件的多副本存储、日志文件的并行读写、日志文件的单节点写入模式和所述日志文件的原子操作功能。
本申请实施例提供的装置,可用于执行图4和图6所示实施例中分布式文件系统的技术方案,其实现原理和技术效果类似,在此不再赘述。
需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,处理模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上处理模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
进一步的,根据本申请的实施例,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质是存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行上述图4和图6所示实施例中节点的实现方案,或者,该计算机指令用于使计算机执行上述图4和图6所示实施例中分布式文件系统的实现方案。
进一步的,本申请还提供一种状态机复制方法,包括:
主节点将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,所述主节点为所述状态机复制系统的服务节点;
从节点从所述分布式文件系统的至少一个存储节点中读取日志文件,所述从节点为所述状态机复制系统的备用节点。
根据本申请实施例的技术方案,节点通过包括的日志服务模块确定该节点在该状态机复制系统中的角色,主节点通过包括的dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,从节点通过包括的dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。该技术方案,基于分布式文件系统实现日志文件的读写,而且同一个日志流不需要限定在固定的机器上,提高了系统的容错能力,提高了状态机复制系统的高可用性。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。
1.一种状态机复制方法,其特征在于,应用于状态机复制系统中的任意一个节点,所述节点包括:日志服务模块和分布式文件系统dfs客户端,所述方法包括:
所述节点通过所述日志服务模块确定所述节点在所述状态机复制系统中的角色,所述角色为主节点或从节点,所述主节点为所述状态机复制系统的服务节点,所述从节点为所述状态机复制系统的备用节点;
在所述节点为主节点时,所述节点通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
在所述节点为从节点时,所述节点通过所述dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
2.根据权利要求1所述的方法,其特征在于,所述节点通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,包括:
所述节点通过所述dfs客户端将所述日志文件以流文件块的形式写入到所述分布式文件系统中至少一个存储节点中,每个流文件块具有预设的最大块容量。
3.根据权利要求2所述的方法,其特征在于,若所述节点为主节点,所述方法还包括:
所述节点通过所述dfs客户端确定正在写入的源存储节点出现异常时,基于封闭机制,封闭所述源存储节点;
所述节点通过所述dfs客户端与所述分布式文件系统的管理节点进行交互,确定待写入的目标存储节点;
所述节点通过所述dfs客户端将待写入所述源存储节点的日志文件写入到所述分布式文件系统中的所述目标存储节点中。
4.根据权利要求1-3任一项所述的方法,其特征在于,若所述节点为从节点,所述方法还包括:
所述节点在确定所述主节点故障时,通过自身包括的日志服务模块自动切换为所述状态机复制系统的服务节点。
5.根据权利要求1-3任一项所述的方法,其特征在于,每个节点的日志服务模块是基于所述分布式文件系统的客户端软件开发工具包封装成的lib库,所述日志服务模块具有角色确定、日志复制、日志恢复、日志压缩和成员管理功能。
6.根据权利要求1-3任一项所述的方法,其特征在于,若所述节点为主节点,在所述节点通过所述dfs客户端将生成的日志文件写入到所述分布式文件系统中的至少一个存储节点中之前,所述方法还包括:
所述节点通过所述dfs客户端与所述分布式文件系统中的管理节点进行信息交互,确定所述分布式文件系统中用于存储日志文件的所述至少一个存储节点。
7.一种状态机复制方法,其特征在于,应用于状态机复制系统中的分布式文件系统,所述分布式文件系统包括至少一个存储节点和管理节点,所述方法包括:
所述管理节点通过与主节点的dfs客户端进行交互,确定所述状态机复制系统的主节点正在写入的源存储节点出现异常,所述主节点为所述状态机复制系统中的服务节点;
所述管理节点基于负载均衡策略,确定待写入的目标存储节点,并将所述目标存储节点的标识发送给所述主节点。
8.根据权利要求7所述的方法,其特征在于,所述分布式文件系统支持如下功能:日志文件的多副本存储、日志文件的并行读写、日志文件的单节点写入模式和所述日志文件的原子操作功能。
9.一种状态机复制装置,其特征在于,应用于状态机复制系统中的任意一个节点,所述节点包括:日志服务模块和分布式文件系统dfs客户端,所述装置包括:处理模块和读写模块;
所述处理模块,用于通过所述日志服务模块确定所述节点在所述状态机复制系统中的角色,所述角色为主节点或从节点,所述主节点为所述状态机复制系统的服务节点,所述从节点为所述状态机复制系统的备用节点;
在所述节点为主节点时,所述读写模块,用于通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
在所述节点为从节点时,所述读写模块,用于通过所述dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
10.一种状态机复制装置,其特征在于,应用于状态机复制系统中的分布式文件系统,所述分布式文件系统包括至少一个存储节点和管理节点,所述装置包括:处理模块和发送模块;
所述处理模块,用于通过与主节点的dfs客户端进行交互,确定所述状态机复制系统的主节点正在写入的源存储节点出现异常,并基于负载均衡策略,确定待写入的目标存储节点,所述主节点为所述状态机复制系统中的服务节点;
所述发送模块,用于将所述目标存储节点的标识发送给所述主节点。
11.一种状态机复制系统,其特征在于,包括:至少两个节点和分布式文件系统,每个节点包括日志服务模块和分布式文件系统dfs客户端;
所述日志服务模块用于确定所属节点的角色,所述角色为主节点或从节点,所述主节点为所述状态机复制系统的服务节点,所述从节点为所述状态机复制系统的备用节点;
所述主节点用于通过所述dfs客户端将生成的日志文件写入到分布式文件系统中的至少一个存储节点中;
所述从节点用于通过所述dfs客户端从分布式文件系统的至少一个存储节点中读取日志文件。
12.根据权利要求11所述的系统,其特征在于,所述分布式文件系统支持如下功能:日志文件的多副本存储、日志文件的并行读写、日志文件的单节点写入模式和所述日志文件的原子操作功能。
13.根据权利要求11所述的系统,其特征在于,所述日志文件的写入格式为流文件块,所述日志文件包括多个流文件块,每个流文件块具有预设的最大块容量。
14.根据权利要求13所述的系统,其特征在于,所述分布式文件系统支持封闭机制;所述封闭机制,用于指示所述主节点中的dfs客户端在确定正在写入的源存储节点出现异常时,封闭所述源存储节点。
15.根据权利要求14所述的系统,其特征在于,所述主节点还用于在通过所述dfs客户端确定正在写入的源存储节点出现异常时,基于封闭机制,封闭所述源存储节点,通过所述dfs客户端与所述分布式文件系统的管理节点进行交互,确定待写入的目标存储节点,并将待写入所述源存储节点的日志文件写入到所述分布式文件系统中的所述目标存储节点中。
16.根据权利要求11-15任一项所述的系统,其特征在于,每个节点的日志服务模块具有自动切换所属节点角色的功能;
所述从节点的日志服务模块,用于在所述主节点故障时,自动将所属从节点切换为所述状态机复制系统的服务节点。
17.根据权利要求11-15任一项所述的系统,其特征在于,每个节点的日志服务模块是基于所述分布式文件系统的客户端软件开发工具包封装成的lib库,所述日志服务模块具有角色确定、日志复制、日志恢复、日志压缩和成员管理功能。
18.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使计算机执行权利要求1-6中任一项所述的方法;或者,所述计算机指令用于使计算机执行权利要求7或8所述的方法。
19.一种状态机复制方法,其特征在于,包括:
主节点将生成的日志文件写入到分布式文件系统中的至少一个存储节点中,所述主节点为所述状态机复制系统的服务节点;
从节点从所述分布式文件系统的至少一个存储节点中读取日志文件,所述从节点为所述状态机复制系统的备用节点。
技术总结