日志处理方法、相关设备及系统与流程

文档序号:18667917发布日期:2019-09-13 20:26阅读:143来源:国知局
日志处理方法、相关设备及系统与流程

本发明涉及计算机技术领域,尤其涉及一种日志处理方法、相关设备及系统。



背景技术:

数据库中通常会通过日志log来保存数据的修改记录,日志包括生成和存储两个过程,日志的生成通常由计算节点来实现,日志的存储通常由存储节点来实现。为了保障日志的安全性和稳定性,该计算节点和该存储节点均采用分布式的方式进行部署。如图1所示,图1中多个计算节点构成了一个计算节点集群,该计算节点集群中包括一个计算主节点(primary)和至少一个计算从节点(slave),该计算主节点能够接收客户端发送的针对数据的读操作和写操作,该写操作会产生日志,该计算从节点能够接收客户端发送的针对数据的读操作。图1中多个存储节点构成一个存储节点集群,该存储节点集群包括一个存储主节点(leader)和至少一个存储从节点(follower),该存储主节点、存储从节点和计算主节点对同一日志的记录保持一致性,然而某些场景下该一致性是无法保证的,例如:

假设该计算主节点向该存储主节点发送日志序列号(logsequencenumber,lsn)分别为1、2和3的日志;当该存储主节点与该存储节点集群中的大多数存储从节点对lsn为1和2的日志达成一致,但是还未与该存储节点集群中的大多数存储从节点对lsn为3的日志达成一致时,若该计算主节点出现了故障并且该计算节点集群中重新选择了一个计算主节点,那么,该存储主节点会向该新的计算主节点发送日志序列号2,以表明1表示的日志和2表示的日志已经达成一致。后续,计算主节点再有日志发送给存储主节点时,该存储主节点会以lsn等于3开始编号,这样一来,该存储主节点就会再一次接收到lsn等于3的日志,而实际上两次接收到的lsn等于3的日志并不是同一个日志,如果存储主节点对这两个lsn等于3的日志都完成了一致性处理,就会使存储节点集群中存储的日志出现混乱。

如何避免日志的存储出现混乱是本领域的技术人员正在研究的技术问题。



技术实现要素:

本发明实施例公开了一种日志处理方法、相关设备及系统,能够避免日志出现混乱。

本发明实施例第一方面公开了一种日志处理方法,该方法包括:首先,第一节点在初始化时获取存储节点集群的状态消息,该状态消息标记了该存储节点集群的存储主节点;该第一节点为计算节点集群中具有写操作能力和读操作能力的计算主节点;然后,该第一节点根据该状态消息向该存储主节点发送第一写操作请求,以使该存储主节点与该存储节点集群中的存储从节点对已接收的日志达成一致后对第一写操作达成一致;接着,该第一节点接收该存储主节点与该存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息,该反馈消息包括标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述步骤,第一节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

结合第一方面,在第一方面的第一种可能的实现方式中,该第一节点接收该存储主节点与该存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息之后,该方法还包括:该第一节点向该存储主节点发送目标消息,该目标消息包括当前迭代标识,该当前迭代标识被该存储主节点用于判断该目标消息是否来自最新产生的计算主节点;该当前迭代标识比上一次产生的计算主节点发送的上一迭代标识大。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样存储主节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

结合第一方面,或者第一方面的上述任意一种可能的实现方式,在第一方面的第二种可能的实现方式中,该第一节点向该存储主节点发送目标消息之前,还包括:首先,该第一节点向预设的配置管理器发送第一请求以请求该当前迭代标识,所述配置管理器为预先配置的用于维护所述计算主节点所需信息以及所述存储主节点所需信息的节点;然后,该第一节点接收该配置管理器发送的该当前迭代标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

结合第一方面,或者第一方面的上述任意一种可能的实现方式,在第一方面的第三种可能的实现方式中,该第一节点向该存储主节点发送目标消息之前,还包括:首先,该第一节点向预设的配置管理器发送第一请求以请求该上一迭代标识,所述配置管理器为预先配置的用于维护所述计算主节点所需信息以及所述存储主节点所需信息的节点;然后,该第一节点接收该配置管理器发送的该上一迭代标识;接着,该第一节点根据该上一迭代标识生成该当前迭代标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

结合第一方面,或者第一方面的上述任意一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述目标消息包括至少一条日志,该第一节点向该存储主节点发送目标消息,包括:该第一节点使用n个槽异步向该存储主节点发送m条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该存储主节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等存储主节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等存储主节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待存储主节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

结合第一方面,或者第一方面的上述任意一种可能的实现方式,在第一方面的第五种可能的实现方式中,该第一节点在初始化时获取存储节点集群的状态消息,包括:第一节点在初始化时向配置管理器获取存储节点集群的状态消息,该配置管理器为预先配置的用于维护该计算主节点所需信息以及该存储主节点所需信息的节点。也即是说,该状态消息由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的状态消息出现不一致而导致状态消息混乱的情况。

第二方面,本发明实施例提供一种日志处理方法,该方法包括:首先,存储主节点接收第一节点发送的第一写操作请求,该第一节点为计算节点集群中具有写操作能力和读操作能力的计算主节点;然后,该存储主节点根据该第一写操作请求与该存储主节点所在的存储节点集群中的存储从节点,对已接收的日志达成一致后对第一写操作达成一致;接着,该存储主节点与该存储从节点对该第一写操作达成一致之后,向该第一节点发送标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述步骤,第一节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

结合第二方面,在第二方面的第一种可能的实现方式中,该向该第一节点发送已达成一致的日志的lsn和针对该第一写操作请求的响应之后,还包括:首先,该存储主节点接收目标消息,该目标消息包括当前迭代标识和至少一条日志;然后,若该当前迭代标识小于该存储主节点存储的迭代标识,该存储主节点丢弃当前接收的该目标消息中的日志;该存储主节点自身存储的迭代标识为该存储主节点接收的上一迭代标识。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样存储主节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

