一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种分布式数据库系统及其成员变更的同步方法、装置与流程

2023-02-04 12:12:19 来源:中国专利 TAG:


1.本说明书涉及数据库技术领域,尤其涉及一种分布式数据库系统及其成员变更的同步方法、装置。


背景技术:

2.在相关技术中,针对分布式数据库系统的成员变更,主副本节点需要将对应的成员变更信息写入数据日志中,并基于数据日志的同步机制,将数据日志同步至各个从副本节点,从副本节点在得到该数据日志后,需要从中解析出对应的成员变更信息,并更新自身维护的成员列表,最终确保主副本节点和从副本节点各自维护的成员列表保持一致。
3.然而,上述将成员变更信息写入数据日志的方式,一方面,从副本节点在进行成员列表更新时,需要从数据日志中解析出成员变更信息后才能实现成员列表的更新,影响从副本节点成员列表更新的效率;另一方面,当数据日志的写入间隔时长较长时,在间隔内产生的成员变更无法被及时同步至从副本节点,影响主副本节点和从副本节点之间关于成员列表的一致性。此外,当涉及到跨副本组(如第一副本组和第二副本组)的数据同步时,由于第一副本组和第二副本组各自维护独立的成员列表,所以第一副本组的成员变更信息对于第二副本组是无用的,故第二副本组需要从第一副本组发送的数据日志中解析并丢弃第一副本组的成员变更新信息后,才能完成数据同步,操作繁琐且影响数据同步的效率。


技术实现要素:

4.为克服相关技术中存在的问题,本说明书提供了一种分布式数据库系统及其成员变更的同步方法、装置。
5.根据本说明书实施例的第一方面,提供一种分布式数据库系统,包括第一副本组,所述第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和从副本节点维护有用于记录所述第一副本组中成员的成员列表;
6.所述主副本节点用于在接收到成员变更请求的情况下,生成对应的成员变更日志并更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流;以及,将所述成员变更日志同步至所述从副本节点,并基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成;
7.所述从副本节点用于在接收到所述主副本节点发送的成员变更日志后,基于所述成员变更日志更新自身维护的成员列表;以及,在所述成员列表更新完成的情况下,向所述主副本节点发送对应的确认信息。
8.根据本说明书实施例的第二方面,提供一种分布式数据库系统成员变更的同步方法,所述分布式数据库系统包括第一副本组,所述第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于所述主副本节点,所述方法包括:
9.在接收到成员变更请求的情况下,生成对应的成员变更日志并更新自身维护的成
员列表,所述成员变更日志与数据日志归属于不同的日志流;
10.将所述成员变更日志同步至所述从副本节点,并基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
11.根据本说明书实施例的第三方面,提供一种分布式数据库系统成员变更的同步方法,所述分布式数据库系统包括第一副本组,所述第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和所述从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于所述从副本节点,所述方法包括:
12.在接收到所述主副本节点发送的成员变更日志后,基于所述成员变更日志更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流,所述成员变更日志由所述主副本节点在接收到成员变更请求后所生成;
13.在所述成员列表更新完成的情况下,向所述主副本节点发送对应的确认信息,以使所述主副本节点基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
14.根据本说明书实施例的第四方面,提供一种分布式数据库系统成员变更的同步装置,所述分布式数据库系统包括第一副本组,所述第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和所述从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于所述主副本节点,所述装置包括:
15.生成单元,用于在接收到成员变更请求的情况下,生成对应的成员变更日志并更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流;
16.确定单元,用于将所述成员变更日志同步至所述从副本节点,并基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
17.根据本说明书实施例的第五方面,提供一种分布式数据库系统成员变更的同步装置,所述分布式数据库系统包括第一副本组,所述第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和所述从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于所述从副本节点,所述装置包括:
18.更新单元,用于在接收到所述主副本节点发送的成员变更日志后,基于所述成员变更日志更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流,所述成员变更日志由所述主副本节点在接收到成员变更请求后所生成;
19.发送单元,用于在所述成员列表更新完成的情况下,向所述主副本节点发送对应的确认信息,以使所述主副本节点基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
20.根据本说明书实施例的第六方面,提供一种电子设备,包括:
21.处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为实现上述第二方面或第三方面所述方法的步骤。
22.根据本说明书实施例的第七方面,提供一种计算机可读存储介质,其上储存有可执行指令;其中,该指令被处理器执行时,实现上述第二方面或第三方面所述方法的步骤。
23.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
24.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
25.图1是本说明书一示例性实施例提供的一种分布式数据库系统的架构示意图;
26.图2是本说明书一示例性实施例提供的一种分布式数据库系统成员变更的同步方法的流程图;
27.图3是本说明书一示例性实施例提供的一种主副本节点广播成员变更日志的示意图;
28.图4是本说明书一示例性实施例提供的一种从副本节点判断数据日志处理进度的示意图;
29.图5是本说明书一示例性实施例提供的一种第二副本组的示意图;
30.图6是本说明书一示例性实施例提供的一种分布式数据库系统成员变更的同步方法的流程图;
31.图7是本说明书一示例性实施例提供的一种电子设备的示意结构图;
32.图8是本说明书一示例性实施例提供的一种分布式数据库系统成员变更的同步装置的框图;
33.图9是本说明书一示例性实施例提供的一种分布式数据库系统成员变更的同步装置的框图。
具体实施方式
34.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
35.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
36.分布式数据库系统在运行过程中,响应于不同的服务需求,可以对该分布式数据库系统中的节点成员进行变更。例如,当节点出现故障时,则需要将该故障节点替换为正常节点;当该分布式数据库系统需要扩容时,则需要在现有节点的基础上增加一定数量的节点;当该分布式数据库系统因性能冗余需要精简时,则需要在现有节点的基础上删除一定数量的节点。当成员变更完成后,主副本节点会将对应的成员变更信息写入数据日志中,并基于数据日志的同步机制,使得各个从副本节点可以从获取的数据日志中解析出该成员变
更信息,从而更新自身维护的成员列表,最终实现成员列表的一致性。
37.然而,上述将成员变更信息写入数据日志的方式,使得从副本节点无法直接根据数据日志来更新该从副本节点维护的成员列表,而是需要从数据日志中解析出对应的成员变更信息,该额外增加的解析步骤,影响成员列表更新的效率;同时,当数据日志的写入间隔时长较长时,在间隔内产生的成员变更无法被及时同步至从副本节点。例如,5分钟内主副本节点并未产生数据日志的写入操作,但在该5分钟内却发生了多次成员变更,则从副本节点因为无法接收到数据日志,也就无法实现成员列表的更新动作,造成主副本节点和从副本节点维护的成员列表不一致的现象,影响主副本节点和从副本节点之间关于成员列表的一致性。
38.此外,当涉及跨副本组的数据同步时,例如第一副本组和第二副本组,其中第二副本组用于备份第一副本组内维护的副本,而第二副本组的节点成员与第一副本组的节点成员并不相同,故第一副本组发送的数据日志中的成员变更信息对于第二副本组来说是多余的信息,这样在进行数据同步时,使得第二副本组需要从数据日志中解析出第一副本组对应的成员变更信息,并丢弃该成员变更信息,才能完成数据同步操作,使得第二副本组执行数据同步的操作繁琐,数据同步效率较低。
39.因此,为解决上述问题,本说明书提出了一种改进后的分布式数据库系统成员变更的同步方式,下面结合实施例进行详细描述。
40.图1是本说明书一示例性实施例提供的一种分布式数据库系统的架构示意图,该系统架构可以包括第一副本组10,其中第一副本组10包括若干成员,该等成员的角色为主副本节点和从副本节点。以图1为例,该第一副本组10中可以包括若干成员,如节点成员11、节点成员12、节点成员13和节点成员14,具体的,节点成员11的角色可以为主副本节点,节点成员12、节点成员13和节点成员14的角色可以为从副本节点。所以,基于对成员角色的划分,节点成员11也就可以称之为主副本节点11,对应的节点成员12也就可以称之为从副本节点12,节点成员13也就可以称之为从副本节点13等。主副本节点11、从副本节点12、从副本节点13和从副本节点14均维护有用于记录第一副本组10中成员的成员列表。也就是说,图1所示的各个节点成员均可以维护有记录有主副本节点11、从副本节点12、从副本节点13和从副本节点14的成员列表。
41.主副本节点11可以部署在包含一独立主机的物理服务器,或者该主副本节点11可以部署在主机集群承载的虚拟服务器(如云服务器),本说明书对此不进行限制。与相关技术中,成员变更信息写入数据日志的方式不同,本说明书所述的主副本节点11可以生成独立的成员变更日志,并将生成的独立的成员变更日志同步至各从副本节点,该主副本节点11可以根据从副本节点反馈的确认信息确定成员变更日志同步是否完成。通过该独立的成员变更日志,可以使第一副本组内的各个从副本节点直接实现成员列表的同步,不再需要从数据日志中解析出成员变更信息,加快了成员变更同步的效率。且即便在跨副本组的场景下,各个副本组也依旧可以各自沿用上述同步方式,间接提升了跨副本组的数据同步效率。
42.从副本节点12可以部署在包含一独立主机的物理服务器,或者该从副本节点12可以部署在主机集群承载的虚拟服务器(如云服务器),本说明书对此不进行限制。从副本节点12可以在接收到由主副本节点11发送的成员变更日志后,更新自身维护的成员列表,并
向该主副本节点11发送对应的确认信息,使得主副本节点11可以基于该确认信息确定成员变更日志同步是否完成。因为本说明书所述的成员变更日志与数据日志归属于不同的日志流,所以,从副本节点12在接收到该成员变更日志后可以直接基于该日志进行成员列表的更新,不再需要从数据日志中解析出成员变更信息,从而大大加快了成员列表的更新效率。从副本节点13和从副本节点14因为与从副本节点12属于同一角色的节点,关于从副本节点13和从副本节点14的介绍可参考上述内容,本说明书在此不再赘述。
43.基于上述分布式数据库系统架构,主副本节点通过生成独立的成员变更日志,使得成员变更信息不再侵入写入至数据日志中,从而各从副本节点不再需要从主副本节点发送的数据日志中解析出成员变更信息,而是可以直接基于接收的成员变更日志来实现成员列表的更新,加快了成员列表更新的效率;且即使在跨副本组的场景下,作为第一副本组的备副本组(如第二副本组)也可以直接根据数据日志完成数据同步,加快了数据同步的效率。
44.图2是本说明书一示例性实施例提供的一种分布式数据库系统成员变更的同步方法的流程图,该分布式数据库系统包括第一副本组,该第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于主副本节点,具体可以包括以下步骤:
45.步骤202、在接收到成员变更请求的情况下,生成对应的成员变更日志并更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流。
46.在该分布式数据库系统中可以包括对应的主副本节点和从副本节点,该主副本节点主要用于响应客户端的读写请求,主副本节点在数据读写完成后可以将更新后的数据以数据日志的方式同步至各个从副本节点,而从副本节点在接收到数据日志后,首先可以对数据日志进行本地持久化,在本地持久化完成后,从副本节点可以基于该持久化的数据日志回放出数据日志对应的数据并将其写入至自身的存储空间中,如写入至硬盘中,从副本节点将对应的更新的数据写入硬盘后,可以选择将本地持久化的数据日志删除,此时可以视为从副本节点完成对数据日志的处理,最终确保从副本节点和主副本节点维护相同的数据,从而保证分布式数据库系统的数据一致性。对于主副本节点的选举可以有多种形式,例如可以将设备id最大的节点选举为该主副本节点、还可以将设备内存空间最大的节点选举为该主副本节点等,本说明书对具体的选举方式并不进行限制。
47.在一实施例中,可以为主副本节点设置对应的任期时长,例如该任期时长为10秒,主副本节点在任期结束前,可以向各个从副本节点(可以包括该主副本节点)发起延期投票,当该主副本节点获得超过第一副本组成员数量的半数的赞同票时,该主副本节点可以确认延期成功,否则该主副本节点可以被降级为从副本节点,从而再次选举出主副本节点,当然存在一种可能,即再次选举出的主副本节点依旧可以是该被降级的从副本节点。
48.成员变更日志可以包含有对应的单调递增的版本号,版本号的数值大小用于表示成员列表的新旧,在选主阶段,因为持有较小版本号的节点可能已不是第一副本组内的节点,故持有较大版本号的节点不能给持有较小版本号的节点投票,从而避免选举旧版本号的节点为主副本节点。通过版本号的标示作用,可以避免将已不在第一副本组内的节点选举为主副本节点,保证数据库系统服务的正常运行。
49.成员变更请求可以由不同的节点发送,例如,假设该分布式数据库系统需要扩容,
那么该成员变更请求可以由扩容节点向该主副本节点发送,从而向该主副本节点表明该扩容节点欲加入该第一副本组。再例如,假设该分布式数据库系统需要精简,那么该成员变更请求可以由对应的被移除的节点发送,从而向该主副本节点表明该被移除的节点已下线。
50.主副本节点在接收到成员变更请求后,可以生成对应的成员变更日志,该成员变更日志内可以记录本次成员变更的具体情况,例如增加了节点a或者删除了节点b等。当然,该成员变更日志内也可以直接记录更新后的成员列表,例如,初始成员列表包括节点a和节点b,在发生成员变更后增加了节点c,成员变更日志可以直接记录更新后的成员列表,其包括节点a、节点b和节点c。
51.主副本节点在生成上述成员变更日志后可以更新并本地持久化自身维护的成员列表,并将成员变更日志广播给各个从副本节点,从而各个从副本节点可以接收到该成员变更日志,更新并本地持久化从副本节点自身维护的成员列表。如图3所示,图3是本说明书一示例性实施例提供的一种主副本节点广播成员变更日志的示意图。如图3所示,第一副本组可以包括主副本节点11、从副本节点12、从副本节点13和从副本节点14。主副本节点11在生成成员变更日志后,可以将其广播至从副本节点12、从副本节点13和从副本节点14。从副本节点12、从副本节点13和从副本节点14分别接收到主副本节点广播的成员变更日志后,可以基于接收到的成员变更日志,更新并本地持久化自身维护的成员列表,并在持久化完成后向主副本节点反馈对应的确认消息,该确认信息可以表明该从副本节点本地持久化完成,从而主副本节点11可以基于每个从副本节点反馈的确认信息确定成员变更日志同步是否完成。
52.为了确保成员变更同步的有序进行,避免出现成员列表不一致的现象,譬如,若从副本节点同一时刻仅能处理一个成员变更日志,在从副本节点同时接收到成员变更日志1和成员变更日志2后,从副本节点可能会误将成员变更日志2当做与成员变更日志1相同的成员变更日志,使得从副本节点仅处理了成员变更日志1而并未处理成员变更日志2,也就导致从副本节点维护的成员列表与主副本节点维护的成员列表不一致。或者,从副本节点可以处理成员变更日志1和成员变更日志2,但是从副本节点处理的先后顺序具有不确定性,如,从副本节点可以先处理成员变更日志2后处理成员变更日志1,也可以先处理成员变更日志1后处理成员变更日志2,当成员变更日志1与成员变更日志2存在冲突时(如成员变更日志1为增加节点a,成员变更日志2为删除节点a),从副本节点最终维护的成员列表也可能与主副本节点维护的成员列表不一致。故主副本节点可以在接收到成员变更请求的情况下,检查该第一副本组是否存在正在进行的成员变更;在检查结果表明所述第一副本组中不存在正在进行的成员变更的情况下,生成对应的成员变更日志;或,在检查结果表明所述第一副本组中存在正在进行的成员变更的情况下,所述主副本节点等待所述正在进行成员变更执行完成后,生成对应的成员变更日志;或,所述主副本节点拒绝所述成员变更请求。举例而言,假设主副本节点11在接收到成员变更请求时,其正在向从副本节点12、从副本节点13和从副本节点14同步成员变更日志,而主副本节点仍未接收到任何从副本节点12、从副本节点13和从副本节点14反馈的确认信息,可以认为此时第一副本组存在正在进行的成员变更。主副本节点11可以等待本次成员变更执行完成后,再针对该成员变更请求生成对应的新的成员变更日志,或者主副本节点也可以直接拒绝该成员变更请求。通过主副本节点的主动检查,可以保证第一副本组内成员变更的有序进行,避免某一从副本节点同时接
收多个成员变更日志而出现如前所述的从副本节点维护的成员列表与主副本节点不一致的现象。
53.数据日志的同步可以是基于多数派机制,即当主副本节点向各个从副本节点广播数据日志时,主副本节点只要接收到超过成员列表半数的确认信息后,就可以认为数据同步完成。因为本说明书所述的成员变更信息并未写入数据日志中,故基于多数派机制的数据日志同步可能存在数据丢失的问题。例如,主副本节点11在发生数据更新后,将对应的数据日志广播至从副本节点12和从副本节点13,主副本节点11只要接收到从副本节点12或从副本节点13任意一个节点反馈的确认信息,主副本节点11即可认为数据同步成功(3个节点数量的情况下,只要接收到1个从副本节点反馈的确认信息和主副本节点自身对应的确认信息即可认为满足多数派数量的要求)。所以虽然主副本节点11接收到从副本节点12发送的确认信息并视为数据同步完成,但是从副本节点13可能并未接收到数据日志。此时若发生成员变更,如移除了从副本节点12并加入从副本节点14,即成员列表包括主副本节点11、从副本节点13和从副本节点14,虽然主副本节点11通过多数派机制实现了数据同步,但实际最终仅主副本节点11存储有对应的完整的数据,而从副本节点13和从副本节点14并没有存储有对应的完整的数据,造成了如前所述的数据丢失的现象,影响分布式数据库系统的可靠性。
54.所以为了避免出现上述的数据丢失的现象,成员变更日志可以包括位点标识信息,该位点标识信息用于表征主副本节点在生成成员变更日志时对应的数据日志处理进度。换言之,主副本节点在生成成员变更日志时,可以在生成的该成员变更日志中加入自身对应的数据日志流的持久化位点作为位点标识信息,从而可以使从副本节点基于该位点标识信息判断自身与主副本节点数据日志处理进度是否一致,在判断结果表明从副本节点与主副本节点针对数据日志的处理进度一致的情况下,从副本节点可以基于成员变更日志更新自身维护的成员列表。即从副本节点进行成员列表的更新之前主动检查自身针对数据日志的处理进度是否与主副本节点的数据日志处理进度保持一致,在一致的前提下,从副本节点对自身维护的成员列表进行更新,也就避免了上述因成员的变更导致数据丢失的现象,提升了分布式数据库系统的可靠性。
55.在一实施例中,为了执行的便捷,主副本节点可以直接用单调递增的数据日志id作为对应的如前所述的位点标识信息。譬如,假设主副本节点生成成员变更日志时,该主副本节点自身对应的数据日志id为100,那么主副本节点可以直接将该数据日志id 100加入至成员变更日志,从而可以使该数据日志id 100来表征主副本节点在生成成员变更日志时对应的数据日志处理进度。基于上述数据日志id,从副本节点在接收到成员变更日志的情况下,可以根据成员变更日志中由主副本节点加入的数据日志id 100,执行前向检查,判断该从副本节点对应的数据日志处理进度是否与所述主副本节点保持一致;在检查结果表明所述从副本节点对应的数据日志处理进度与所述主副本节点保持一致的情况下,从副本节点可以基于所述成员变更日志更新自身维护的成员列表;或,在检查结果表明所述从副本节点对应的数据日志处理进度未到达所述主副本节点对应的数据日志处理进度的情况下,从副本节点可以在自身对应的数据日志处理进度到达所述位点标识信息对应的数据日志处理进度后,基于所述成员变更日志更新自身维护的成员列表;或,所述从副本节点向所述主副本节点发送对应的拒绝信息,以表明所述从副本节点拒绝此次由所述主副本节点发起
的成员变更日志同步。
56.下面结合图4,以数据日志id为位点标识信息为例,详细介绍从副本节点基于数据日志id如何进行数据日志处理进度的判断。图4是本说明书一示例性实施例提供的一种从副本节点判断数据日志处理进度的示意图。主副本节点11在生成成员变更日志时,可以在成员变更日志中添加自身对应的数据日志流持久化位点,即可以是如前所述的数据日志id 100,而从副本节点,如从副本节点12在接收到该成员变更日志后,可以根据该数据日志id100执行前向检查,假设前向检查的结果显示,从副本节点12对应的数据日志id也为100,那么就表示从副本节点12的数据日志的处理进度与主副本节点保持一致,也就是说,从副本节点12已经将本地持久化的数据日志100对应的数据写入至从副本节点12对应的硬盘中。而因为从副本节点12前向检查的结果显示该从副本节点12的数据日志id也为100,所以可以认为从副本节点12的数据日志的处理进度与主副本节点保持一致,故从副本节点12可以直接基于该成员变更日志更新、并本地持久化成员列表,同时向主副本节点11反馈对应的确认信息,以此表明从副本节点12维护的数据和成员列表均与主副本节点保持一致。再以从副本节点13为例,假设从副本节点13接收到成员变更日志后,前向检查的结果显示从副本节点13的数据日志id为98(可以认为从副本节点13在处理完数据日志98后从分布式数据库系统中被移除,后从副本节点13又加入该分布式数据库系统,从而导致从副本节点13的数据日志id停留在98),那么从副本节点13可以在等待自身处理完数据日志id为99和数据日志id为100的数据日志后,使得从副本节点13对应的数据日志处理进度与主副本节点11的数据日志处理进度保存一致,再更新、并本地持久化成员列表,同时向从副本节点11反馈对应的确认信息。或者,以从副本节点14为例,当从副本节点的检查结果表明从副本节点与主副本节点针对数据日志的处理进度不一致时,从副本节点14也可以直接向主副本节点11反馈拒绝信息,以表明从副本节点14拒绝此次主副本节点11发起的成员变更日志同步。针对处理进度不一致时,本说明书对从副本节点的执行动作并不进行限制,既可以是如从副本节点13的等待一致后再执行,也可以如从副本节点14直接拒绝执行,具体为等待执行还是拒绝执行可以根据多数派数量来确定,当满足多数派数量的从副本节点等待执行后与主副本节点对应的数据日志处理进度达成一致时,之后的从副本节点可以拒绝执行。通过引入如数据日志id的位点标识信息,可以使各个从副本节点在接收到成员变更日志后,执行对应的前向检查,从而确保满足多数派数量的从副本节点维护的数据与主副本节点保持一致,避免出现如前所述的仅主副本节点维护有对应的完整的数据的现象,提升分布式数据库系统的可靠性。
57.步骤204、将所述成员变更日志同步至所述从副本节点,并基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
58.主副本节点在获得超过其维护的更新后的成员列表对应的成员数量的半数的确认信息的情况下,主副本节点可以确定成员变更日志同步完成。以图1所示实施例为例,主副本节点11在接收到成员变更请求后,生成对应的成员变更日志,该日志表明,该第一副本组加入了新的从副本节点,如从副本节点15,那么,主副本节点11可以将成员变更日志同步至从副本节点12、从副本节点13、从副本节点14和从副本节点15,更新后的成员列表对应的节点数量为5,主副本节点11只要接收到3个或大于3个的确认信息即可确定成员变更日志同步完成。换言之,主副本节点不需要等待每一从副本节点均反馈确认信息后,才能确定成
员变更日志同步完成,该多数派的确认机制不仅可以确保成员变更同步的可靠性,同时也提升了任务执行完成的效率,减少了成员变更的响应时长。
59.在一实施例中,该分布式数据库系统还可以包括第二副本组,第二副本组为第一副本组的备副本组,而主副本节点可以响应于数据变更请求,生成对应的数据日志;并将所述数据日志同步至所述第二副本组,以使该第二副本组根据所述数据日志完成数据的同步。如图5所示,图5是本说明书一示例性实施例提供的一种第二副本组的示意图。第二副本组可以包括主副本节点501、从副本节点502、从副本节点503和从副本节点504。第二副本组可以用于对第一副本组内存储的数据进行备份。在跨副本组的场景下,因为本说明书所述的成员变更信息已不再需要写入数据日志中,而是独立生成成员变更日志,所以第一副本组可以直接将不含成员变更信息的数据日志同步至第二副本组,而第二副本组也可以直接根据该数据日志完成数据同步,不再需要从中解析并丢弃成员变更信息,加快了数据同步的效率。具体的,第二副本组对于数据日志的处理,可以采用如前所述的方式,即第二副本组中的各个节点接收到该数据日志后,首先本地持久化该数据日志,之后各节点可以基于自身本地持久化的数据日志回放出对应的数据,并将回放出的数据写入至各节点对应的硬盘中,当第二副本组的各个节点写入完成或者说落盘完成后,可以选择将该本地持久化的数据日志删除,并视为数据同步完成。当然,为了加快数据同步的效率,第二副本组中多数派节点完成数据日志的回放、落盘后即可认为数据同步完成,不需要确保第二副本组中的每一节点均完成数据日志的回放和落盘。需要说明的是,虽然在图5所示的实施例中,第二副本组为第一副本组的备副本组,但在一些实施例中,该第二副本组也可以为第一副本组的数据恢复副本组,从而第一副本组可以利用第二副本组来实现数据的恢复,本说明书对此不进行限制。
60.图6是本说明书一示例性实施例提供的一种分布式数据库系统成员变更的同步方法的流程图,该分布式数据库系统包括第一副本组,该第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和所述从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于从副本节点,可以包括以下步骤:
61.步骤602、在接收到所述主副本节点发送的成员变更日志后,基于所述成员变更日志更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流,所述成员变更日志由所述主副本节点在接收到成员变更请求后所生成。
62.步骤604、在所述成员列表更新完成的情况下,向所述主副本节点发送对应的确认信息,以使所述主副本节点基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
63.在一实施例中,成员变更日志中可以包括位点标识信息,该位点标识信息用于表征所述主副本节点在生成所述成员变更日志时对应的数据日志处理进度。从副本节点在接收到所述成员变更日志的情况下,可以根据所述成员变更日志中的位点标识信息,检查从副本节点对应的数据日志处理进度是否与主副本节点保持一致;
64.在检查结果表明该从副本节点对应的数据日志处理进度与主副本节点保持一致的情况下,从副本节点可以基于成员变更日志更新自身维护的成员列表;或,
65.在检查结果表明从副本节点对应的数据日志处理进度未到达主副本节点对应的数据日志处理进度的情况下,从副本节点可以在自身对应的数据日志处理进度到达位点标
识信息对应的数据日志处理进度后,基于成员变更日志更新自身维护的成员列表;或,从副本节点向主副本节点发送对应的拒绝信息,以表明从副本节点拒绝此次由主副本节点发起的成员变更日志的同步。
66.与前述方法的实施例相对应,本说明书还提供了装置、电子设备以及存储介质的实施例。
67.图7是一示例性实施例提供的一种电子设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器701、网络接口702、内存703、非易失性存储器704以及内部总线705,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器701从非易失性存储器704中读取对应的计算机程序到内存703中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
68.图8是一示例性实施例提供的一种分布式数据库系统成员变更的同步装置的框图。请参考图8,其中,分布式数据库系统可以包括第一副本组,该第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和所述从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于主副本节点,所述装置包括:
69.生成单元802,用于在接收到成员变更请求的情况下,生成对应的成员变更日志并更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流;
70.确定单元804,用于将所述成员变更日志同步至所述从副本节点,并基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
71.可选地,确定单元804具体用于:
72.在获得超过其维护的更新后的成员列表对应的成员数量的半数的确认信息的情况下,所述主副本节点确定所述成员变更日志同步完成。
73.可选地,所述装置还包括:
74.检查单元806,用于在接收到成员变更请求的情况下,所述主副本节点检查所述第一副本组中是否存在正在进行的成员变更;在检查结果表明所述第一副本组中不存在正在进行的成员变更的情况下,生成对应的成员变更日志;或,在检查结果表明所述第一副本组中存在正在进行的成员变更的情况下,所述主副本节点等待所述正在进行成员变更执行完成后,生成对应的成员变更日志;或,所述主副本节点拒绝所述成员变更请求。
75.可选地,所述成员变更日志包括位点标识信息,所述位点标识信息用于表征所述主副本节点在生成所述成员变更日志时对应的数据日志处理进度。
76.可选地,所述系统还包括第二副本组,所述第二副本组为所述第一副本组的备副本组,所述装置还包括:
77.同步单元808,用于响应于数据变更请求,生成对应的数据日志;将所述数据日志同步至所述第二副本组,以使所述第二副本组根据所述数据日志完成数据的同步。
78.图9是一示例性实施例提供的一种分布式数据库系统成员变更的同步装置的框图。请参考图9,其中,所述分布式数据库系统包括第一副本组,所述第一副本组包括若干成员,该等成员的角色为主副本节点和从副本节点,所述主副本节点和所述从副本节点维护有用于记录所述第一副本组中成员的成员列表,应用于从副本节点,该装置包括:
79.更新单元902,用于在接收到所述主副本节点发送的成员变更日志后,基于所述成员变更日志更新自身维护的成员列表,所述成员变更日志与数据日志归属于不同的日志流,所述成员变更日志由所述主副本节点在接收到成员变更请求后所生成;
80.发送单元904,用于在所述成员列表更新完成的情况下,向所述主副本节点发送对应的确认信息,以使所述主副本节点基于所述从副本节点反馈的确认信息确定所述成员变更日志同步是否完成。
81.可选地,所述成员变更日志包括位点标识信息,所述位点标识信息用于表征所述主副本节点在生成所述成员变更日志时对应的数据日志处理进度,所述装置还包括:
82.位点检查单元906,用于在接收到所述成员变更日志的情况下,根据所述成员变更日志中的位点标识信息,检查所述从副本节点对应的数据日志处理进度是否与所述主副本节点保持一致;
83.在检查结果表明所述从副本节点对应的数据日志处理进度与所述主副本节点保持一致的情况下,基于所述成员变更日志更新自身维护的成员列表;或,
84.在检查结果表明所述从副本节点对应的数据日志处理进度未到达所述主副本节点对应的数据日志处理进度的情况下,所述从副本节点在自身对应的数据日志处理进度到达所述位点标识信息对应的数据日志处理进度后,基于所述成员变更日志更新自身维护的成员列表;或,向所述主副本节点发送对应的拒绝信息,以表明所述从副本节点拒绝此次由所述主副本节点发起的成员变更日志的同步。
85.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
86.在一个典型的配置中,计算机设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
87.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
88.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
89.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包
括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
90.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
91.在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
92.应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
93.以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献