CN110162511B - 一种日志传输方法及相关设备 - Google Patents
一种日志传输方法及相关设备 Download PDFInfo
- Publication number
- CN110162511B CN110162511B CN201810131681.3A CN201810131681A CN110162511B CN 110162511 B CN110162511 B CN 110162511B CN 201810131681 A CN201810131681 A CN 201810131681A CN 110162511 B CN110162511 B CN 110162511B
- Authority
- CN
- China
- Prior art keywords
- log
- node
- logs
- sliding window
- previous
- 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
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/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1867—Arrangements specially adapted for the transmitter end
- H04L1/187—Details of sliding window management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/30—Decision processes by autonomous network management units using voting and bidding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种日志传输方法及相关设备,包括:第一节点确定多条日志中每条日志的任期值和日志标识;向所述第二节点发送所述多条日志,所述每条日志携带有自身的所述任期值和所述日志标识,所述任期值用于所述第二节点确定所述每条日志所属的主节点,所述日志标识用于所述第二节点确定所述每条日志在所述多条日志中的顺序位置。采用本申请实施例,降低额外开销,使得一致性数据传输的吞吐率大量提升。避免第一节点必须等待收到上一条日志的回复之后才会发送下一条日志,减小网络传输延迟。
Description
技术领域
本申请涉及大数据领域,尤其涉及一种日志传输方法及相关设备。
背景技术
在分布式场景下,应用往往依赖于一致性协议来保证数据的安全性和可靠性。广义上来说,一致性协议也是一种网络传输协议,通过接收端多个备份之间的协同复制来提高数据的安全性和可靠性。协同复制机制带来的额外开销(Consensus Overhead)使得一致性协议无法像其他网络协议(如TCP网络),充分利用物理资源带宽(如网络、磁盘等),达到较高的吞吐率。在分布式数据库的场景下,一致性协议已经逐渐成为系统的瓶颈所在。
受限于单个一致性协议集群的扩展性问题,分布式数据库通过多分区的方式来实现整个系统的可扩展性。由于分布式数据库跨地域的特点,物理服务器之间的距离相对较远,导致服务器之间的网络传输延迟较大,而一致性协议本身受限于网络传输延迟,因此整个数据库的性能由于网络传输延迟的增大,呈直线下降趋势。Paxos协议族针对上述问题,利用Paxos算法本身所具有的天然并发性(每个提案对应于一个实例,两个提案之间相互独立),对Paxos算法进行异步化、并行化的改造,在允许日志空洞存在的前提下,实现跨地域分布式数据库性能的大幅提升。Raft协议族本身来源于Paxos,通过对一致性协议行为的明确划分定义,以及一些额外约束(如强Leader,日志连续),使得一致性算法更容易实现。但是,在Raft算法中,主节点(Leader)和从节点(Follower)之间需要经过多次网络传输交互,Leader和Follow之间遵循严格的顺序性和串行性,Leader必须在收到上一条日志的回复之后,才会发送下一条日志,导致网络传输延迟较大、增加额外开销。
发明内容
本申请实施例提供一种日志传输方法及相关设备,降低网络传输延迟,减少了额外开销。
第一方面,本申请实施例提供了一种日志传输方法,包括:
第一节点确定多条日志中每条日志的任期值和日志标识;然后向第二节点发送多条日志,每条日志携带有自身的任期值和日志标识,任期值用于第二节点确定每条日志所属的主节点,日志标识用于第二节点确定每条日志在多条日志中的顺序位置,实现对日志进行重排序,从而降低额外开销,使得一致性数据传输的吞吐率大量提升。避免第一节点必须等待收到上一条日志的回复之后才会发送下一条日志,减小网络传输延迟。
在一种可能的设计中,每条日志携带有前一条日志的任期值和日志标识,前一条日志的任期值和日志标识用于第二节点验证前一条日志的正确性。
在另一种可能的设计中,第一节点可以采用无阻塞的方式按照顺序或乱序向第二节点发送滑动窗口内的每条日志。
在另一种可能的设计中,第二节点接收到每条日志之后,首先验证每条日志的正确性,然后向第一节点返回响应消息。当响应消息为验证成功消息时,该响应消息携带有验证成功的日志的日志标识,如果该验证成功的日志之前的所有日志都已经验证成功,第一节点可以将滑动窗口向前移动到该验证成功的日志之后。其中,滑动窗口向前移动后,该验证成功的日志移出到滑动窗口外,滑动窗口外的日志进入到滑动窗口内,进入待发送状态。
在另一种可能的设计中,当响应消息为验证失败消息时,该响应消息携带有验证失败的日志的日志标识,第一节点可以将滑动窗口停止在该验证失败的日志之前,并向第二节点重新发送滑动窗口内的每条日志。
在另一种可能的设计中,如果某条日志在传输过程中丢包,则第二节点无法向第一节点返回响应消息,第一节点不能接收到响应消息,当检测到滑动窗口停止移动的时长超过预设阈值时,第一节点可以确定滑动窗口内的日志发送失败,可以重新向第二节点发送滑动窗口内的所有日志。
在另一种可能的设计中,第一节点无论接收到第二节点返回的响应消息还是未接收到第二节点返回的响应消息,都可以连续不断的按照顺序或乱序向第二节点发送滑动窗口内的每条日志,避免必须等待收到上一条日志的回复之后才会发送下一条日志,从而减小网络传输延迟。
第二方面,本申请实施例提供了一种日志传输方法,包括:
第二节点接收第一节点发送的多条日志,多条日志中每条日志携带有自身的任期值和日志标识;然后根据任期值确定每条日志所属的主节点、以及根据日志标识确定每条日志在多条日志中的顺序位置。实现对日志进行重排序,从而降低额外开销,使得一致性数据传输的吞吐率大量提升。避免第一节点必须等待收到上一条日志的回复之后才会发送下一条日志,减小网络传输延迟。
在一种可能的设计中,每条日志可以携带有前一条日志的任期值和日志标识,第二节点可以根据每条日志携带有前一条日志的任期值和日志标识和前一条日志自身所携带的任期值和日志标识验证前一条日志的正确性。
在另一种可能的设计中,第二节点确定每条日志携带的前一条日志的日志标识与前一条日志自身所携带的日志标识是否相同、且每条日志携带的前一条日志的任期值与前一条日志自身所携带的任期值是否相同;当每条日志携带的前一条日志的日志标识与前一条日志自身所携带的日志标识相同、且每条日志携带的前一条日志的任期值与前一条日志自身所携带的任期值相同时,第二节点验证前一条日志正确。
在另一种可能的设计中,当每条日志携带的前一条日志的日志标识与前一条日志自身所携带的日志标识不相同、或每条日志携带的前一条日志的任期值与前一条日志自身所携带的任期值不相同时,验证前一条日志失败。
在另一种可能的设计中,第二节点对每条日志验证之后,如果验证成功,可以向第一节点发送响应消息,响应消息包括多条日志中验证成功的日志的日志标识,该验证成功的日志的日志标识用于指示第一节点向前移动滑动窗口。
在另一种可能的设计中,如果验证失败,可以向第一节点发送响应消息,响应消息包括多条日志中验证失败的日志的日志标识,该验证失败的日志的日志标识用于指示第一节点停止移动滑动窗口并向第二节点重新发送滑动窗口内的每条日志。
在另一种可能的设计中,由于第一节点可能按照乱序向第二节点发送日志,因此第二节点接收到某条日志时在该日志前后可能存在空洞。如果第二节点接收到某条日志之后,对日志存储模块进行扫描,确定该日志前后存在空洞,则延期对日志进行验证,直到该日志前后的日志补齐之后,再进行验证。
在另一种可能的设计中,当第一节点向第二节点发送多条日志时发生故障,第二节点接收其他节点发送的选举请求,选举请求包括其他节点接收到的最后一个日志的任期值和日志标识。第二节点接收到其他节点发送的选举请求之后,可以根据其他节点接收到的最后一个日志的任期值和日志标识、以及第二节点接收到的最后一个日志的任期值和日志标识,确定重新选举后的主节点。
在另一种可能的设计中,第二节点可以向其他节点发送选举请求,该选举请求包括第二节点接收到的最后一个日志的任期值和日志标识。
在另一种可能的设计中,当其他节点接收到的最后一个日志的任期值以及第二节点接收到的最后一个日志的任期值不相同时,第二节点将其他节点接收到的最后一个日志的任期值和第二节点接收到的最后一个日志的任期值的中最高的一个任期值对应的节点作为重新选举后的主节点;当其他节点接收到的最后一个日志的任期值以及第二节点接收到的最后一个日志的任期值均相同时,第二节点将其他节点接收到的最后一个日志的日志标识和第二节点接收到的最后一个日志的日志标识中最高的一个日志标识对应的节点作为重新选举后的主节点。
在另一种可能的设计中,由于第一节点可能乱序同步日志,因此第二节点和其他节点接收到的日志可能存在空洞。如果第二节点被选举为主节点,第二节点可以从其他节点获取空洞位置处的日志进行补齐,如果其他节点也不存在空洞处的日志,则可以丢弃空洞位置之后的所有日志。
在另一种可能的设计中,第二节点可以向其他节点发送其他节点的空洞位置处的日志,补充其他节点的空洞。
第三方面,本申请实施例提供了一种第一节点,该第一节点被配置为实现上述第一方面中第一节点所执行的方法和功能,由硬件/软件实现,其硬件/软件包括与上述功能相应的模块。
第四方面,本申请实施例提供了一种第二节点,该第二节点被配置为实现上述第二方面中第二节点所执行的方法和功能,由硬件/软件实现,其硬件/软件包括与上述功能相应的模块。
第五方面,本申请实施例提供了另一种第一节点,包括:处理器、存储器和通信总线,其中,通信总线用于实现处理器和存储器之间连接通信,处理器执行存储器中存储的程序用于实现上述第一方面提供的一种日志传输方法中的步骤。
在一个可能的设计中,本申请实施例提供的第一节点可以包含用于执行上述方法设计中第一节点行为相对应的模块。模块可以是软件和/或是硬件。
第六方面,本申请提供了另一种第二节点,包括:处理器、存储器和通信总线,其中,通信总线用于实现处理器和存储器之间连接通信,处理器执行存储器中存储的程序用于实现上述第二方面提供的一种日志传输方法中的步骤。
在一个可能的设计中,本申请实施例提供的第二节点可以包含用于执行上述方法设计中第二节点行为相对应的模块。模块可以是软件和/或是硬件。
第七方面,本申请提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面的方法。
第八方面,本申请提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面的方法。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1是本申请实施例提供的一种分布式数据库的架构图;
图2是本申请实施例提供的一种日志传输系统的结构示意图;
图3是本申请实施例提供的一种Raft协议的写操作流程示意图;
图4是本申请实施例提供的一种日志传输方法的流程示意图;
图5是本申请实施例提供的一种丢包重传的示意图;
图6是本申请实施例提供的一种连续发送场景的示意图;
图7是本申请实施例提供的一种乱序发送场景的示意图;
图8是本申请实施例提供一种重新选举后的日志同步的示意图;
图9是本申请实施例提供的一种第一节点的结构示意图;
图10是本申请实施例提供的一种第二节点的结构示意图;
图11是本申请实施例提出的另一种第一节点的结构示意图;
图12是本申请实施例提出的另一种第二节点的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。
请参见图1,图1是本申请实施例提供的一种分布式数据库的架构图,该分布式数据库包括客户端(client)和多个节点(Node),每个节点上可以保存有多个分区实例(Region),不同节点之间标号相同的Region组成一个分区,分区实例就是一个一致性协议的实例,因此一个分区就对应一个一致性协议集群(Raft group)。其中,多个节点中每一个节点都可能成为主节点(Leader)、从节点(Follower)或候选节点(Candidate)。其中每个节点可以为服务器。
如图2所示,图2是本申请实施例提供的一种日志传输系统的结构示意图,该日志传输系统可以包括主节点(Leader)和从节点(Follower),主节点和从节点可以包含在分布式集群管理框架、分布式数据库中,并在服务器硬件上部署程序代码。本申请实施例中程序代码存在于平台软件的运行时服务器进程中,包括:选举模块、日志存储模块、日志同步模块、日志校验模块以及日志持久化模块等等。其中,选举模块用于根据日志存储模块中的日志选出主节点;日志存储模块是日志的内存形式;日志同步模块用于主节点和从节点之间的日志同步并实现数据流控制;日志校验模块用于校验日志的正确性并对日志进行重排序;日志持久化模块用于将经过校验的顺序日志持久化到磁盘中。在每个节点上,这些模块并不会同时工作,模块的运行取决于节点的角色(Leader或Follower),并且,每个节点有可能进行角色切换。
本申请实施例中Raft协议通过以下约束来保证强一致性:第一,选举安全性:在某个特定任期(term)的周期内,只有一个节点可以被选举为主节点。第二,主节点日志追加特性:主节点不删除或者覆盖已经存在的日志,新的日志通过追加的形式保存在原日志之后。第三,日志匹配原则:如果两份日志都包含了某条相同日志标识(index)和相同任期值,则在这两份日志之前的所有日志都是相同的。第四,主节点日志完备性原则:如果某条日志在一个特定的任期已经被完成,那么该条日志将出现在之后所有更高任期的主节点的日志中。第五,状态机安全性原则:如果一个节点在状态机中存在执行了某个特定日志标识的记录,任何节点在该日志标识上不存在执行其他操作的记录。
如图3所示,图3是本申请实施例提供的一种Raft协议的写操作流程示意图。包括:S301,客户端(client)向Leader发送写请求。S302,Leader接收到写请求之后,将日志写入本地磁盘进行持久化处理,并向Follower1和Follower2写入日志。S303,Follower1和Follower2将日志写入本地磁盘进行持久化处理。S304,Follower1和Follower2完成日志持久化处理之后,向Leader发送确认消息。S305,Leader接收到大多数节点的确认消息之后,将该日志标记为已提交(committed)状态,写入本地数据库。S306,Leader向Follower1和Follower2发送已提交状态,同时可以进行下一条日志的同步,从而实现两次写请求之间的管道存储(pipeline)。S307,在所有日志写入本地数据库之后,向客户端发送回复消息。
在上述整个过程中包括多个网络传输延迟:客户端向Leader发送写请求的网络传输延迟,Leader向Follower1和Follower2同步日志的网络传输延迟,Follower1和Follower2向Leader发送确认消息的网络传输延迟,Leader向客户端发送回复消息的网络传输延迟。另外,还包括日志写入磁盘的延迟和日志写入数据库的延迟。第一次处理日志的总延迟=4次网络传输延迟+1次磁盘延迟+1次数据库延迟。虽然Leader在完成第一次写请求之后,在发送完成消息的同时,可以附带上第二次写请求,从而实现两次请求之间的pipeline,但是第二次处理日志的总延迟仍然包括2次网络传输延迟和1次磁盘延迟。
综上所述,Leader和Follower之间遵循严格的顺序性和串行性,Leader必须在收到上一条日志的回复之后,才会发送下一条日志。这个过程包含多次的网络传输交互,存在多个网络传输延迟,并且协同复制机制带来的额外开销使得一致性数据传输的吞吐率较低。虽然第二次写处理日志的延迟为两次网络传输延迟加上一次磁盘延迟,由于数据库的吞吐率受限于网络传输延迟,当节点之间的距离较远时,网络传输延迟仍然较大,导致数据库的性能不高。为了解决上述技术问题,本申请实施例提供了如下解决方案。
请参见图4,图4是本申请实施例提供的一种日志传输方法的流程示意图,该方法包括但不限于如下步骤:
S401,客户端向第一节点发送写请求。
具体实现中,在任期(term)更替时,多个节点之间进行重新选举,从多个节点中选举出一个新的节点作为主节点。如果在某个任期内,多个节点选举出第一节点作为主节点(Leader),此时有写日志的要求,则客户端(Client)向第一节点发送写请求,并向第一节点提交多条日志。此时,第一节点接收到的多条日志处于未提交状态。
S402,第一节点接收到写请求之后,确定多条日志中每条日志的任期值和日志标识,将多条日志写入磁盘进行本地持久化。
具体实现中,第一节点接收到客户端提交的多条日志之后,可以首先确定第一节点当前所属的任期,每个任期对应一个任期值。其中,任期值随着主节点的不断更替逐渐递增,每个任期内存在一个相应的主节点。然后可以针对多条日志中每条日志赋值一个该任期值,表示该多条日志属于第一节点。并且针对多条日志中的每条日志配置一个日志标识,表示每条日志在多条日志中顺序位置。其中,日志标识可以为依次递增的序列号。最后将多条日志写入本地磁盘进行本地持久化。
S403,第一节点向第二节点发送多条日志,所述每条日志携带有自身的所述任期值和所述日志标识,第二节点可以为从节点(Follower)。
具体实现中,第一节点可以采用无阻塞的按照顺序或乱序向第二节点发送滑动窗口内的每条日志。其中,滑动创窗口用于控制日志数量,滑动窗口包括多个位置,每条日志占据一个位置,滑动窗口可以向前移动,也可以向后移动。
另外,每条日志携带有前一条日志的所述任期值和所述日志标识,所述前一条日志的所述任期值和所述日志标识用于所述第二节点验证所述前一条日志的正确性。第二节点接收到每条日志之后,首先验证每条日志的正确性,然后向第一节点返回响应消息。当响应消息为验证成功消息时,该响应消息携带有验证成功的日志的日志标识,如果该验证成功的日志之前的所有日志都已经验证成功,第一节点可以将滑动窗口向前移动到该验证成功的日志之后。其中,滑动窗口向前移动后,该验证成功的日志移出到滑动窗口外,滑动窗口外的日志进入到滑动窗口内,进入待发送状态。当响应消息为验证失败消息时,该响应消息携带有验证失败的日志的日志标识,第一节点可以将滑动窗口停止在该验证失败的日志之前,并向第二节点重新发送滑动窗口内的每条日志。
需要说明的是,第一节点无论接收到第二节点返回的响应消息还是未接收到第二节点返回的响应消息,都可以连续不断的按照顺序或乱序向第二节点发送滑动窗口内的每条日志,避免必须等待收到上一条日志的回复之后才会发送下一条日志,从而减小网络传输延迟。
可选的,当每条日志传输成功时,第二节点向第一节点返回响应消息(如ACK消息),第一节点接收到响应消息之后将滑动窗口向前移动一个位置,如果某条日志在传输过程中丢包,则第二节点无法向第一节点返回响应消息,第一节点不能接收到响应消息,因此停止移动滑动窗口。当检测到滑动窗口停止移动的时长超过预设阈值时,第一节点可以确定滑动窗口内的日志发送失败,重新向第二节点发送滑动窗口内的所有日志。其中,预设阈值可以通过统计滑动窗口的滑动速度自适应得出。
例如,如图5所示,图5是本申请实施例提供的一种丢包重传的示意图。Leader正在向Follower发送滑动窗口内的日志15、日志16以及日志17,但是日志15在网络传输过程中产生丢包,Follower虽然可以接收到日志16和日志17,但是位置15处的空洞无法填补,因此Follower无法向Leader发送针对日志15的ACK消息,导致Leader无法接收到针对日志15的ACK消息,滑动窗口停留在位置日志15之前。当滑动窗口停止移动的时长超过预设阈值时,Leader可以获知日志15发送失败,可以向Follower重新发送日志15、日志16以及日志17。
S404,所述第二节点根据所述任期值确定所述每条日志所属的主节点、以及根据所述日志标识确定所述每条日志在所述多条日志中的顺序位置。
具体实现中,由于不同主节点可能发送相同日志标识的日志,因此第二节点接收到每条日志之后,首先根据所述任期值确定所述每条日志所属的主节点,将属于同一主节点的日志存放在一起,然后根据日志标识确定所述每条日志在所述多条日志中的顺序位置,按照该顺序位置对多条日志重新排序成为连续日志,从而使得多条日志恢复到发送前的排列顺序。最后验证完成每条日志的正确性后,将每条日志写入本地磁盘进行本地持久化。
但是,由于第一节点可能按照乱序向第二节点发送日志,因此第二节点接收到某条日志时在该日志前后可能存在空洞。如果第二节点接收到某条日志之后,对日志存储模块进行扫描,确定该日志前后存在空洞,则延期验证日志的正确性,直到该日志前后的日志补齐之后,再进行验证。如果验证失败,第二节点可以首先确定验证失败的日志,并丢弃该验证失败的日志之后的所有日志,然后向第一节点发送响应消息,该响应消息可以携带验证失败的日志的日志标识,等待第一节点重新发送验证失败的日志以及验证失败的日志之后的所有日志。以下具体说明如何对日志进行验证。
其中,每条日志可以携带有前一条日志的所述任期值和所述日志标识,第二节点可以根据每条日志携带有前一条日志的所述任期值和所述日志标识和前一条日志自身所携带的所述任期值和所述日志标识验证所述前一条日志的正确性。进一步的,可以确定所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识是否相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值是否相同;当所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值相同时,所述第二节点验证所述前一条日志正确,验证成功。当所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识不相同、或所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值不相同时,验证所述前一条日志错误,验证失败。
可选的,第二节点对每条日志验证之后,如果验证成功,可以向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证成功的日志的所述日志标识,所述验证成功的日志的所述日志标识用于指示所述第一节点向前移动所述滑动窗口。如果验证失败,可以向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识,所述验证失败的日志的所述日志标识用于指示所述第一节点停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
例如,如图6所示,图6是本申请实施例提供的一种连续发送场景的示意图。Leader按照顺序向Follower发送滑动串口内的多条日志(日志15、日志16、日志17、日志18、日志19、日志20、日志21和日志22)。其中,Follower已经接到日志15和日志16并进行保存,网络中正在传输日志17、日志18和日志19,Follower接收到日志17时,可以对日志16(前一条日志)进行校验,确定日志16所携带的自身的任期值和日志标识是否与日志17携带的日志16的任期值和日志标识相同,如果均相同,则验证成功,向Leader发送验证成功消息,其中,该验证成功消息包含日志16的日志标识。Leader接收到验证成功消息之后,可以将滑动窗口向前移动两个位置,移动到日志16的位置之后,日志23进入到滑动窗口内,此时Leader可以向Follower发送日志23。如果验证失败,向Leader发送验证失败消息,该验证成功消息包含日志16的日志标识,Leader接收到验证失败消息之后,滑动窗口停止在日志16的位置之前,并重新向Follower发送日志16。
又如,如图7所示,图7是本申请实施例提供的一种乱序发送场景的示意图。Leader按照乱序向Follower发送滑动串口内的多条日志(日志15、日志16、日志17、日志18、日志19、日志20、日志21和日志22)。其中,Follower已经接到日志15和日志16,网络中正在传输日志18、日志20和日志17。当Follower接收到日志18时,确定日志18前后都存在空洞,因此延迟验证;当Follower接收到日志20时,确定日志20前后仍然存在空洞,因此继续延迟验证;当Follower接收到日志17时,确定日志17前后的日志16和日志18都存在,因此可以根据日志16自身所携带的日志标识和任期值、以及日志17携带的日志16的日志标识和任期值对日志16进行验证,按照相同的方法也对日志17进行验证。验证完成之后,对日志进行扫描,位置19处仍存在空洞,因此无法对日志18进行验证,将日志18之前的连续日志写入本地数据库,进行异步持久化处理。在完成异步持久化处理之后,Follower向Leader发送响应消息,响应消息包括日志17的日志标识,Leader接收到响应消息之后,确定日志17以及之日志17之前的日志都已经传输完成,可以将滑动窗口向前移动三个位置,移动到位置18之前,日志23进入到滑动窗口内,此时Leader可以向Follower发送日志23。
可选的,当第一节点向第二节点发送多条日志时发生故障,因此需要重新选举出下一个任期的主节点。第二节点可以向其他节点发送选举请求,该选举请求包括第二节点接收到的最后一个日志的所述任期值和所述日志标识。第二节点也接收其他节点发送的选举请求,所述选举请求包括所述其他节点接收到的最后一个日志的所述任期值和所述日志标识。第二节点接收到其他节点发送的选举请求之后,可以根据所述其他节点接收到的最后一个日志的所述任期值和所述日志标识、以及所述第二节点接收到的最后一个日志的所述任期值和所述日志标识,确定重新选举后的主节点。当然,其他节点也可以按照此方法进行投票,选举出新的主节点。
进一步的,当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值不相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述任期值和所述第二节点接收到的最后一个日志的所述任期值的中最高的一个任期值对应的节点作为所述重新选举后的主节点;当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值均相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述日志标识和所述第二节点接收到的最后一个日志的所述日志标识中最高的一个日志标识对应的节点作为所述重新选举后的主节点。
进一步可选的,由于第一节点可能乱序同步日志,因此第二节点和其他节点接收到的日志可能存在空洞(Hole)。如果第二节点被选举为主节点,第二节点可以从其他节点获取空洞位置处的日志进行补齐,如果其他节点也不存在空洞处的日志,则可以丢弃空洞位置之后的所有日志。另外,第二节点也可以向其他节点发送其他节点的空洞位置处的日志,补充其他节点的空洞。
例如,如图8所示,图8是本申请实施例提供一种重新选举后的日志同步的示意图。其中,L表示Leader,F1和F2表示Follower。L节点包含日志1到日志8的完整日志。由于L乱序向F1和F2同步日志,FI和F2的日志存在空洞,F1的空洞位置包括5、7和8,F2的空洞位置包括4、6和7。当L发生故障时,需要重新从FI和F2中重新选举出一个节点作为Leader,由于F1接收到的最后一个日志6和F2接收到的最后一个日志8的任期值相同,都属于同一个主节点,因此接下来比较接收到最后一个日志的日志标识。F1接收到的最后一个日志的日志标识为6,F2接收到的最后一个日志的日志标识为8,通过比较选举F2成为Leader。在F2成为Leader之后,F2可以从F1中获取日志4和日志6进行补齐,但是F1和F2都不存在日志7,位置7出的空洞无法补齐,F2丢弃日志8。另外,F2也可以将日志5发送给F1,使得F1对位置5处的空洞进行补齐。
S405,第二节点向第一节点发送响应消息。在S403和S404中已经介绍,此处不再详细描述。
S406,第一节点将多条日志标记为已提交状态,并将多条日志写入本地数据库。
具体实现中,第二节点接收到第一节点每条日志之后,向第一节点返回响应信息,直到日志全部同步到第二节点,第一节点可以将多条日志标记为已提交状态,并将多条日志写入本地数据库。
S407,第一节点向客户端发送回复消息。
可选的,第一节点也可以向第二节点发送已提交消息,第二节点接收到已提交消息之后,将多条日志写入本地数据库。另外,在写入本地数据库之后,第二节点也可以向客户端发送回复消息。
在本申请实施例中,第一节点可以连续不断的向第二节点发送多条日志,第二节点可以根据任期值确定所述每条日志所属的主节点、以及根据日志标识确定所述每条日志在所述多条日志中的顺序位置,实现对日志进行重排序,从而降低额外开销,使得一致性数据传输的吞吐率大量提升。避免第一节点必须等待收到上一条日志的回复之后才会发送下一条日志,减小网络传输延迟。
上述详细阐述了本申请实施例的方法,下面提供了本申请实施例的装置。
请参见图9,图9是本申请实施例提供的一种第一节点的结构示意图,该第一节点可以包括处理模块901、发送模块902和接收模块903,其中,各个模块的详细描述如下。
处理模块901,用于确定多条日志中每条日志的任期值和日志标识;
发送模块902,用于向所述第二节点发送所述多条日志,所述每条日志携带有自身的所述任期值和所述日志标识,所述任期值用于所述第二节点确定所述每条日志所属的主节点,所述日志标识用于所述第二节点确定所述每条日志在所述多条日志中的顺序位置。
其中,所述每条日志携带有前一条日志的所述任期值和所述日志标识,所述前一条日志的所述任期值和所述日志标识用于所述第二节点验证所述前一条日志的正确性。
其中,发送模块902,还用于按照顺序或乱序向所述第二节点发送滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
接收模块903,用于接收所述第二节点发送的响应消息;
处理模块901,还用于当所述响应消息为验证成功消息时,向前移动所述滑动窗口;当所述响应消息为验证失败消息时,停止移动所述滑动窗口,并向所述第二节点重新发送所述滑动窗口内的每条日志。
处理模块901,还用于根据所述验证成功的日志的所述日志标识,向前移动所述滑动窗口。
处理模块901,还用于根据所述验证失败的日志的所述日志标识,停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
发送模块902,还用于当检测到所述滑动窗口停止移动的时长超过预设阈值时,重新发送所述滑动窗口内的所述每条日志。
需要说明的是,各个模块的实现还可以对应参照图4所示的方法实施例的相应描述,执行上述实施例中第一节点所执行的方法和功能。
请参见图10,图10是本申请实施例提供的一种第二节点的结构示意图,该第一节点可以包括接收模块1001、处理模块1002和发送模块1003,其中,各个模块的详细描述如下。
接收模块1001,用于接收第一节点发送的多条日志,所述多条日志中每条日志携带有自身的所述任期值和所述日志标识;
处理模块1002,用于根据所述任期值确定所述每条日志所属的主节点、以及根据所述日志标识确定所述每条日志在所述多条日志中的顺序位置。
其中,接收模块1001,还用于接收所述第一节点按照顺序或乱序发送的滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
其中,发送模块1003,用于向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证成功的日志的所述日志标识,所述验证成功的日志的所述日志标识用于指示所述第一节点向前移动所述滑动窗口。
其中,发送模块1003,用于向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识,所述验证失败的日志的所述日志标识用于指示所述第一节点停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
其中,所述每条日志携带有前一条日志的所述任期值和所述日志标识;
处理模块1002,还用于根据所述前一条日志的所述任期值和所述日志标识,验证所述前一条日志的正确性。
可选的,处理模块1002具体用于:确定所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识是否相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值是否相同;
当所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值相同时,所述第二节点验证所述前一条日志正确。
可选的,接收模块1001,还用于接收其他节点发送的选举请求,所述选举请求包括所述其他节点接收到的最后一个日志的所述任期值和所述日志标识;处理模块1002,还用于根据所述其他节点接收到的最后一个日志的所述任期值和所述日志标识、以及所述第二节点接收到的最后一个日志的所述任期值和所述日志标识,确定重新选举后的主节点。
可选的,处理模块1002具体用于:当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值不相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述任期值和所述第二节点接收到的最后一个日志的所述任期值的中最高的一个任期值对应的节点作为所述重新选举后的主节点;或当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值均相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述日志标识和所述第二节点接收到的最后一个日志的所述日志标识中最高的一个日志标识对应的节点作为所述重新选举后的主节点。
可选的,接收模块1001,还用于当所述第二节点作为所述重新选举后的主节点时,从所述其他节点获取空洞位置处的日志进行补齐。
需要说明的是,各个模块的实现还可以对应参照图4所示的方法实施例的相应描述,执行上述实施例中第二节点所执行的方法和功能。
请继续参考图11,图11是本申请实施例提出的另一种第一节点的结构示意图。如图所示,该第一节点可以包括:至少一个处理器1101,至少一个通信接口1102,至少一个存储器1103和至少一个通信总线1104。
其中,处理器1101可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。通信总线1104可以是外设部件互连标准PCI总线或扩展工业标准结构EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信总线1104用于实现这些组件之间的连接通信。其中,本申请实施例中设备的通信接口1102用于与其他节点设备进行信令或数据的通信。存储器1103可以包括易失性存储器,例如非挥发性动态随机存取内存(Nonvolatile Random Access Memory,NVRAM)、相变化随机存取内存(Phase Change RAM,PRAM)、磁阻式随机存取内存(Magetoresistive RAM,MRAM)等,还可以包括非易失性存储器,例如至少一个磁盘存储器件、电子可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、闪存器件,例如反或闪存(NOR flash memory)或是反及闪存(NAND flash memory)、半导体器件,例如固态硬盘(Solid State Disk,SSD)等。存储器1103可选的还可以是至少一个位于远离前述处理器1101的存储装置。存储器1103中存储一组程序代码,且处理器1101执行存储器1103中上述第一节点所执行的程序。
确定多条日志中每条日志的任期值和日志标识;
通过通信接口1102向所述第二节点发送所述多条日志,所述每条日志携带有自身的所述任期值和所述日志标识,所述任期值用于所述第二节点确定所述每条日志所属的主节点,所述日志标识用于所述第二节点确定所述每条日志在所述多条日志中的顺序位置。
其中,所述每条日志携带有前一条日志的所述任期值和所述日志标识,所述前一条日志的所述任期值和所述日志标识用于所述第二节点验证所述前一条日志的正确性。
可选的,处理器1101还用于执行如下操作:
通过通信接口1102按照顺序或乱序向所述第二节点发送滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
可选的,处理器1101还用于执行如下操作:
通过通信接口1102接收所述第二节点发送的响应消息;
当所述响应消息为验证成功消息时,向前移动所述滑动窗口;当所述响应消息为验证失败消息时,停止移动所述滑动窗口,并向所述第二节点重新发送所述滑动窗口内的每条日志。
可选的,处理器1101还用于执行如下操作:
根据所述验证成功的日志的所述日志标识,向前移动所述滑动窗口。
其中,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识;
可选的,处理器1101还用于执行如下操作:
根据所述验证失败的日志的所述日志标识,停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
可选的,处理器1101还用于执行如下操作:
当检测到所述滑动窗口停止移动的时长超过预设阈值时,重新发送所述滑动窗口内的所述每条日志。
进一步的,处理器还可以与存储器和通信接口相配合,执行上述申请实施例中上述第一节点的操作。
请继续参考图12,图12是本申请实施例提出的另一种第二节点的结构示意图。如图所示,该第二节点可以包括:至少一个处理器1201,至少一个通信接口1202,至少一个存储器1203和至少一个通信总线1204。
其中,处理器1201可以是前文提及的各种类型的处理器。通信总线1204可以是外设部件互连标准PCI总线或扩展工业标准结构EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信总线1204用于实现这些组件之间的连接通信。其中,本申请实施例中设备的通信接口1202用于与其他节点设备进行信令或数据的通信。存储器1203可以是前文提及的各种类型的存储器。存储器1203可选的还可以是至少一个位于远离前述处理器1201的存储装置。存储器1203中存储一组程序代码,且处理器1201执行存储器1203中上述第二节点所执行的程序。
通过通信接口1202接收第一节点发送的多条日志,所述多条日志中每条日志携带有自身的所述任期值和所述日志标识;
根据所述任期值确定所述每条日志所属的主节点、以及根据所述日志标识确定所述每条日志在所述多条日志中的顺序位置。
可选的,处理器1201还用于执行如下操作:
通过通信接口1202接收所述第一节点按照顺序或乱序发送的滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
可选的,处理器1201还用于执行如下操作:
通过通信接口1202向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证成功的日志的所述日志标识,所述验证成功的日志的所述日志标识用于指示所述第一节点向前移动所述滑动窗口。
可选的,处理器1201还用于执行如下操作:
通过通信接口1202向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识,所述验证失败的日志的所述日志标识用于指示所述第一节点停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
可选的,处理器1201还用于执行如下操作:
根据所述前一条日志的所述任期值和所述日志标识,验证所述前一条日志的正确性。
可选的,处理器1201还用于执行如下操作:
确定所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识是否相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值是否相同;
当所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值相同时,所述第二节点验证所述前一条日志正确。
可选的,处理器1201还用于执行如下操作:
通过通信接口1202接收其他节点发送的选举请求,所述选举请求包括所述其他节点接收到的最后一个日志的所述任期值和所述日志标识;
根据所述其他节点接收到的最后一个日志的所述任期值和所述日志标识、以及所述第二节点接收到的最后一个日志的所述任期值和所述日志标识,确定重新选举后的主节点。
可选的,处理器1201还用于执行如下操作:
当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值不相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述任期值和所述第二节点接收到的最后一个日志的所述任期值的中最高的一个任期值对应的节点作为所述重新选举后的主节点;或
当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值均相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述日志标识和所述第二节点接收到的最后一个日志的所述日志标识中最高的一个日志标识对应的节点作为所述重新选举后的主节点。
可选的,处理器1201还用于执行如下操作:
当所述第二节点作为所述重新选举后的主节点时,从所述其他节点获取空洞位置处的日志进行补齐。
进一步的,处理器还可以与存储器和通信接口相配合,执行上述申请实施例中上述第二节点的操作。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (35)
1.一种日志传输方法,其特征在于,包括:
第一节点确定多条日志中每条日志的任期值和日志标识;
所述第一节点向第二节点发送所述多条日志,所述每条日志携带有自身的所述任期值和所述日志标识,所述任期值用于所述第二节点确定所述每条日志所属的主节点,所述日志标识用于所述第二节点确定所述每条日志在所述多条日志中的顺序位置,所述顺序位置用于对所述多条日志中属于同一个主节点的日志进行重排序后成为连续日志。
2.如权利要求1所述的方法,其特征在于,所述每条日志携带有前一条日志的所述任期值和所述日志标识,所述前一条日志的所述任期值和所述日志标识用于所述第二节点验证所述前一条日志的正确性。
3.如权利要求1或2所述的方法,其特征在于,所述第一节点向所述第二节点发送所述多条日志包括:
所述第一节点按照顺序或乱序向所述第二节点发送滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
4.如权利要求3所述的方法,其特征在于,所述第一节点向第二节点发送所述多条日志之后,还包括:
所述第一节点接收所述第二节点发送的响应消息;
当所述响应消息为验证成功消息时,所述第一节点向前移动所述滑动窗口;当所述响应消息为验证失败消息时,所述第一节点停止移动所述滑动窗口,并向所述第二节点重新发送所述滑动窗口内的每条日志。
5.如权利要求4所述的方法,其特征在于,所述响应消息包括所述多条日志中验证成功的日志的所述日志标识;
所述第一节点向前移动所述滑动窗口包括:
所述第一节点根据所述验证成功的日志的所述日志标识,向前移动所述滑动窗口。
6.如权利要求4所述的方法,其特征在于,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识;
所述第一节点停止移动所述滑动窗口,并向所述第二节点重新发送所述滑动窗口内的所述多条日志包括:
所述第一节点根据所述验证失败的日志的所述日志标识,停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
7.如权利要求3所述的方法,其特征在于,所述第一节点向第二节点发送所述多条日志之后,还包括:
当检测到所述滑动窗口停止移动的时长超过预设阈值时,所述第一节点重新发送所述滑动窗口内的所述每条日志。
8.一种日志传输方法,其特征在于,包括:
第二节点接收第一节点发送的多条日志,所述多条日志中每条日志携带有自身的任期值和日志标识;
所述第二节点根据所述任期值确定所述每条日志所属的主节点、以及根据所述日志标识确定所述每条日志在所述多条日志中的顺序位置,按照所述顺序位置对所述多条日志中属于同一个主节点的日志进行重排序后成为连续日志。
9.如权利要求8所述的方法,其特征在于,所述第二节点接收第一节点发送的多条日志包括:
所述第二节点接收所述第一节点按照顺序或乱序发送的滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
10.如权利要求9所述的方法,其特征在于,所述第二节点根据所述任期值确定所述每条日志所属的主节点、以及根据所述日志标识确定所述每条日志在所述多条日志中的顺序位置之后,还包括:
所述第二节点向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证成功的日志的所述日志标识,所述验证成功的日志的所述日志标识用于指示所述第一节点向前移动所述滑动窗口。
11.如权利要求9所述的方法,其特征在于,所述第二节点根据所述任期值确定所述每条日志所属的主节点、以及根据所述日志标识确定所述每条日志在所述多条日志中的顺序位置之后,还包括:
所述第二节点向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识,所述验证失败的日志的所述日志标识用于指示所述第一节点停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
12.如权利要求8-11任一项所述的方法,其特征在于,所述每条日志携带有前一条日志的所述任期值和所述日志标识;
所述第二节点接收第一节点发送的多条日志之后,还包括:
所述第二节点根据所述前一条日志的所述任期值和所述日志标识,验证所述前一条日志的正确性。
13.如权利要求12所述的方法,其特征在于,所述第二节点根据所述前一条日志的所述任期值和所述日志标识,验证所述前一条日志的正确性包括:
所述第二节点确定所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识是否相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值是否相同;
当所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值相同时,所述第二节点验证所述前一条日志正确。
14.如权利要求8-11任一项所述的方法,其特征在于,所述方法还包括:
所述第二节点接收其他节点发送的选举请求,所述选举请求包括所述其他节点接收到的最后一个日志的所述任期值和所述日志标识;
所述第二节点根据所述其他节点接收到的最后一个日志的所述任期值和所述日志标识、以及所述第二节点接收到的最后一个日志的所述任期值和所述日志标识,确定重新选举后的主节点。
15.如权利要求14所述的方法,其特征在于,所述第二节点根据所述其他节点接收到的最后一个日志的所述任期值和所述日志标识、以及所述第二节点的接收到的最后一个日志的所述任期值和所述日志标识,确定重新选举后的主节点包括:
当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值不相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述任期值和所述第二节点接收到的最后一个日志的所述任期值的中最高的一个任期值对应的节点作为所述重新选举后的主节点;或
当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值均相同时,所述第二节点将所述其他节点接收到的最后一个日志的所述日志标识和所述第二节点接收到的最后一个日志的所述日志标识中最高的一个日志标识对应的节点作为所述重新选举后的主节点。
16.如权利要求14所述的方法,其特征在于,所述第二节点根据所述其他节点接收到的所述最后一个日志的所述任期值和所述日志标识,确定重新选举后的主节点之后,还包括:
当所述第二节点作为所述重新选举后的主节点时,所述第二节点从所述其他节点获取空洞位置处的日志进行补齐。
17.一种第一节点,其特征在于,包括:
处理模块,用于确定多条日志中每条日志的任期值和日志标识;
发送模块,用于向第二节点发送所述多条日志,所述每条日志携带有自身的所述任期值和所述日志标识,所述任期值用于所述第二节点确定所述每条日志所属的主节点,所述日志标识用于所述第二节点确定所述每条日志在所述多条日志中的顺序位置,所述顺序位置用于对所述多条日志中属于同一个主节点的日志进行重排序后成为连续日志。
18.如权利要求17所述的第一节点,其特征在于,所述每条日志携带有前一条日志的所述任期值和所述日志标识,所述前一条日志的所述任期值和所述日志标识用于所述第二节点验证所述前一条日志的正确性。
19.如权利要求17或18所述的第一节点,其特征在于,
所述发送模块,还用于按照顺序或乱序向所述第二节点发送滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
20.如权利要求19所述的第一节点,其特征在于,所述第一节点还包括:
接收模块,用于接收所述第二节点发送的响应消息;
所述处理模块,还用于当所述响应消息为验证成功消息时,向前移动所述滑动窗口;当所述响应消息为验证失败消息时,停止移动所述滑动窗口,并向所述第二节点重新发送所述滑动窗口内的每条日志。
21.如权利要求20所述的第一节点,其特征在于,所述响应消息包括所述多条日志中验证成功的日志的所述日志标识;
所述处理模块,还用于根据所述验证成功的日志的所述日志标识,向前移动所述滑动窗口。
22.如权利要求20所述的第一节点,其特征在于,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识;
所述处理模块,还用于根据所述验证失败的日志的所述日志标识,停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
23.如权利要求19所述的第一节点,其特征在于,
所述发送模块,还用于当检测到所述滑动窗口停止移动的时长超过预设阈值时,重新发送所述滑动窗口内的所述每条日志。
24.一种第二节点,其特征在于,包括:
接收模块,用于接收第一节点发送的多条日志,所述多条日志中每条日志携带有自身的任期值和日志标识;
处理模块,用于根据所述任期值确定所述每条日志所属的主节点、以及根据所述日志标识确定所述每条日志在所述多条日志中的顺序位置,按照所述顺序位置对所述多条日志中属于同一个主节点的日志进行重排序后成为连续日志。
25.如权利要求24所述的第二节点,其特征在于,
所述接收模块,还用于接收所述第一节点按照顺序或乱序发送的滑动窗口内的所述每条日志,所述滑动窗口用于控制日志数量。
26.如权利要求25所述的第二节点,其特征在于,所述第二节点还包括:
发送模块,用于向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证成功的日志的所述日志标识,所述验证成功的日志的所述日志标识用于指示所述第一节点向前移动所述滑动窗口。
27.如权利要求25所述的第二节点,其特征在于,所述第二节点还包括:
发送模块,用于向所述第一节点发送响应消息,所述响应消息包括所述多条日志中验证失败的日志的所述日志标识,所述验证失败的日志的所述日志标识用于指示所述第一节点停止移动所述滑动窗口并向所述第二节点重新发送所述滑动窗口内的所述每条日志。
28.如权利要求24-27任一项所述的第二节点,其特征在于,所述每条日志携带有前一条日志的所述任期值和所述日志标识;
处理模块,还用于根据所述前一条日志的所述任期值和所述日志标识,验证所述前一条日志的正确性。
29.如权利要求28所述的第二节点,其特征在于,所述处理具体用于:
确定所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识是否相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值是否相同;
当所述每条日志携带的前一条日志的所述日志标识与所述前一条日志自身所携带的所述日志标识相同、且所述每条日志携带的前一条日志的所述任期值与所述前一条日志自身所携带的所述任期值相同时,所述第二节点验证所述前一条日志正确。
30.如权利要求24-27任一项所述的第二节点,其特征在于,
所述接收模块,还用于接收其他节点发送的选举请求,所述选举请求包括所述其他节点接收到的最后一个日志的所述任期值和所述日志标识;
所述处理模块,还用于根据所述其他节点接收到的最后一个日志的所述任期值和所述日志标识、以及所述第二节点接收到的最后一个日志的所述任期值和所述日志标识,确定重新选举后的主节点。
31.如权利要求30所述的第二节点,其特征在于,所述处理模块具体用于:
当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值不相同时,将所述其他节点接收到的最后一个日志的所述任期值和所述第二节点接收到的最后一个日志的所述任期值的中最高的一个任期值对应的节点作为所述重新选举后的主节点;或
当所述其他节点接收到的最后一个日志的所述任期值以及所述第二节点接收到的最后一个日志的所述任期值均相同时,将所述其他节点接收到的最后一个日志的所述日志标识和所述第二节点接收到的最后一个日志的所述日志标识中最高的一个日志标识对应的节点作为所述重新选举后的主节点。
32.如权利要求30所述的第二节点,其特征在于,
所述接收模块,还用于当所述第二节点作为所述重新选举后的主节点时,从所述其他节点获取空洞位置处的日志进行补齐。
33.一种第一节点,其特征在于,包括:存储器、通信总线以及处理器,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,执行以下操作如权利要求1-7任一项所述的方法。
34.一种第二节点,其特征在于,包括:存储器、通信总线以及处理器,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,执行以下操作如权利要求8-16任一项所述的方法。
35.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行权利要求1-16任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810131681.3A CN110162511B (zh) | 2018-02-08 | 2018-02-08 | 一种日志传输方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810131681.3A CN110162511B (zh) | 2018-02-08 | 2018-02-08 | 一种日志传输方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110162511A CN110162511A (zh) | 2019-08-23 |
CN110162511B true CN110162511B (zh) | 2023-09-01 |
Family
ID=67641398
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810131681.3A Active CN110162511B (zh) | 2018-02-08 | 2018-02-08 | 一种日志传输方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110162511B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240899B (zh) * | 2020-01-10 | 2023-07-25 | 北京百度网讯科技有限公司 | 状态机复制方法、装置、系统及存储介质 |
CN113837758A (zh) * | 2021-09-27 | 2021-12-24 | 深圳前海微众银行股份有限公司 | 一种区块链系统的共识方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105511987A (zh) * | 2015-12-08 | 2016-04-20 | 上海爱数信息技术股份有限公司 | 一种强一致性且高可用的分布式任务管理系统 |
CN105512266A (zh) * | 2015-12-03 | 2016-04-20 | 曙光信息产业(北京)有限公司 | 一种实现分布式数据库操作一致性的方法及装置 |
CN107105032A (zh) * | 2017-04-20 | 2017-08-29 | 腾讯科技(深圳)有限公司 | 节点设备运行方法及节点设备 |
CN107547593A (zh) * | 2016-06-27 | 2018-01-05 | 华为技术有限公司 | 一种实现日志同步的方法、装置及分布式系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10614098B2 (en) * | 2010-12-23 | 2020-04-07 | Mongodb, Inc. | System and method for determining consensus within a distributed database |
-
2018
- 2018-02-08 CN CN201810131681.3A patent/CN110162511B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105512266A (zh) * | 2015-12-03 | 2016-04-20 | 曙光信息产业(北京)有限公司 | 一种实现分布式数据库操作一致性的方法及装置 |
CN105511987A (zh) * | 2015-12-08 | 2016-04-20 | 上海爱数信息技术股份有限公司 | 一种强一致性且高可用的分布式任务管理系统 |
CN107547593A (zh) * | 2016-06-27 | 2018-01-05 | 华为技术有限公司 | 一种实现日志同步的方法、装置及分布式系统 |
CN107105032A (zh) * | 2017-04-20 | 2017-08-29 | 腾讯科技(深圳)有限公司 | 节点设备运行方法及节点设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110162511A (zh) | 2019-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103297268B (zh) | 基于p2p技术的分布式数据一致性维护系统和方法 | |
US8379645B2 (en) | Link data transmission method, node and system | |
US6545981B1 (en) | System and method for implementing error detection and recovery in a system area network | |
CA2205725C (en) | Preventing conflicts in distributed systems | |
US8055711B2 (en) | Non-blocking commit protocol systems and methods | |
US7865763B2 (en) | Data replication method | |
CN111078607B (zh) | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 | |
US20190287082A1 (en) | Method for processing transactions using blockchain networks, and transaction management server using the same | |
CN106254238B (zh) | 一种数据传输方法、集中控制器和通信装置 | |
US20180219946A1 (en) | Leaderless consistency protocol | |
DE112011102415T5 (de) | Registerzugriff in einer verteilten virtuellen Brückenumgebung | |
US20200045134A1 (en) | Ordinary write in distributed system maintaining data storage integrity | |
CN106484321A (zh) | 一种数据存储方法及数据中心 | |
US20210072903A1 (en) | Future write in distributed system maintaining data storage integrity | |
WO2021147793A1 (zh) | 数据处理方法、装置、系统、电子设备及计算机存储介质 | |
CN110162511B (zh) | 一种日志传输方法及相关设备 | |
CN113064764A (zh) | 在区块链系统中执行区块的方法及装置 | |
CN108512753B (zh) | 一种集群文件系统中消息传输的方法及装置 | |
US11030220B2 (en) | Global table management operations for multi-region replicated tables | |
CN104317716A (zh) | 分布式节点间的数据传输方法及分布式节点设备 | |
JP2018014049A (ja) | 情報処理システム、情報処理装置、情報処理方法及びプログラム | |
CN104038327A (zh) | Fc网络的出错重传方法 | |
CN107967265B (zh) | 文件的访问方法、数据服务器和文件访问系统 | |
CN113645008B (zh) | 一种基于链表的报文协议超时重发方法及系统 | |
CN115065694A (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 |