结合第二方面,或者第二方面的上述任意一种可能的实现方式,在第二方面的第二种可能的实现方式中,该方法还包括:若该当前迭代标识不小于该存储主节点存储的迭代标识,该存储主节点向该存储主节点所在的存储节点集群同步当前接收的该目标消息中的日志;并将自身存储的迭代标识更新为该当前迭代标识。

结合第二方面,或者第二方面的上述任意一种可能的实现方式,在第二方面的第三种可能的实现方式中,该存储主节点接收目标消息,包括:该存储主节点接收该第一节点通过n个槽异步发送的n条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该存储主节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等存储主节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等存储主节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待存储主节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

结合第一方面,或者第一方面的上述任一可能的实现方式,或者第二方面,或者第二方面的上述任一可能的实现方式,在一种可选的方案中,该第一节点为计算节点集群中新产生的具有写操作和读操作能力的计算主节点。新产生的具有写操作和读操作能力的计算主节点通常不知道上一次产生的计算主节点是否发送的日志,因此不知道存储主节点已接收的日志的lsn,这种情况下,该最新产生的计算主节点向存储主节点发送第一写操作请求,就可以触发存储主节点与存储从节点对已接收到的日志达成一致并反馈给该最新的计算主节点,从而使得最新的计算主节点知道存储主节点已接收的日志的lsn,后续该最新的计算主节点向该存储主节点发送日志就不会出现不同的日志有同样的lsn的情况,避免了日志混乱。

第三方面,本发明实施例提供一种节点,该节点包括处理器、存储器和通信接口,该存储器用于存储程序指令,该处理器用于调用该程序指令来执行如下操作:首先,在初始化时获取存储节点集群的状态消息,该状态消息标记了该存储节点集群的存储主节点;该节点为计算节点集群中具有写操作能力和读操作能力的计算主节点;然后,根据该状态消息通过该通信接口向该存储主节点发送第一写操作请求,以使该存储主节点与该存储节点集群中的存储从节点对已接收的日志达成一致后对第一写操作达成一致;接着,通过该通信接口接收该存储主节点与该存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息,该反馈消息包括标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述操作,节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

结合第三方面,在第三方面的第一种可能的实现方式中,该处理器通过该通信接口接收该存储主节点与所述存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息之后,还用于:通过该通信接口向该存储主节点发送目标消息,该目标消息包括当前迭代标识,该当前迭代标识被该存储主节点用来判断该目标消息是否来自最新产生的计算主节点;该当前迭代标识比上一次产生的计算主节点发送上一迭代标识大。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样存储主节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

结合第三方面,或者第三方面的上述任意一种可能的实现方式,在第三方面的第二种可能的实现方式中,该处理器通过该通信接口向该存储主节点发送目标消息之前,还用于:首先,通过该通信接口向预设的配置管理器发送第一请求以请求当前迭代标识,所述配置管理器为预先配置的用于维护所述计算主节点所需信息以及所述存储主节点所需信息的节点;然后,通过该通信接口接收该配置管理器发送的该当前迭代标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

结合第三方面,或者第三方面的上述任意一种可能的实现方式,在第三方面的第三种可能的实现方式中,该处理器通过该通信接口向该存储主节点发送目标消息之前,还用于:首先,通过该通信接口向预设的配置管理器发送第一请求以请求该上一迭代标识,所述配置管理器为预先配置的用于维护所述计算主节点所需信息以及所述存储主节点所需信息的节点;然后,通过该通信接口接收该配置管理器发送的该上一迭代标识;接着,根据该上一迭代标识生成该当前迭代标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

结合第三方面,或者第三方面的上述任意一种可能的实现方式,在第三方面的第四种可能的实现方式中,所述目标消息包括至少一条日志;该处理器通过该通信接口向该存储主节点发送目标消息,具体为:通过该通信接口使用n个槽异步向该存储主节点发送m条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该存储主节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等存储主节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等存储主节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待存储主节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

结合第三方面,或者第三方面的上述任意一种可能的实现方式,在第三方面的第五种可能的实现方式中,该处理器在初始化时获取存储节点集群的状态消息,具体为:在初始化时向配置管理器获取存储节点集群的状态消息,该配置管理器为预先配置的用于维护该计算主节点所需信息以及该存储主节点所需信息的节点。也即是说,该状态消息由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的状态消息出现不一致而导致状态消息混乱的情况。

结合第三方面,或者第三方面的上述任一可能的实现方式,在一种可选的方案中,该节点为计算节点集群中新产生的具有写操作和读操作能力的计算主节点。新产生的具有写操作和读操作能力的计算主节点通常不知道上一次产生的计算主节点是否发送的日志,因此不知道存储主节点已接收的日志的lsn,这种情况下,该最新产生的计算主节点向存储主节点发送第一写操作请求,就可以触发存储主节点与存储从节点对已接收到的日志达成一致并反馈给该最新的计算主节点,从而使得最新的计算主节点知道存储主节点已接收的日志的lsn,后续该最新的计算主节点向该存储主节点发送日志就不会出现不同的日志有同样的lsn的情况,避免了日志混乱。第四方面,本发明实施例提供一种节点,该节点包括处理器、存储器和通信接口,该存储器用于存储程序指令,该处理器用于调用该程序指令来执行如下操作:首先,通过该通信接口接收第一节点发送的第一写操作请求,该第一节点为计算节点集群中具有写操作能力和读操作能力的计算主节点;然后,根据该第一写操作请求与该节点所在的节点集群中的存储从节点,对已接收的日志达成一致后对第一写操作达成一致;接着,与该存储从节点对该第一写操作达成一致之后,通过该通信接口向该第一节点发送标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述操作,第一节点在初始化时向节点发送第一写操作请求,然后该节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

结合第四方面,在第四方面的第一种可能的实现方式中,该处理器通过该通信接口向该第一节点发送已达成一致的日志的lsn和针对该第一写操作请求的响应之后,还用于:首先,通过该通信接口接收目标消息,该目标消息包括迭代标识和至少一条日志;然后,若该当前迭代标识小于该节点存储的迭代标识,丢弃当前接收的该目标消息中的日志;该节点自身存储的迭代标识为该节点接收的上一迭代标识。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

结合第四方面,或者第四方面的上述任意一种可能的实现方式,在第四方面的第二种可能的实现方式中,该处理器还用于:若该当前迭代标识不小于该节点存储的迭代标识,通过该通信接口向该节点所在的节点集群同步当前接收的该目标消息中的日志;并将自身存储的迭代标识更新为该当前迭代标识。

结合第四方面,或者第四方面的上述任意一种可能的实现方式,在第四方面的第三种可能的实现方式中,该处理器通过该通信接口接收目标消息,具体为:通过该通信接口接收该第一节点通过n个槽异步发送的n条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

结合第四方面,或者第四方面的上述任一可能的实现方式,在一种可选的方案中,该第一节点为计算节点集群中新产生的具有写操作和读操作能力的计算主节点。新产生的具有写操作和读操作能力的计算主节点通常不知道上一次产生的计算主节点是否发送的日志,因此不知道节点已接收的日志的lsn,这种情况下,该最新产生的计算主节点向节点发送第一写操作请求,就可以触发节点与存储从节点对已接收到的日志达成一致并反馈给该最新的计算主节点,从而使得最新的计算主节点知道节点已接收的日志的lsn,后续该最新的计算主节点向该节点发送日志就不会出现不同的日志有同样的lsn的情况,避免了日志混乱。

结合以上任意一方面,或者任意一方面的上述任意一种可能的实现方式,在一种可选的方案中,所述第一写操作包括一个空操作noop。

第五方面,本发明实施例提供一种日志处理系统,该日志处理系统包括计算主节点、至少一个计算从节点、存储主节点、至少一个存储从节点,其中:

该计算主节点用于向该存储主节点发送读操作请求和/或写操作请求,以及用于向该存储从节点发送读操作请求;

该计算从节点用于向该存储主节点和/或该存储从节点发送读操作请求;

该存储主节点用于根据接收到的该写操作请求执行写操作,并与该至少一个存储从节点对执行完的写操作达成一致;以及用于根据接收到的读操作请求执行读操作;

该存储从节点用于与该存储主节点对该存储主节点执行完的写操作达成一致,以及用于根据接收到的读操作请求执行读操作;

该计算主节点还用于向该存储主节点发送第一写操作请求;

该存储主节点用于接收该第一写操作请求,并根据该第一写操作请求与该至少一个存储从节点对已接收的日志达成一致后对该第一写操作达成一致,以及,在与该至少一个存储从节点对该第一写操作达成一致之后,向该计算主节点发送标识信息和针对该第一写操作请求的响应,该标识信息用于指示该存储主节点与该至少一个存储从节点之间已达成一致的日志。

其中,该计算主节点的实现可以对应参照上述第三方面或者第三方面的任一可能的实现方式所描述的节点的实现,该存储主节点的实现可以对应参照上述第四方面或者第四方面的任一可能的实现方式所描述的节点的实现。

第六方面,本发明实施例提供一种芯片系统,该芯片系统包括至少一个处理器,存储器和接口电路,该存储器、该收发器和该至少一个处理器通过线路互联,该至少一个存储器中存储有指令;该指令被该处理器执行时,实现第一方面,或第一方面的任意一种可能的实现方式,或第二方面,或第二方面的任意一种可能的实现方式所描述的方法。

第七方面,本发明实施例提供一种计算机可读存储介质,该计算机可读存储介质中存储有程序指令,当该程序指令在处理器上运行时,实现第一方面,或第一方面的任意一种可能的实现方式,或第二方面,或第二方面的任意一种可能的实现方式所描述的方法。

第八方面,本发明实施例提供一种计算机程序产品,其特征在于,当该计算机程序产品在处理器上运行时,实现第一方面,或第一方面的任意一种可能的实现方式,或第二方面,或第二方面的任意一种可能的实现方式所描述的方法。

通过实施本发明实施例,第一节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

附图说明

以下对本发明实施例用到的附图进行介绍。

图1是现有技术中的一种日志处理系统的架构示意图;

图2a是本发明实施例提供的一种日志处理系统的架构示意图;

图2b是本发明实施例提供的又一种日志处理系统的架构示意图;

图3是本发明实施例提供的一种日志处理方法的流程示意图;

图4是本发明实施例提供的一种第一节点的结构示意图;

图5是本发明实施例提供的一种存储主节点的结构示意图;

图6是本发明实施例提供的又一种第一节点的结构示意图;

图7是本发明实施例提供的又一种存储主节点的结构示意图。

具体实施方式

下面结合本发明实施例中的附图对本发明实施例进行描述。

请参见图2a,图2a是本发明实施例提供的一种日志处理系统20的结构示意图,该日志处理系统20包括应用211、计算主节点221、计算从节点222、配置管理器231、存储主节点241和存储从节点242,其中,应用211可以为一个也可以为多个,图2a中以三个为例进行示意;一个计算主节点和至少一个计算从节点构成计算节点集群,图2a中以两个计算从节点为例进行示意,计算节点集群中各个节点之间可以维护一个用于做故障恢复的心跳,当计算主节点因为故障或者是负载问题时,该计算节点集群中会重新选举出一个计算从节点作为新的计算主节点。一个存储主节点和至少一个存储从节点构成存储节点集群,图2a中以两个存储从节点为例进行示意,存储节点集群中各个节点之间可以维护一个用于做故障恢复的心跳,当存储主节点因为故障或者是负载问题时,该存储节点集群中会重新选举出一个存储从节点作为新的存储主节点,下面结合应用211、计算主节点221、计算从节点222、配置管理器231、存储主节点241和存储从节点242对日志的处理过程进行大致介绍。

应用211可以向计算主节点221发起读数据和写数据的请求,也可以向计算从节点222发起读数据的请求,计算主节点和计算从节点可根据该读数据的请求从存储集群中读取数据。

计算主节点221中可包括计算解析器、innodb缓存、日志发送器,计算解析器用于解析计算语句来生成执行策略;innodb缓存用于缓存日志或其他数据库数据;日志发送器用于向存储主节点发送日志。具体来说,该计算主节点221接收到应用211发送的写数据的请求后,计算解析器会执行相应的计算语句来对该请求做出响应,如生成日志。生成的日志可以由该innodb缓存来进行缓存,然后由该日志发送器将缓存的日志发送给存储主节点241进行保存。

存储主节点241中可以包括日志接收器、日志序列管理器、日志去重模块和日志持久化模块,其中,日志接收器用于接收该计算主节点的日志发送器发送的日志以及其他信息(例如,用于表明计算主节点221的更新情况的term标识)。日志序列管理器用于在内存和磁盘中维护在存储节点集群240里已达成一致的日志的日志序列号(logsequencenumber,lsn),此处的已达成一致的日志是指该存储主节点241已经同步到存储节点集群240中一半以上的节点中的日志。该日志去重模块用于对重复的日志进行过滤。该日志持久化模块用于对日志在本地进行持久化,并通过一致性同步复制协议把日志复制到其他存储节点进行待久化。

配置管理器231用于存储该计算主节点221、计算从节点222、存储主节点241和存储从节点242等节点所需要用到的一些信息,例如,用于表明计算主节点221的更新情况的迭代(term)标识,表明存储节点集群240中每个节点运行状态(例如,是否故障)的信息等等。

可以理解的是,计算主节点221和存储主节点241中各个模块(或者说器件)是根据功能划分出的功能模块,在具体实现中部分功能块可能被细分为更多细小的功能模块,部分功能模块也可能组合成一个功能模块,但无论这些功能模块是进行了细分还是组合,计算主节点221和存储主节点241在日志处理过程中所执行的大致流程是相同的。通常,每个功能模块都对应有各自的程序代码(或者说程序指令),这些功能模块各自对应的程序代码在处理器上运行时,使得功能模块执行相应的流程从而实现相应功能。

另外,还可以将日志的计算部分和存储部分池化,池化架构如图2b所示,该池化架构包括应用211、数据库中间件251、计算节点集群261、配置管理器231和存储分片节点271,其中,数据库中间件251负责对应用211发起的读数据请求和写数据请求集中分配到计算节点集群261,计算节点集群261有多个,每个就算节点集群261有一个计算主节点和至少一个计算从节点。该存储分片节点271有多个,每个存储分片节点271中包含多个分片,每个存储分片节点中各提供一个存储分片出来所构成的多分片结构(图2b中,存储分配节点中填充物相同的小方框共同组成一个多分片结构)相当于图2a所示的存储节点集群,该多分片结构中每个分片相当于图2a所示的存储节点集群中的一个节点,并且该多分片结构中一个分片相当于存储节点集群中的存储主节点,该多分片结构中的其他分片相当于存储节点集群中的存储从节点。因此,图2b所示的架构相当于多个日志处理系统20的集成,且该多个日志处理系统20复用一个存储节点集群。鉴于图2b所示架构与图2a所示日志处理系统20的架构关系,本发明实施例的发明点基于图2a所示的日志处理系统20实现的原理,与基于图2b所示架构实现的原理相同,后续的方法实施例以及装置实施例主要基于图2a所示的日志处理系统20进行描述。

请参见图3、图3是本发明实施例提供的一种日志同步方法,该方法可以基于图2a所示的日志处理系统20来实现,也可以基于图2b所示架构来实现,还可以基于其他架构来实现,该方法包括但不限于如下步骤:

步骤s301:第一节点在初始化时获取存储节点集群的状态消息。

具体地,该第一节点为计算节点集群(例如,该计算节点集群中每个计算节点都可以为一个sql节点)中具有写操作能力和读操作能力的计算主节点,通常计算节点集群中的各个节点会根据存活状态、负载大小等信息确定出选举出其中一个节点作为具有读操作能力和写操作能力的计算主节点。第一种情况,该第一节点被该计算节点集群中的节点选举为计算主节点有一段时间,现在进行重启,那么该第一节点就会进行初始化操作;第二种情况,该第一节点刚被该计算节点集群中的节点选举为计算主节,该第一节点在作为计算主节点运行时首先要进行初始化。另外,该状态消息记录了该存储节点集群的各个存储节点中哪个存储节点为存储主节点,哪些(或哪个)存储节点为存储从节点;可选的,该状态消息还可以记录该存储节点集群中各个存储节点的存活状态。

步骤s302:该第一节点根据该状态消息向该存储主节点发送第一写操作请求。

具体地,该第一节点可以根据该状态消息确定哪些确定出该存储节点集群中的存储主节点,并向该存储主节点发送第一写操作请求。该第一写操作请求用于请求存储主节点与存储从节点对第一写操作达成一致,通常情况下,若该存储主节点与该存储节点集群中一半以上的节点完成了对该第一写操作的同步,那么,则认为该存储主节点与该存储节点集群中的存储从节点对第一写操作达成了一致。可选的,该第一写操作请求可以具体为一个空操作noop请求,即该第一写操作请求用于请求存储主节点与存储从节点对一个空操作noop达成一致,即此处的第一写操作即为一个空操作noop。

步骤s303:该存储主节点接收第一节点发送的第一写操作请求。

步骤s304:该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致。

具体地,根据存储节点集群中的存储节点的工作机制,该存储主节点在与该存储从节点针对该第一写操作达成一致之前,会先与该存储从节点对在该第一写操作请求以前接收到的但还未达成一致的日志达成一致,已接收到的全部日志都达成一致后再对一个达成一致。举例来说,假设第一节点初始化时该存储主节点已经接收到lsn分别为1、2和3的日志,并且在该存储主节点感知到该第一节点初始化完成时,已经对lsn为1和2的日志达成了一致。在这种情况下,该存储主节点会根据该第一写操作请求的指示对第一写操作达成一致,根据存储节点集群中的存储节点的工作机制,由于该存储主节点是在接收到第一写操作请求之前接收到lsn为3的日志,因此,该存储主节点会继续对lsn为3的日志达成一致,再对第一写操作达成一致;这样一来,该存储主节点最终还是会对lsn为3的日志达成一致。

在本发明实施例中,该存储主节点与存储从节点对已接收的日志达成一致是指,该存储主节点将已接收的日志同步到了该存储节点集群中一半以上的节点上。存储主节点同步日志可以采用paxos、raft、zab等一致性同步复制协议来实现。

步骤s305:该存储主节点向该第一节点发送标识信息和针对该第一写操作请求的响应。

具体地,该存储主节点与该存储从节点对该第一写操作达成一致之后,向该第一节点发送标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志的lsn,以便于该第一节点知道该存储主节点上的已达成一致的日志的lsn排到了多少。

步骤s306:该第一节点接收该存储主节点对该第一写操作达成一致后发送的反馈消息。

具体地,该第一节点解析该反馈消息已获得其中的标识信息和针对该第一写操作请求的响应,该第一节点可以根据标识信息确定该存储主节点上已达成一致的日志的lsn,后续该第一节点再向该存储主节点发送日志时,新发送的日志的lsn是延续该已达成一致的日志的lsn往后排序的,因此,新发送的日志的lsn不会与该已达成一致的日志的lsn重复,避免了数据出现混乱的情况。

在又一种可选的方案中,该第一节点接收该存储主节点对该第一写操作达成一致后发送的反馈消息之后,该方法还可以包括流程s307-s310:

步骤s307:该第一节点向该存储主节点发送目标消息。

具体地,该目标消息包括当前迭代标识和至少一条日志,可选的,该目标消息可以具体存放在日志发送器上,后续由该日志发送器来进行发送;该当前迭代标识用于该存储主节点判断该目标消息是否来自最新产生的计算主节点;任意一个新产生的计算主节点发送的该目标消息中的迭代标识(简称当前迭代标识),比上一次产生的计算主节点发送的该目标消息中的迭代标识大(简称上一迭代标识)。

也即是说,本发明实施例中的每个计算主节点发送向该存储主节点发送目标消息时,都会携带一个迭代标识,不同时期的计算主节点发送的迭代标识不同,例如,计算节点集群中第t次选举出的计算主节点发送的迭代标识为r,计算节点集群中第t+1次选举出的计算主节点发送的迭代标识为r+j,其中,r、t和j均为正整数。假设该计算节点集群中存在第二节点和第三节点,那么存在如下关系:若第二节点为在第三节点之后产生的计算主节点,则第二节点向该存储主节点发送的目标消息中的迭代标识大于第三节点向该存储主节点发送的目标消息中的迭代标识;若第二节点为在第三节点之前产生的计算主节点,则第二节点向该存储主节点发送的目标消息中的迭代标识小于第三节点向该存储主节点发送的目标消息中的迭代标识;若第二节点与第三节点为同一个节点且为同一次初始化后的计算主节点,则第二节点向该存储主节点发送的目标消息中的迭代标识等于第三节点向该存储主节点发送的目标消息中的迭代标识。

可选的,该第一节点向该存储主节点发送目标消息,可以具体为:该第一节点使用n个槽异步向该存储主节点发送m条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该存储主节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,另外,当一条目标消息中有多个日志时该一条目标消息中生成时间越早的日志越早被发送。m和n均为大于等于2的正整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等存储主节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等存储主节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待存储主节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

步骤s308:该存储主节点接收目标消息。

具体地,该存储主节点会解析出当前接收到的目标消息中的当前迭代标识和至少一条日志,另外,该存储主节点自身也存储了迭代标识且存储的迭代标识为该存储主节点上一次接收的目标消息中的迭代标识,即为上一迭代标识,存储主节点将当前接收的目标消息中的当前迭代标识与存储主节点存储的上一迭代标识进行比较,从而确定当前接收的目标消息是不是最新产生的计算主节点发送的。可选的,该比较的操作可以具体由该存储主节点上的日志接收器来完成。

步骤s309:若当前接收的该目标消息中的当前迭代标识小于该存储主节点存储的上一迭代标识,该存储主节点丢弃当前接收的该目标消息中的日志。

具体地,若当前接收的该目标消息中的当前迭代标识小于该存储主节点存储的上一迭代标识,则表明该当前接收的目标消息不是该计算节点集群中最新产生的计算主节点发送的,因此,该存储主节点丢弃当前接收的该目标消息中的日志,以避免之前产生的计算主节点发送的日志产生引起最新产生的计算主节点发送的日志混乱。

步骤s310:若当前接收的目标消息中的当前迭代标识不小于该存储主节点存储的上一迭代标识,该存储主节点向该存储主节点所在的存储节点集群提交当前接收的该目标消息中的日志,并将自身存储的迭代标识更新为该当前迭代标识。

具体地,若当前接收的该目标消息中的当前迭代标识大于或者等于该存储主节点存储的上一迭代标识,则表明该当前接收的目标消息是该计算节点集群中最新产生的计算主节点发送的,因此,该目标消息中的日志是有用的,所以该存储主节点向该存储主节点所在的存储节点集群提交当前接收的该目标消息中的日志。另外,该存储主节点还将自身存储的迭代标识更新为该当前迭代标识,以用于后续参考对比。

本发明实施例中还可能存在配置管理器,该配置管理器为预先配置的用于维护该计算主节点所需信息以及该存储主节点所需信息的节点,该配置管理器可以为单个的硬件设备也可以为多个硬件设备构成的集群,例如,采用zookeeper技术形成的集群。

例如,该第一节点在初始化时获取存储节点集群的状态消息,可以具体为:第一节点在初始化时向配置管理器获取存储节点集群的状态消息,即该状态消息存储在该配置管理器中。

再如,配置管理器可以存储上述迭代标识,配置管理器存储迭代标识包括如下可能情况:

情况一:在该第一节点向该存储主节点发送目标消息之前,该第一节点向配置管理器发送第一请求以请求该当前迭代标识,然后,该配置管理器向存储主节点发送该当前迭代标识,接着,该第一节点接收该配置管理器发送的该当前迭代标识。后续,该第一节点发送的目标消息中携带该当前迭代标识。需要说明的是,该配置管理器每次感知到有新产生的计算主节点时,都会在原有的迭代标识的基础上加上j得到新的迭代标识。

情况二:该第一节点向该存储主节点发送目标消息之前,该第一节点向预设的配置管理器发送第一请求以请求该上一迭代标识;然后,该配置管理器向该第一节点发送该上一迭代标识,接着,该第一节点接收该配置管理器发送的该上一迭代标识,并根据该上一迭代标识生成该当前迭代标识,例如,将该上一迭代标识加t得到的新迭代标识作为该当前迭代标识,后续,该第一节点发送的目标消息中就可以携带该当前迭代标识。另外,该第一节点还会将生成的该最新产生的计算主节点发送目标消息要用的该当前迭代标识发送给该配置管理器。

在本发明实施例中,该计算主节点向存储主节点发送的第一写操作请求还可以携带迭代标识,该迭代标识用于该存储主节点判断该第一写操作请求是否来自最新产生的计算主节点;任意一个新产生的计算主节点发送的第一写操作请求中的迭代标识,比上一次产生的计算主节点发送的该第一写操作请求中的迭代标识大。这样一来,该存储主节点就可以根据接收到的第一写操作请求中的迭代标识判断迭代标识是否为最新产生的计算主节点发送的,如果是则根据该第一写操作请求对一个空操作noop达成一致,如果不是则丢弃该第一写操作请求而不对一个空操作noop达成一致。具体原理可以参照以上对目标消息中的迭代标识的描述,此处不再赘述。

在本发明实施例中,该存储主节点与存储从节点之间对日志达成一致之后,会通过一个列表来保存达成一致的日志的lsn,或者通过哈希映射的方式保存达成一致的日志的lsn,后续再接收到日志时该存储主节点将接收的日志的lsn与该列表或者哈希映射关系进行比对,看接收到的日志是否在前面已经接收过,若已接收过则丢弃,若没有接收过则保留该日志并将该日志的lsn保留到上述列表或者哈希隐射关系中。另外,存储主节点还可以通过日志重放状态机对达成一致的日志进行处理,从而重放出按照日志指示的方式处理后的数据库数据。

在图3所示的方法中,第一节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

上述详细阐述了本发明实施例的方法,下面提供了本发明实施例的装置。

请参见图4,图4是本发明实施例提供的一种节点40,节点40包括处理器401、存储器402和通信接口403,该处理器401、存储器402和通信接口403通过总线相互连接。

存储器402包括但不限于是随机存储记忆体(randomaccessmemory,ram)、只读存储器(read-onlymemory,rom)、可擦除可编程只读存储器(erasableprogrammablereadonlymemory,eprom)、或便携式只读存储器(compactdiscread-onlymemory,cd-rom),该存储器402用于相关指令及数据。通信接口403用于接收和发送数据。

处理器401可以是一个或多个中央处理器(centralprocessingunit,cpu),在处理器401是一个cpu的情况下,该cpu可以是单核cpu,也可以是多核cpu。

节点40中的处理器401用于读取该存储器402中存储的程序代码,执行以下操作:

首先,在初始化时获取存储节点集群的状态消息,该状态消息标记了该存储节点集群的存储主节点;该节点为计算节点集群中具有写操作能力和读操作能力的计算主节点;然后,根据该状态消息通过该通信接口向该存储主节点发送第一写操作请求,以使该存储主节点与该存储节点集群中的存储从节点对已接收的日志达成一致后对第一写操作达成一致;接着,通过该通信接口接收该存储主节点与该存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息,该反馈消息包括标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述操作,节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

在又一种可选的方案中,该处理器401通过该通信接口403接收该存储主节点与所述存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息之后,还用于:通过该通信接口向该存储主节点发送目标消息,该目标消息包括当前迭代标识,该当前迭代标识被该存储主节点用来判断该目标消息是否来自最新产生的计算主节点;该当前迭代标识比上一次产生的计算主节点发送上一迭代标识大。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样存储主节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

在又一种可选的方案中,该处理器401通过该通信接口403向该存储主节点发送目标消息之前,还用于:首先,通过该通信接口向预设的配置管理器发送第一请求以请求当前迭代标识,所述配置管理器为预先配置的用于维护所述计算主节点所需信息以及所述存储主节点所需信息的节点;然后,通过该通信接口接收该配置管理器发送的该当前迭代标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

在又一种可选的方案中,该处理器401通过该通信接口403向该存储主节点发送目标消息之前,还用于:首先,通过该通信接口向预设的配置管理器发送第一请求以请求该上一迭代标识,所述配置管理器为预先配置的用于维护所述计算主节点所需信息以及所述存储主节点所需信息的节点;然后,通过该通信接口接收该配置管理器发送的该上一迭代标识;接着,根据该上一迭代标识生成该当前迭代标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

在又一种可选的方案中,所述目标消息包括至少一条日志;该处理器401通过该通信接口403向该存储主节点发送目标消息,具体为:通过该通信接口403使用n个槽异步向该存储主节点发送m条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该存储主节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等存储主节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等存储主节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待存储主节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

在又一种可选的方案中,该处理器401在初始化时获取存储节点集群的状态消息,具体为:在初始化时向配置管理器获取存储节点集群的状态消息,该配置管理器为预先配置的用于维护该计算主节点所需信息以及该存储主节点所需信息的节点。也即是说,该状态消息由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的状态消息出现不一致而导致状态消息混乱的情况。

在又一种可选的方案中,该节点为计算节点集群中新产生的具有写操作和读操作能力的计算主节点。需要说明的是,新产生的具有写操作和读操作能力的计算主节点通常不知道上一次产生的计算主节点是否发送的日志,因此不知道存储主节点已接收的日志的lsn,这种情况下,该最新产生的计算主节点向存储主节点发送第一写操作请求,就可以触发存储主节点与存储从节点对已接收到的日志达成一致并反馈给该最新的计算主节点,从而使得最新的计算主节点知道存储主节点已接收的日志的lsn,后续该最新的计算主节点向该存储主节点发送日志就不会出现不同的日志有同样的lsn的情况,避免了日志混乱。

需要说明的是,各个操作的实现还可以对应参照图3所示的方法实施例的相应描述。其中,图4所示实施例中的节点可以为图3所示方法实施例中的第一节点。

在图4所描述的节点40中,该节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

请参见图5,图5是本发明实施例提供的一种节点50,该节点50包括处理器501、存储器502和通信接口503,处理器501、存储器502和通信接口503通过总线连接。

存储器502包括但不限于是随机存储记忆体(randomaccessmemory,ram)、只读存储器(read-onlymemory,rom)、可擦除可编程只读存储器(erasableprogrammablereadonlymemory,eprom)、或便携式只读存储器(compactdiscread-onlymemory,cd-rom),该存储器502用于相关指令及数据。通信接口503用于接收和发送数据。

处理器501可以是一个或多个中央处理器(centralprocessingunit,cpu),在处理器501是一个cpu的情况下,该cpu可以是单核cpu,也可以是多核cpu。

节点50中的处理器501用于读取该存储器502中存储的程序代码,执行以下操作:

首先,通过该通信接口503接收第一节点发送的第一写操作请求,该第一节点为计算节点集群中具有写操作能力和读操作能力的计算主节点;然后,根据该第一写操作请求与该节点所在的存储节点集群中的存储从节点,对已接收的日志达成一致后对第一写操作达成一致;接着,与该存储从节点对该第一写操作达成一致之后,通过该通信接口503向该第一节点发送标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述操作,第一节点在初始化时向节点发送第一写操作请求,然后该节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

在又一种可选的方案中,该处理器501通过该通信接口503向该第一节点发送已达成一致的日志的lsn和针对该第一写操作请求的响应之后,还用于:首先,通过该通信接口503接收目标消息,该目标消息包括迭代标识和至少一条日志;然后,若该当前迭代标识小于该节点存储的迭代标识,丢弃当前接收的该目标消息中的日志;该节点自身存储的迭代标识为该节点接收的上一迭代标识。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

在又一种可选的方案中,该处理器501还用于:若该当前迭代标识不小于该节点存储的迭代标识,通过该通信接口503向该节点所在的存储节点集群同步当前接收的该目标消息中的日志;并将自身存储的迭代标识更新为该当前迭代标识。

在又一种可选的方案中,该处理器501通过该通信接口503接收目标消息,具体为:通过该通信接口503接收该第一节点通过n个槽异步发送的n条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

在又一种可选的方案中,该第一节点为计算节点集群中新产生的具有写操作和读操作能力的计算主节点。需要说明的是,新产生的具有写操作和读操作能力的计算主节点通常不知道上一次产生的计算主节点是否发送的日志,因此不知道节点已接收的日志的lsn,这种情况下,该最新产生的计算主节点向节点发送第一写操作请求,就可以触发节点与存储从节点对已接收到的日志达成一致并反馈给该最新的计算主节点,从而使得最新的计算主节点知道节点已接收的日志的lsn,后续该最新的计算主节点向该节点发送日志就不会出现不同的日志有同样的lsn的情况,避免了日志混乱。

需要说明的是,各个操作的实现还可以对应参照图3所示的方法实施例的相应描述。其中,图5所示实施例中的节点可以为图3所示方法实施例中的存储主节点。

在图5所描述的节点50中,第一节点在初始化时向节点发送第一写操作请求,然后该节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

请参见图6,图6是本发明实施例提供的一种节点60的结构示意图,该节点60可以包括获取单元601、发送单元602和接收单元603,其中,各个单元的详细描述如下。

获取单元601用于节点在初始化时获取存储节点集群的状态消息,该状态消息标记了该存储节点集群的存储主节点;该节点为计算节点集群中具有写操作能力和读操作能力的计算主节点。

发送单元602用于根据该状态消息向该存储主节点发送第一写操作请求,以使该存储主节点与该存储节点集群中的存储从节点对已接收的日志达成一致后对第一写操作达成一致。

接收单元603用于接收该存储主节点与该存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息,该反馈消息包括标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述步骤,节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

在又一种可选的方案中,该发送单元602还用于在该接收单元603接收该存储主节点与该存储节点集群中的存储从节点对该第一写操作达成一致后发送的反馈消息之后,向该存储主节点发送目标消息,该目标消息包括当前迭代标识,该当前迭代标识被该存储主节点用于判断该目标消息是否来自最新产生的计算主节点;该当前迭代标识比上一次产生的计算主节点发送的上一迭代标识大。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样存储主节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

在又一种可选的方案中,该发送单元602还用于在向该存储主节点发送目标消息之前,向预设的配置管理器发送第一请求以请求giant当前迭代标识。该接收单元603还用于接收该配置管理器发送的该当前标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

在又一种可选的方案中,该节点还包括生成单元,其中:该发送单元602还用于在向该存储主节点发送目标消息之前,向预设的配置管理器发送第一请求以请求该上一迭代标识,所述配置管理器为预先配置的用于维护所述计算主节点所需信息以及所述存储主节点所需信息的节点;该接收单元603还用于接收该配置管理器发送的该上一迭代标识;该生成单元用于根据该上一迭代标识生成该当前迭代标识。也即是说,迭代标识由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的迭代标识出现不一致而导致迭代标识混乱的情况。

在又一种可选的方案中,所述目标消息包括至少一条日志,该发送单元602向该存储主节点发送目标消息,可以具体为:使用n个槽异步向该存储主节点发送m条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该存储主节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等存储主节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等存储主节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待存储主节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

在又一种可选的方案中,该获取单元601在初始化时获取存储节点集群的状态消息,可以具体为:在初始化时向配置管理器获取存储节点集群的状态消息,该配置管理器为预先配置的用于维护该计算主节点所需信息以及该存储主节点所需信息的节点。也即是说,该状态消息由配置管理器进行独立保存,可供计算节点集群中的任意一个可能成为计算主节点的节点查询,而不是存储该计算节点集群中的每个节点上,能够避免计算节点集群中各个节点之间维护的状态消息出现不一致而导致状态消息混乱的情况。

在又一种可选的方案中,该节点为计算节点集群中新产生的具有写操作和读操作能力的计算主节点。需要说明的是,新产生的具有写操作和读操作能力的计算主节点通常不知道上一次产生的计算主节点是否发送的日志,因此不知道存储主节点已接收的日志的lsn,这种情况下,该最新产生的计算主节点向存储主节点发送第一写操作请求,就可以触发存储主节点与存储从节点对已接收到的日志达成一致并反馈给该最新的计算主节点,从而使得最新的计算主节点知道存储主节点已接收的日志的lsn,后续该最新的计算主节点向该存储主节点发送日志就不会出现不同的日志有同样的lsn的情况,避免了日志混乱。

需要说明的是,各个单元的实现还可以对应参照图6所示的方法实施例的相应描述。其中,图6所示实施例中的节点可以为图3所示方法实施例中的第一节点。

在图6所描述的节点60中,节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

请参见图7,图7是本发明实施例提供的一种节点70的结构示意图,该节点70可包括接收单元701、处理单元702和发送单元703,其中,各个单元的详细描述如下。

接收单元701用于接收第一节点发送的第一写操作请求,该第一节点为计算节点集群中具有写操作能力和读操作能力的计算主节点;

处理单元702用于根据该第一写操作请求与该节点所在的存储节点集群中的存储从节点,对已接收的日志达成一致后对第一写操作达成一致;

发送单元703用于在该处理单元702与该存储从节点对该第一写操作达成一致之后,向该第一节点发送标识信息和针对该第一写操作请求的响应,该标识信息用于指示已达成一致的日志。

通过执行上述步骤,第一节点在初始化时向节点发送第一写操作请求,然后该节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

在一种可选的方案中,该节点70还包括丢弃单元,其中:该接收单元701还用于在该发送单元703向该第一节点发送已达成一致的日志的lsn和针对该第一写操作请求的响应之后,接收目标消息,该目标消息包括当前迭代标识和至少一条日志。该丢弃单元用于在该当前迭代标识小于该节点存储的迭代标识的情况下,丢弃当前接收的该目标消息中的日志;该节点自身存储的迭代标识为该节点接收的上一迭代标识。也即是说,通过不同的迭代标识对不同时期产生的计算主节点进行标记,并将该迭代标识携带在发送的目标消息中,这样节点就可以通过该目标消息中的迭代标识确定该目标消息是否为最新产生的计算主节点发送的目标消息,从而可以决定是否丢弃该目标消息。

在又一种可选的方案中,该处理单元702还用于在当前迭代标识不小于该节点存储的迭代标识的情况下,向该节点所在的存储节点集群同步当前接收的该目标消息中的日志,并将自身存储的迭代标识更新为该当前迭代标识。

在又一种可选的方案中,该接收单元701接收目标消息,可以具体为:接收该第一节点通过n个槽异步发送的n条目标消息,该n个槽中每个槽每次以一条目标消息为单位进行发送,包含的日志的生成时间越早的目标消息越早被发送;任意两个发送时间相邻的目标消息中,后一个被发送的目标消息是在前一个被发送的目标消息被该节点接收到之后才开始被发送的,且该后一个被发送的目标消息中的任意一个日志的生成时间比该前一个被发送的目标消息中的任意一个日志的生成时间晚,m和n均为大于或等于2的整数。可以理解的是,采用多个槽异步发送目标消息时,当一个槽发送完目标消息但还在等节点反馈该目标消息的处理结果时,另一个槽就可以开始发送其他的目标消息,而不是像现有技术那样等节点反馈完结果再继续发送其他的目标消息;因此,本发明实施例充分地利用了等待节点反馈结果的时间,缩短了发送目标消息的时间跨度,从而提高了发送效率。

在又一种可选的方案中,该第一节点为计算节点集群中新产生的具有写操作和读操作能力的计算主节点。需要说明的是,新产生的具有写操作和读操作能力的计算主节点通常不知道上一次产生的计算主节点是否发送的日志,因此不知道节点已接收的日志的lsn,这种情况下,该最新产生的计算主节点向节点发送第一写操作请求,就可以触发节点与存储从节点对已接收到的日志达成一致并反馈给该最新的计算主节点,从而使得最新的计算主节点知道节点已接收的日志的lsn,后续该最新的计算主节点向该节点发送日志就不会出现不同的日志有同样的lsn的情况,避免了日志混乱。

需要说明的是,各个单元的实现还可以对应参照图3所示的方法实施例的相应描述。其中,图7所示实施例中的节点可以为图3所示方法实施例中的存储主节点。

在图7所描述的节点70中,第一节点在初始化时向节点发送第一写操作请求,然后该节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

本发明实施例还提供一种芯片系统,该芯片系统包括至少一个处理器,存储器和接口电路,该存储器、该收发器和该至少一个处理器通过线路互联,该至少一个存储器中存储有程序指令;该程序指令被该处理器执行时,图3所示的方法流程得以实现。

本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有程序指令,当该程序指令在处理器上运行时,图3所示的方法流程得以实现。

本发明实施例还提供一种计算机程序产品,当该计算机程序产品在处理器上运行时,图3所示的方法流程得以实现。

通过实施本发明实施例,第一节点在初始化时向存储主节点发送第一写操作请求,然后该存储主节点与存储从节点对已接收的日志达成一致后对第一写操作达成一致,这样该存储主节点后续向该第一节点反馈已提交的日志时,就不会漏掉部分已接收的日志,从而使得该第一节点与该存储主节点记录的lsn保持一致,避免了因lsn不一致而导致的日志混乱的问题。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:rom或随机存储记忆体ram、磁碟或者光盘等各种可存储程序代码的介质。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1