CN117155955A - 分布式系统中的同步方法、装置、设备、介质及程序产品 - Google Patents
分布式系统中的同步方法、装置、设备、介质及程序产品 Download PDFInfo
- Publication number
- CN117155955A CN117155955A CN202210570452.8A CN202210570452A CN117155955A CN 117155955 A CN117155955 A CN 117155955A CN 202210570452 A CN202210570452 A CN 202210570452A CN 117155955 A CN117155955 A CN 117155955A
- Authority
- CN
- China
- Prior art keywords
- synchronization
- synchronous
- server
- request
- transit
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 230000001360 synchronised effect Effects 0.000 claims abstract description 229
- 238000012546 transfer Methods 0.000 claims abstract description 211
- 238000012545 processing Methods 0.000 claims abstract description 82
- 230000004044 response Effects 0.000 claims abstract description 73
- 238000004590 computer program Methods 0.000 claims abstract description 9
- 230000015654 memory Effects 0.000 claims description 60
- 238000010586 diagram Methods 0.000 description 19
- 230000008569 process Effects 0.000 description 12
- 230000008859 change Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 238000002360 preparation method Methods 0.000 description 5
- 238000001514 detection method Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000013499 data model Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000008602 contraction Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- 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)
- Hardware Redundancy (AREA)
Abstract
本申请提供了一种分布式系统中的同步方法、装置、设备、计算机可读存储介质及计算机程序产品;分布式系统包括至少一个协调服务器和至少两个中转服务器,方法包括:响应于针对目标事务的同步指令,发送针对目标事务的同步请求至各中转服务器;接收到各中转服务器返回的针对同步请求的响应信息,响应信息用于反馈相应的中转服务器针对目标事务的预同步结果;其中,预同步结果用于指示针对目标事务的预同步成功或预同步失败;基于响应信息反馈的各中转服务器的预同步结果,确定同步处理请求的类型,并发送所述类型的同步处理请求至各中转服务器,以使各中转服务器基于类型的同步处理请求,针对目标事务执行相应类型的同步处理操作。
Description
技术领域
本申请涉及互联网和数据库技术领域,尤其涉及一种分布式系统中的同步方法、装置、设备、计算机可读存储介质及计算机程序产品。
背景技术
在互联网及数据库技术领域中,分布式系统(如ZooKeeper,包括至少一个协调服务器和至少两个中转服务器)中同步处理方法大多利用ZooKeeper的临时节点和监管(Watch)通知机制,该方式在绝大部分场景下没有问题,但它非常依赖于ZooKeeper的Watch通知机制,需要确保所有中转服务器都能成功收到路由更新通知,一旦出现Watch通知异常,将导致部分中转服务器更新路由,部分中转服务器没有更新路由,使得中转服务器之间的路由不一致。
而在实际应用中,网络的不稳定、丢包、断线重连都有可能导致Watch通知未成功到达中转服务器,因此,在一些极端的网络异常下,会有小概率导致路由不一致,这对于有状态的后端服务将是重大灾难。
发明内容
本申请实施例提供一种分布式系统中的同步方法、装置、设备、计算机可读存储介质及计算机程序产品,能够提高分布式系统中同步的一致性。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种分布式系统中的同步方法,所述分布式系统包括至少一个协调服务器和至少两个中转服务器,方法包括:
响应于针对目标事务的同步指令,所述协调服务器发送针对所述目标事务的同步请求至各所述中转服务器;
接收到各所述中转服务器返回的针对所述同步请求的响应信息,所述响应信息用于反馈相应的所述中转服务器针对所述目标事务的预同步结果;
其中,所述预同步结果用于指示针对所述目标事务的预同步成功或预同步失败;
基于所述响应信息反馈的各所述中转服务器的所述预同步结果,确定同步处理请求的类型,并发送所述类型的同步处理请求至各所述中转服务器,以使各所述中转服务器基于所述类型的同步处理请求,针对所述目标事务执行相应类型的同步处理操作。
本申请实施例提供一种分布式系统中的同步装置,所述分布式系统包括至少一个协调服务器和至少两个中转服务器,所述装置包括:
第一发送模块,用于响应于针对目标事务的同步指令,所述协调服务器发送针对所述目标事务的同步请求至各所述中转服务器;
响应接收模块,用于接收到各所述中转服务器返回的针对所述同步请求的响应信息,所述响应信息用于反馈相应的所述中转服务器针对所述目标事务的预同步结果;
其中,所述预同步结果用于指示针对所述目标事务的预同步成功或预同步失败;
第二发送模块,用于基于所述响应信息反馈的各所述中转服务器的所述预同步结果,确定同步处理请求的类型,并发送所述类型的同步处理请求至各所述中转服务器,以使各所述中转服务器基于所述类型的同步处理请求,针对所述目标事务执行相应类型的同步处理操作。
上述方案中,所述第一发送模块,还用于所述协调服务器生成所述同步指令指示的针对所述目标事务的同步请求,并发送所述同步请求至各所述中转服务器,以使各所述中转服务器基于所述同步请求,确定对应所述同步请求的预同步结果,并基于各所述预同步结果确定响应信息,以将所述响应信息返回至所述协调服务器。
上述方案中,所述装置还包括中转服务器执行模块,用于当所述同步指令指示对所述目标事务中的目标数据进行数据同步时,各所述中转服务器分别执行以下操作:当所述中转服务器基于所述同步请求对所述目标数据进行同步得到同步数据时,确定用于指示针对所述目标数据的预同步成功的预同步结果,并将所述同步数据存储至临时内存中;当所述中转服务器基于所述同步请求无法对所述目标数据进行同步得到所述同步数据时,确定用于指示针对所述目标数据的预同步失败的预同步结果。
上述方案中,所述中转服务器执行模块,还用于当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,各所述中转服务器分别执行以下操作:当所述中转服务器基于所述同步请求查询到更新容量列表时,确定用于指示对所述资源容量的预同步成功的预同步结果,并将所述更新容量列表存储至临时内存中;当所述中转服务器基于所述同步请求无法查询到更新容量列表时,确定用于指示对所述资源容量的预同步失败的预同步结果。
上述方案中,所述中转服务器执行模块,还用于当所述预同步结果指示针对所述目标事务预同步成功时,相应的所述中转服务器注册用于指示预同步成功的预同步节点;各所述中转服务器从所述至少两个中转服务器中选取得到主中转服务器;所述主中转服务器检测注册的所述预同步节点的数量,并对所述预同步节点的数量与所述中转服务器的数量进行比较,以基于所述比较结果确定所述响应信息,并将所述响应信息返回至所述协调服务器。
上述方案中,所述中转服务器执行模块,还用于各所述中转服务器注册对应的临时顺序节点,得到与所述中转服务器的数量一致的临时顺序节点,所述临时顺序节点的序号是自增长的;根据所述临时顺序节点的序号,从所述数量的临时顺序节点中选取序号最小的第一临时顺序节点,并将选取的所述第一临时顺序节点对应的中转服务器确定为主中转服务器。
上述方案中,所述中转服务器执行模块,还用于当选取的所述第一临时顺序节点对应的中转服务器发生故障时,选取与所述第一临时顺序节点相邻的第二临时顺序节点;将选取的所述第二临时顺序节点对应的中转服务器确定为所述主中转服务器,并删除发生故障的所述中转服务器及所述第一临时顺序节点。
上述方案中,所述第二发送模块,还用于当所述响应信息反馈各所述中转服务器的所述预同步结果均为预同步成功时,确定同步处理请求的类型为同步提交;当所述响应信息反馈所述至少两个中转服务器中至少存在一个中转服务器的所述预同步结果为预同步失败时,确定所述同步处理请求的类型为同步回滚。
上述方案中,所述第二发送模块,还用于当所述同步处理请求的类型为同步提交时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,针对所述目标事务执行同步提交操作;当所述同步处理请求的类型为同步回滚时,发送同步回滚请求至各所述中转服务器,以使各所述中转服务器基于所述同步回滚请求,针对所述目标事务执行同步回滚操作。
上述方案中,所述第二发送模块,还用于当所述同步指令指示对所述目标事务中的目标数据进行数据同步时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,从临时内存中获取对所述目标数据进行同步得到的同步数据,以将所述目标数据替换为所述同步数据,并对所述目标数据进行备份;当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,从临时内存中获取更新容量列表,以将所述更新容量列表替换原有容量列表,并对所述原有容量列表进行备份。
上述方案中,所述第二发送模块,还用于当所述同步指令指示对所述目标事务中目标数据进行数据同步时,发送同步回滚请求至所述至少两个中转服务器,以使所述至少两个中转服务器中除所述同步结果为同步失败的中转服务器之外的其他中转服务器,基于所述同步回滚请求,从临时内存中删除对所述目标数据进行同步得到的同步数据;当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,发送同步回滚请求至各所述中转服务器,以使所述至少两个中转服务器中除所述同步结果为同步失败的中转服务器之外的其他中转服务器,基于所述同步回滚请求,从临时内存中删除更新容量列表,并保留原有容量列表。
上述方案中,所述发送同步提交请求至各所述中转服务器之后,所述装置还包括:第三发送模块,用于将所述目标事务对应的同步状态更新为提交状态;获取所述提交状态的持续时长,在所述持续时长内检测各所述中转服务器针对所述同步提交请求的反馈信息;其中,所述反馈信息,用于反馈相应的所述中转服务器针对所述目标事务的同步提交结果,所述同步提交结果,用于指示针对所述目标事务的同步提交成功或同步提交失败;当所述持续时长超过目标时长、且所述反馈信息反馈所述至少两个中转服务器中至少存在一个中转服务器的所述同步提交结果为同步提交失败时,发送同步回滚请求至各所述中转服务器,以使各所述中转服务器基于所述同步回滚请求,针对所述目标事务执行同步回滚操作。
本申请实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的分布式系统中的同步方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的分布式系统中的同步方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或指令,所述计算机程序或指令被处理器执行时,实现本申请实施例提供的分布式系统中的同步方法。
本申请实施例具有以下有益效果:
应用本申请实施例,在对目标事务进行同步时,通过分布式系统中协调服务器发送针对目标事务的同步请求至各中转服务器,并基于接收到各中转服务器返回的针对同步请求的响应信息中的预同步结果,确定同步处理请求的类型,并发送相应类型的同步处理请求至各中转服务器,以使各中转服务器针对目标事务执行相应类型的同步处理操作,如此,各中转服务器针对目标事务执行的同步处理操作始终是相同类型的同步处理操作,确保了所有的中转服务器针对目标事务的同步一致性。
附图说明
图1为本申请实施例提供的分布式系统中的同步系统100的架构示意图;
图2为本申请实施例提供的电子设备500的结构示意图;
图3为本申请实施例提供的分布式系统中的同步方法的流程示意图;
图4为本申请实施例提供的分布式系统中的同步系统的架构示意图;
图5为本申请实施例提供的ZK路由数据模型的架构示意图;
图6为本申请实施例提供的分布式系统中的同步系统的架构示意图;
图7为本申请实施例提供的数据结构示意图;
图8为本申请实施例提供的数据结构示意图;
图9为本申请实施例提供的数据结构示意图;
图10为本申请实施例提供的状态检测方法示意图;
图11为本申请实施例提供的主节点的选取视图;
图12为本申请实施例提供的数据结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二…”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二…”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
参见图1,图1为本申请实施例提供的分布式系统中的同步系统100的架构示意图,为实现支撑一个示例性应用,分布式系统中同步系统可包括至少一个终端、至少一个协调服务器和至少两个中转服务器,其中,终端上设置有执行目标事务的客户端,客户端对应有用于发送针对目标事务的同步指令的业务服务器,如用户通过客户端触发针对目标事务的同步指令时,业务服务器将同步指令发送至协调服务器,协调服务器在接收到针对目标事务的同步指令后,响应于该同步指令,将针对目标事务的同步请求发送至各中转服务器,以使各中转服务器执行同步请求所请求的同步操作,并返回针对同步请求的响应信息,其中,响应信息用于反馈相应的中转服务器针对目标事务的预同步结果;预同步结果用于指示针对目标事务的预同步成功或预同步失败;协调服务器基于响应信息反馈的各中转服务器的预同步结果,确定同步处理请求的类型,并发送所确定类型的同步处理请求至各中转服务器;各中转服务器基于接收到的类型的同步处理请求,针对目标事务执行相应类型的同步处理操作。
在实际应用中,协调服务器和中转服务器等这些服务器可以是物理机,或者是部署于物理机上的虚拟机、容器等等,其中,物理机是具有数据处理能力的设备,例如可以是终端或者服务器,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
参见图2,图2为本申请实施例提供的电子设备500的结构示意图,在实际应用中,电子设备500可以为图1中的终端、协调服务器和各中转服务器,以电子设备为图1所示的协调服务器为例,对实施本申请实施例的分布式系统中的同步方法的电子设备进行说明。图2所示的电子设备500包括:至少一个处理器510、存储器550、至少一个网络接口520和用户接口530。电子设备500中的各个组件通过总线系统540耦合在一起。可理解,总线系统540用于实现这些组件之间的连接通信。总线系统540除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线系统540。
处理器510可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口530包括使得能够呈现媒体内容的一个或多个输出装置531,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口530还包括一个或多个输入装置532,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器550可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器550可选地包括在物理位置上远离处理器510的一个或多个存储设备。
存储器550包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器550旨在包括任意适合类型的存储器。
在一些实施例中,存储器550能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统551,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;网络通信模块552,用于经由一个或多个(有线或无线)网络接口520到达其他计算设备,示例性的网络接口520包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,UniversalSerial Bus)等;呈现模块553,用于经由一个或多个与用户接口530相关联的输出装置531(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);输入处理模块554,用于对一个或多个来自一个或多个输入装置532之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的分布式系统中的同步装置可以采用软件方式实现,图2示出了存储在存储器550中的分布式系统中的同步装置555,其可以是程序和插件等形式的软件,包括以下软件模块:第一发送模块5551、响应接收模块5552和第二发送模块5553,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分,将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的分布式系统中的同步装置可以采用硬件方式实现,作为示例,本申请实施例提供的分布式系统中的同步装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的分布式系统中的同步方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,ProgrammableLogic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
基于上述对本申请实施例的提供的分布式系统中的同步系统及电子设备的说明,下面对本申请实施例的提供的分布式系统中的同步方法进行说明,在实际实施时,该方法可由图1所示的协调服务器单独实施,还可由图1所示的协调服务器和各中转服务器协同实施。接下来将结合图1及图3,图3为本申请实施例提供的分布式系统中的同步方法的流程示意图,以图1所示的协调服务器和各中转服务器(假设N个,N大于等于2)协同实施本申请实施例提供的分布式系统中的同步方法为例进行说明。
在步骤101中,协调服务器响应于针对目标事务的同步指令,发送针对目标事务的同步请求至各中转服务器。
这里,事务是数据库管理系统执行过程中的一个逻辑单位,其包括有限的数据库操作序列。为保证数据的正确可靠,事务必须具备四个特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),其中,原子性是指一个事务中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节,事务在执行过程中发生错误,会被回滚到事务开始前的状态;一致性是指在事务开始之前和事务结束以后,数据库的完整性没有被破坏;隔离性是指数据库允许多个并发事务同时对数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致;持久性是指事务执行结束后,对数据的修改就是永久的,即使系统故障也不会丢失。
在分布式系统中的事务处理过程中,当一个事务需要多个中转服务器执行时,为了保证上述事务特性,需要协调服务器在目标事务执行过程中承担协调角色,以对各中转服务器针对目标事务的同步请求的同步结果进行管理。
在实际应用中,终端上设置有执行目标事务的客户端,客户端对应有用于发送针对目标事务的同步指令的业务服务器,如用户通过客户端触发针对目标事务的同步指令时,业务服务器发送同步指令至协调服务器,协调服务器接收到同步指令后,响应于该同步指令,将针对目标事务的同步请求发送至各中转服务器,以请求各中转服务器是否对目标事务执行同步操作,并等待各中转服务器针对同步请求的响应结果。
在步骤102中,各中转服务器基于同步请求,确定对应同步请求的预同步结果,并基于各预同步结果确定响应信息,以将响应信息返回至协调服务器。
这里,中转服务器接收到协调服务器发送的同步请求后,确定是否针对目标事务执行预同步操作以得到相应的预同步结果并反馈至协调服务器,如当确定针对目标事务执行预同步操作时,将预同步成功的预同步结果反馈至协调服务器;当中转服务器无法接收到同步请求或针对目标事务无法执行预同步操作时,将预同步失败的预同步结果反馈至协调服务器。
在一些实施例中,各中转服务器可通过如下方式基于同步请求,确定对应同步请求的预同步结果:当同步指令指示对目标事务中的目标数据进行数据同步时,各中转服务器分别执行以下操作:当中转服务器基于同步请求对目标数据进行同步得到同步数据时,确定用于指示针对目标数据的预同步成功的预同步结果,并将同步数据存储至临时内存中;当中转服务器基于同步请求无法对目标数据进行同步得到同步数据时,确定用于指示针对目标数据的预同步失败的预同步结果。
作为示例,当同步指令指示对目标事务中的目标数据进行数据同步时,成功接收到同步请求的各中转服务器,针对目标事务执行各自的同步请求,如执行同步请求所请求的对目标数据进行更新的同步操作以得到同步数据,此时表征预同步结果为预同步成功,向协调服务器发送预同步成功的响应信息。需要说明的是,在此情况下,并未将目标数据替换为同步数据,而是将同步数据暂时存储至临时内存中,以供后续真正执行同步提交操作。当中转服务器未成功接收到同步请求、或中转服务器无法成功根据同步请求中请求同步的目标数据得到同步数据时,表征预同步结果为预同步失败,并可向协调服务器发送预同步失败的响应信息。
在一些实施例中,各中转服务器可通过如下方式基于同步请求,确定对应同步请求的预同步结果:当同步指令指示对目标事务中的资源容量进行容量同步时,各中转服务器分别执行以下操作:当中转服务器基于同步请求查询到更新容量列表时,确定用于指示对资源容量的预同步成功的预同步结果,并将更新容量列表存储至临时内存中;当中转服务器基于同步请求无法查询到更新容量列表时,确定用于指示对资源容量的预同步失败的预同步结果。
作为示例,当同步指令指示对目标事务中的资源容量进行容量同步时,如如进行扩容或缩容时,成功接收到同步请求的各中转服务器,针对目标事务执行各自的同步请求,如查询并拉取最新的更新容量列表,此时表征预同步结果为预同步成功,向协调服务器发送预同步成功的响应信息,需要说明的是,在此情况下,并未将拉取的更新容量列表替换原始容量列表,而是将拉取的更新容量列表暂时存储至临时内存中,以供后续真正执行同步提交操作。当中转服务器未成功接收到同步请求、或中转服务器无法成功拉取更新容量列表时,表征预同步结果为预同步失败,此时向协调服务器发送预同步失败的响应信息。
在一些实施例中,各中转服务器可通过如下方式基于各预同步结果确定响应信息,以将响应信息返回至协调服务器:当预同步结果指示针对目标事务预同步成功时,相应的中转服务器注册用于指示预同步成功的预同步节点;各中转服务器从至少两个中转服务器中选取得到主中转服务器;主中转服务器检测注册的预同步节点的数量,并对预同步节点的数量与中转服务器的数量进行比较,以基于比较结果确定响应信息,并将响应信息返回至协调服务器。
这里,当中转服务器基于同步请求得到预同步成功的预同步结果时,该中转服务器可注册用于指示预同步成功的预同步节点,各中转服务器可从所有中转服务器中选取得到主中转服务器对预同步节点进行检测,以通过预同步节点的数量来反馈预同步成功的中转服务器的数量;当主中转服务器检测到的预同步节点的数量与中转服务器的数量相等时,表征所有的中转服务器均基于同步请求得到预同步成功的预同步结果,此时确定用于反馈各中转服务器的预同步结果均为预同步成功的响应信息;当主中转服务器检测到的预同步节点的数量小于中转服务器的数量时,表征存在部分中转服务器未基于同步请求得到预同步成功的预同步结果,此时确定用于反馈各中转服务器的预同步结果不全为预同步成功(即存在部分中转服务器的预同步结果为预同步失败)的响应信息。在确定响应消息后,协调服务器根据响应信息执行后续操作。
在一些实施例中,各中转服务器通过如下方式从至少两个中转服务器中选取得到主中转服务器:各中转服务器注册对应的临时顺序节点,得到与中转服务器的数量一致的临时顺序节点,其中,临时顺序节点的序号是自增长的;根据临时顺序节点的序号,从相应数量的临时顺序节点中选取序号最小的第一临时顺序节点,并将选取的第一临时顺序节点对应的中转服务器确定为主中转服务器。
这里,每个中转服务器对应一个临时顺序节点,假设存在4个中转服务器,可随机对中转服务器注册相对应的临时顺序节点,如中转服务器1与临时顺序节点1相对应、中转服务器2与临时顺序节点2相对应、中转服务器3与临时顺序节点3相对应、中转服务器4与临时顺序节点4相对应,可从4个临时顺序节点中选取临时顺序节点最小或最大的临时顺序节点作为第一临时顺序节点,并将所选取的第一临时顺序节点对应的中转服务器确定为主中转服务器,如第一临时顺序节点为临时顺序节点1时,将中转服务器1确定为主中转服务器,以使中转服务器1对这4个中转服务器的预同步状态(是否预同步成功,是否注册了预同步节点)进行检测。
在一些实施例中,当选取的第一临时顺序节点对应的中转服务器发生故障时,选取与第一临时顺序节点相邻的第二临时顺序节点;将选取的第二临时顺序节点对应的中转服务器确定为主中转服务器,并删除发生故障的中转服务器及第一临时顺序节点。
这里,当已确定的主中转服务器发生故障时,可更换其他中转服务器为主中转服务器,仍以上述4个中转服务器为例,在将中转服务器1确定为主中转服务器后,若中转服务器1发生故障,将中转服务器1和临时顺序节点1进行删除,可选择临时顺序节点2对应的中转服务器2作为主中转服务器;在将中转服务器4确定为主中转服务器后,若中转服务器4发生故障,将中转服务器4和临时顺序节点4进行删除,可选择临时顺序节点1对应的中转服务器1作为主中转服务器。
需要说明的是,在实际应用中,可将上述选取得到的主中转服务器作为协调服务器,即通过协调服务器对各中转服务器的状态进行检测,以简化整体架构,降低整体复杂度。
在步骤103中,协同服务器接收到各中转服务器返回的针对同步请求的响应信息。
其中,响应信息用于反馈相应的中转服务器针对目标事务的预同步结果,预同步结果用于指示针对目标事务的预同步成功或预同步失败。
在步骤104中,协调服务器基于响应信息反馈的各中转服务器的预同步结果,确定同步处理请求的类型,并发送所确定类型的同步处理请求至各中转服务器。
在步骤105中,各中转服务器基于所确定类型的同步处理请求,针对目标事务执行相应类型的同步处理操作。
在一些实施例中,协调服务器可通过如下方式基于响应信息反馈的各中转服务器的预同步结果,确定同步处理请求的类型:当响应信息反馈各中转服务器的预同步结果均为预同步成功时,确定同步处理请求的类型为同步提交;当响应信息反馈至少两个中转服务器中至少存在一个中转服务器的预同步结果为预同步失败时,确定同步处理请求的类型为同步回滚。
这里,当所有中转服务器均基于同步请求得到预同步成功的预同步结果时,此时确定同步处理请求的类型为同步提交,以对目标事务执行真正的同步操作。当所有中转服务器中存在部分中转服务器未基于同步请求得到预同步成功的预同步结果(即至少存在一个中转服务器的预同步结果为预同步失败)时,此时确定同步处理请求的类型为同步回滚,以对目标事务不执行真正的同步操作,使得目标事务保持原样。
在一些实施例中,协调服务器可通过如下方式发送所确定类型的同步处理请求至各中转服务器,以使各中转服务器基于所确定类型的同步处理请求,针对目标事务执行相应类型的同步处理操作:当同步处理请求的类型为同步提交时,发送同步提交请求至各中转服务器,以使各中转服务器基于同步提交请求,针对目标事务执行同步提交操作;当同步处理请求的类型为同步回滚时,发送同步回滚请求至各中转服务器,以使各中转服务器基于同步回滚请求,针对目标事务执行同步回滚操作。
这里,当所确定的同步处理请求的类型为同步提交时,协调服务器发送同步提交请求至各中转服务器后,各中转服务器基于同步提交请求即可对目标事务执行真正的同步提交操作,使得各中转服务器一起对目标事务进行同步更新,确保了各中转服务器中针对目标事务的同步一致性(如数据一致性、容量一致性等);当所确定的同步处理请求的类型为同步回滚时,协调服务器发送同步回滚请求至各中转服务器后,各中转服务器基于同步回滚请求,均不对目标事务执行真正的同步提交操作而保持原样,也确保了各中转服务器中针对目标事务的同步一致性(如数据一致性、容量一致性等)。
在一些实施例中,协调服务器可通过如下方式发送同步提交请求至各中转服务器,以使各中转服务器基于同步提交请求,针对目标事务执行同步提交操作:当同步指令指示对目标事务中的目标数据进行数据同步时,协调服务器发送同步提交请求至各中转服务器,以使各中转服务器基于同步提交请求,从临时内存中获取对目标数据进行同步得到的同步数据,以将目标数据替换为同步数据,并对目标数据进行备份;当同步指令指示对所述目标事务中的资源容量进行容量同步时,协调服务器发送同步提交请求至各中转服务器,以使各中转服务器基于同步提交请求,从临时内存中获取更新容量列表,以将更新容量列表替换原有容量列表,并对原有容量列表进行备份。
作为示例,当同步指令指示对目标事务中的目标数据进行数据同步、且确定同步处理请求的类型为同步提交时,协调服务器将同步提交请求发送至各中转服务器后,所有的中转服务器基于同步提交请求,获取之前暂存在临时内存中的同步数据,并以同步数据替换原始的目标数据,进而实现了对目标数据执行真正的同步提交操作。当同步指令指示对所述目标事务中的资源容量进行容量同步、且确定同步处理请求的类型为同步提交时,协调服务器将同步提交请求发送至各中转服务器后,所有的中转服务器基于同步提交请求,获取之前暂存在临时内存中的更新容量列表以替换原始容量列表,进而实现了对资源容量执行真正的同步提交操作;如此,所有中转服务器一起对目标事务进行同步更新,确保了各中转服务器中针对目标事务的同步一致性。
在一些实施例中,协调服务器可通过如下方式发送同步回滚请求至各中转服务器,以使各中转服务器基于同步回滚请求,针对目标事务执行同步回滚操作:当同步指令指示对目标事务中目标数据进行数据同步时,发送同步回滚请求至至少两个中转服务器,以使至少两个中转服务器中除同步结果为同步失败的中转服务器之外的其他中转服务器,基于同步回滚请求,从临时内存中删除对目标数据进行同步得到的同步数据;当同步指令指示对所述目标事务中的资源容量进行容量同步时,发送同步回滚请求至各中转服务器,以使至少两个中转服务器中除同步结果为同步失败的中转服务器之外的其他中转服务器,基于同步回滚请求,从临时内存中删除更新容量列表,并保留原有容量列表。
作为示例,当同步指令指示对目标事务中的目标数据进行数据同步、且确定同步处理请求的类型为同步回滚时,协调服务器将同步回滚请求发送至各中转服务器后,所有的中转服务器基于同步回滚请求,将之前暂存在临时内存中的同步数据进行删除,并保留原始的目标数据,这并未对目标数据执行真正的同步提交操作。当同步指令指示对所述目标事务中的资源容量进行容量同步、且确定同步处理请求的类型为同步回滚时,协调服务器将同步回滚请求发送至各中转服务器后,所有的中转服务器基于同步回滚请求,将之前暂存在临时内存中的更新容量列表进行删除,并保留原始容量列表,进而实现了对资源容量未执行真正的同步提交操作;如此,所有中转服务器一起不对目标事务进行同步更新,确保了各中转服务器中针对目标事务的同步一致性。
在一些实施例中,协调服务器发送同步提交请求至各中转服务器之后,将目标事务对应的同步状态更新为提交状态;获取提交状态的持续时长,在持续时长内检测各中转服务器针对同步提交请求的反馈信息;其中,反馈信息,用于反馈相应的中转服务器针对目标事务的同步提交结果,同步提交结果,用于指示针对目标事务的同步提交成功或同步提交失败;当持续时长超过目标时长、且反馈信息反馈至少两个中转服务器中至少存在一个中转服务器的同步提交结果为同步提交失败时,发送同步回滚请求至各中转服务器,以使各中转服务器基于同步回滚请求,针对目标事务执行同步回滚操作。
这里,在确定同步处理请求的类型为同步提交的情况下,协调服务器将同步提交请求发送至各中转服务器后,若在目标时间段内,当协调服务器检测到所有中转服务器中存在部分或全部的中转服务器无法接收到同步提交请求或针对目标事务无法执行真正的同步提交操作时,将发送同步回滚请求至各中转服务器,以使各中转服务器基于同步回滚请求,针对目标事务执行同步回滚操作,如将之前暂存在临时内存中的同步数据进行删除,并保留原始的目标数据,即并未对目标数据执行真正的同步提交操作。又如将之前暂存在临时内存中的更新容量列表进行删除,并保留原始容量列表,进而实现了对资源容量未执行真正的同步提交操作;如此,所有中转服务器一起不对目标事务进行同步更新,确保了各中转服务器中针对目标事务的同步一致性。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。以基于ZooKeeper这一分布式系统的同步方法为例,参见图4,图4为本申请实施例提供的分布式系统中的同步系统的架构示意图,该架构中ZooKeeper集群包括多个协调服务器,逻辑层设置有针对目标事务的多个业务服务器,如游戏大厅服务器lobby1、lobby2,中转层设置有多个中转服务器,如Router1、Router2,功能子模块设置有用于执行各个子功能的应用程序,如othersvr1、othersvr,2、othersvr3。一旦中转服务器出现路由(数据)不一致,将会对有状态的后端服务造成重大影响,例如中转服务器维护的游戏军团服务器(corpsvr)路由列表不一致,会导致同一个军团数据缓存在不同的游戏军团服务器上,最终导致军团数据相互覆盖,进而引起部分数据回档。
本申请实施例利用ZooKeeper的临时节点来确保ZK Node下维护的服务器列表是保活的,并且各个ZK服务器节点维护的服务器列表都是一致的,这是业务层实现数据一致性的基础。那么在ZK数据一致的基础上,需要确保各个router更新数据(如路由列表)的行为也是一致的。
参见图5,图5为本申请实施例提供的ZK路由数据模型的架构示意图,维护路由列表的根节点是/routema,每个模块进程在启动时都会注册临时有序节点到对应的ZK Node下。例如,lobby(游戏大厅服务器)进程启动会在/routemap/lobby注册lobby_x.x.x.x子节点,并且有3个进程实例。同理,也可以看到上述路由表有3个friendsvr进程实例和3个httpproxy进程实例,其中,friendsvr对应好友服务器,httpproxy对应http协议访问代理服务器。
游戏大厅服务器、好友服务器和http协议访问代理服务器均为业务服务器,用于触发针对目标事务的同步指令,例如,游戏大厅服务器已注册lobby_9.0.4.1_0000000001、lobby_9.0.4.2_0000000002、lobby_9.0.4.3_0000000003这三个子节点,在新注册第四个节点(如lobby_9.0.4.4_0000000004)时,需要将新注册的第四个节点的相关信息同步至各中转服务器中,此时,新注册的第四个节点的相关信息即可成为目标事务。
参见图6,图6为本申请实施例提供的分布式系统中的同步系统的架构示意图,其中,分布式系统包括:好友服务器(friendsvr)、协调服务器(ZK集群)、三个中转服务器(router1、router2、router3),接下来以好友服务器(friendsvr)的扩容为例,对本申请实施例提供的分布式系统中的同步方法进行说明,该方法包括:
步骤1:好友服务器发送针对目标节点的同步指令至协调服务器,协调服务器响应于同步指令,将针对目标节点的同步请求发送至各中转服务器。
这里,friendsvr扩容注册新节点到/routemap/friendsvr后,好友服务器触发并发送相应的同步指令(即扩容指令)至协调服务器,协调服务器响应于扩容指令,将针对目标事务的扩容请求(同步请求,用于请求对扩容新注册节点进行扩容)发送至router1、router2、router3。其中,目标节点为新扩容注册的节点(相当于上述的目标事务)。
步骤2:中转服务器响应于同步请求,确定对应同步请求的预同步结果。
其中,预同步结果指示对目标节点的预扩容成功或预扩容失败。中转服务器(如router1、router2、router3)接收到同步请求后,发送get_children_list查询最新的friendsvr列表,当查询拉取到最新的friendsvr列表(即更新容量列表)时,确定预扩容成功的预同步结果;当中转服务器未接收到同步请求或基于同步请求未查询拉取到最新的friendsvr列表时,确定预扩容失败的预同步结果。
需要说明的是,在得到预扩容成功的预同步结果时,将最新的friendsvr列表存放到临时内存prepare_list中,而不是将最新的friendsvr列表替换原有friendsvr列表,故此时并不会更新实际正在使用的路由信息。
步骤3:中转服务器基于预同步结果确定响应信息,以将响应信息返回至协调服务器。
这里,中转服务器更新临时内存后,会给协调服务器发送确认消息(即响应消息)。当中转服务器基于同步请求得到预同步成功的预同步结果时,该中转服务器可注册用于指示预同步成功的预同步节点,如router1在/routechg/friendsvr节点注册一个新的prepare_x.x.x.x节点,表示router1进程获取了最新的friendsvr列表。
参见图7,图7为本申请实施例提供的数据结构示意图,ZKNode Data示例如图7所示,维护状态变更的根节点是/routechg,当router1、router2、router3这三个中转服务器均针对目标节点预同步成功时,分别注册prepare_9.0.20.1、prepare_9.0.20.2、prepare_9.0.20.3节点。
步骤4:协调服务器基于响应信息反馈的各中转服务器的预同步结果,确定同步处理请求的类型,并发送所确定类型的同步处理请求至各中转服务器。
这里,协调服务器接收到响应信息后,对各中转服务器的预同步节点进行检测,以通过预同步节点的数量来反馈预同步成功的中转服务器的数量;当协调服务器检测到的预同步节点的数量与中转服务器的数量相等时,表征所有的中转服务器均基于同步请求得到预同步成功的预同步结果,此时确定同步处理请求的类型为同步提交;当协调服务器检测到的预同步节点的数量小于中转服务器的数量时,表征存在部分中转服务器未基于同步请求得到预同步成功的预同步结果(即至少存在一个中转服务器的预同步结果为预同步失败),此时确定同步处理请求的类型为同步回滚。
也就是说,协调服务器检测/routechg/friendsvr下所有的router节点提交了prepare_x.x.x.x时,协调服务器即可修改/routechg/friendsvr下的节点事务状态state=COMMIT,具体可参见图8,图8为本申请实施例提供的数据结构示意图,当协调服务器检测到router1、router2、router3这三个中转服务器注册prepare_x.x.x.x时,将事务状态由PREPARE(准备)修改为COMMIT(提交)。
步骤5:各中转服务器基于所确定类型的同步处理请求,针对目标事务执行相应类型的同步处理操作。
这里,当各中转服务器检测到事务状态变成COMMIT时,此时的同步处理请求的类型为同步提交,就会执行正式路由变更操作,针对目标节点执行同步提交操作,如从临时内存中获取最新的friendsvr列表以替换原有friendsvr列表,并对原有friendsvr列表进行备份(如备份到backup_list中);同时向/routerchg/friendsvr节点写入commit_x.x.x.x节点。ZKNode Data示例如图9所示,图9为本申请实施例提供的数据结构示意图,当router1、router2、router3这三个中转服务器均针对目标节点执行真正的同步成功时,分别注册commit_9.0.20.1、commit_9.0.20.2、commit_9.0.20.3节点。当协调服务器检测到所有的router节点都注册了commit_x.x.x.x节点,那意味着所有中转服务器都完成了路由切换,此时可设置state=NONE。
当各中转服务器检测到事务状态未变成COMMIT时,此时的同步处理请求的类型为同步回滚,就不会执行正式路由变更操作,而是针对目标节点执行同步回滚操作,如从临时内存中删除暂存的最新的friendsvr列表。
上述对各个中转服务器对应的节点状态的检测是通过协调服务器来实现的,当各个中转服务器对应一个个节点时,路由变更流程需要一个主节点检测/routechg/friendsvr并驱动整个事务状态的变迁,故在一定程度可将协调服务器看作众多中转服务器中的一个,即将协调服务器对应的节点作为主节点。主节点的作用在于检测各router节点是否都提交,如检测router是否都已经提交prepare_x.x.x.x或commit_x.x.x.x。
接下来以检测是否提交prepare_x.x.x.x为例进行说明,参见图10,图10为本申请实施例提供的状态检测方法示意图,该方法包括:在步骤201中,friendsvr扩容触发扩容通知至各个router;在步骤202中,各个router进行prepare阶段处理,注册prepare节点,并触发查询通知给主节点;在步骤203中,主节点查询子节点变化,(如主节点查询/routerchg/friendsvr的子节点变化),当有新的router提交prepare_x.x.x.x时,主节点收到通知并拉取所有的子节点列表;在步骤204中,主节点判断prepare节点数量是否等于router_num,若如果prepare节点数量==router_num,则执行步骤205,在步骤205中,变更事务状态为state=COMMIT;否则,执行步骤206退出流程。
参见图11,图11为本申请实施例提供的主节点的选取视图,为了简化整体架构,降低整体复杂度,主节点可以从router节点中选举得到,当进程启动后向zk集群的/routerlead注册临时顺序节点并监测/routerlead,例如router_x.x.x.x_000000010。初始启动时,router注册新节点触发通知,已经启动的router可以接收到通知并拉取最新的router列表。由于zk顺序节点的序号是自增长,因此我们可以选定序号最小的router成为主节点。后续启动新的router节点由于序号较大自动成为从节点。当主节点故障后,zk节点的临时性确保主节点router_x.x.x.x_00000010会由于心跳超时而被zk集群删掉,此时其他router收到/routerlead子节点变化的通知并拉取最新的router列表,并选定序号最小的router_x.x.x.x_000000011作为主节点,由此完成一轮新的主节点选举。
在实际应用中,当出现极端的网络情况,会导致router节点未收到通知,在此情况下,部分router并未完成投票或者提交操作,整个事务状态出现阻塞。需要有一套超时机制进行状态回滚,具体在不同阶段回滚做法不同:针对步骤1-步骤3:例如当router2未收到通知无法创建prepare_x.x.x.x节点时,主节点检测到state==PREPARE超时,而实际各个router路由并未发生变化。此时,主节点会将state设置成NONE状态,其他router收到事物状态切换为初始时,会做些数据初始化工作,例如清空临时内存中的路由信息。
针对步骤4-步骤5,例如当router2未及时收到通知,会导致router2并未在/routechg/friendsvr创建commit_x.x.x.x节点,此时主节点检测到state==COMMIT停留超过一定时间并且累计的commit_x.x.x.x节点数量小于router_num,就认为事务出现异常,将其切换为state==ROLLBACK。此时,各router节点检测到事务状态为ROLLBACK,进行回滚操作,实际是利用步骤5中的back_list进行路由恢复。当完成回滚操作后,会在/routechg/friendsvr下创建rollback_x.x.x.x节点,如图12所示,图12为本申请实施例提供的数据结构示意图,当router1、router2、router3这三个中转服务器均针对目标节点未执行真正的同步成功(即执行了回滚操作)时,分别注册rollback_9.0.20.1、rollback_9.0.20.2、rollback_9.0.20.3节点。
通过上述方式,本申请实施例在充分利用ZooKeeper的前提下,基于多步骤判断确保各中转服务器之间要么一起切换路由(同步数据),要么都不切换,确保变更事务的行为一致性;如此,若部分中转服务器未收到通知,那么其他收到通知的中转服务器也不会更新路由,使得通知丢失也并不影响各中转服务器中数据的一致性。
下面继续说明本申请实施例提供的分布式系统中的同步装置555的实施为软件模块的示例性结构,在一些实施例中,所述分布式系统包括至少一个协调服务器和至少两个中转服务器,如图2所示,存储在存储器550的分布式系统中的同步装置555中的软件模块可以包括:第一发送模块5551,用于响应于针对目标事务的同步指令,所述协调服务器发送针对所述目标事务的同步请求至各所述中转服务器;响应接收模块5552,用于接收到各所述中转服务器返回的针对所述同步请求的响应信息,所述响应信息用于反馈相应的所述中转服务器针对所述目标事务的预同步结果;其中,所述预同步结果用于指示针对所述目标事务的预同步成功或预同步失败;第二发送模块5553,用于基于所述响应信息反馈的各所述中转服务器的所述预同步结果,确定同步处理请求的类型,并发送所述类型的同步处理请求至各所述中转服务器,以使各所述中转服务器基于所述类型的同步处理请求,针对所述目标事务执行相应类型的同步处理操作。
在一些实施例中,所述第一发送模块,还用于所述协调服务器生成所述同步指令指示的针对所述目标事务的同步请求,并发送所述同步请求至各所述中转服务器,以使各所述中转服务器基于所述同步请求,确定对应所述同步请求的预同步结果,并基于各所述预同步结果确定响应信息,以将所述响应信息返回至所述协调服务器。
在一些实施例中,所述装置还包括中转服务器执行模块,用于当所述同步指令指示对所述目标事务中的目标数据进行数据同步时,各所述中转服务器分别执行以下操作:当所述中转服务器基于所述同步请求对所述目标数据进行同步得到同步数据时,确定用于指示针对所述目标数据的预同步成功的预同步结果,并将所述同步数据存储至临时内存中;当所述中转服务器基于所述同步请求无法对所述目标数据进行同步得到所述同步数据时,确定用于指示针对所述目标数据的预同步失败的预同步结果。
在一些实施例中,所述中转服务器执行模块,还用于当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,各所述中转服务器分别执行以下操作:当所述中转服务器基于所述同步请求查询到更新容量列表时,确定用于指示对所述资源容量的预同步成功的预同步结果,并将所述更新容量列表存储至临时内存中;当所述中转服务器基于所述同步请求无法查询到更新容量列表时,确定用于指示对所述资源容量的预同步失败的预同步结果。
在一些实施例中,所述中转服务器执行模块,还用于当所述预同步结果指示针对所述目标事务预同步成功时,相应的所述中转服务器注册用于指示预同步成功的预同步节点;各所述中转服务器从所述至少两个中转服务器中选取得到主中转服务器;所述主中转服务器检测注册的所述预同步节点的数量,并对所述预同步节点的数量与所述中转服务器的数量进行比较,以基于所述比较结果确定所述响应信息,并将所述响应信息返回至所述协调服务器。
在一些实施例中,所述中转服务器执行模块,还用于各所述中转服务器注册对应的临时顺序节点,得到与所述中转服务器的数量一致的临时顺序节点,所述临时顺序节点的序号是自增长的;根据所述临时顺序节点的序号,从所述数量的临时顺序节点中选取序号最小的第一临时顺序节点,并将选取的所述第一临时顺序节点对应的中转服务器确定为主中转服务器。
在一些实施例中,所述中转服务器执行模块,还用于当选取的所述第一临时顺序节点对应的中转服务器发生故障时,选取与所述第一临时顺序节点相邻的第二临时顺序节点;将选取的所述第二临时顺序节点对应的中转服务器确定为所述主中转服务器,并删除发生故障的所述中转服务器及所述第一临时顺序节点。
在一些实施例中,所述第二发送模块,还用于当所述响应信息反馈各所述中转服务器的所述预同步结果均为预同步成功时,确定同步处理请求的类型为同步提交;当所述响应信息反馈所述至少两个中转服务器中至少存在一个中转服务器的所述预同步结果为预同步失败时,确定所述同步处理请求的类型为同步回滚。
在一些实施例中,所述第二发送模块,还用于当所述同步处理请求的类型为同步提交时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,针对所述目标事务执行同步提交操作;当所述同步处理请求的类型为同步回滚时,发送同步回滚请求至各所述中转服务器,以使各所述中转服务器基于所述同步回滚请求,针对所述目标事务执行同步回滚操作。
在一些实施例中,所述第二发送模块,还用于当所述同步指令指示对所述目标事务中的目标数据进行数据同步时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,从临时内存中获取对所述目标数据进行同步得到的同步数据,以将所述目标数据替换为所述同步数据,并对所述目标数据进行备份;当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,从临时内存中获取更新容量列表,以将所述更新容量列表替换原有容量列表,并对所述原有容量列表进行备份。
在一些实施例中,所述第二发送模块,还用于当所述同步指令指示对所述目标事务中目标数据进行数据同步时,发送同步回滚请求至所述至少两个中转服务器,以使所述至少两个中转服务器中除所述同步结果为同步失败的中转服务器之外的其他中转服务器,基于所述同步回滚请求,从临时内存中删除对所述目标数据进行同步得到的同步数据;当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,发送同步回滚请求至各所述中转服务器,以使所述至少两个中转服务器中除所述同步结果为同步失败的中转服务器之外的其他中转服务器,基于所述同步回滚请求,从临时内存中删除更新容量列表,并保留原有容量列表。
在一些实施例中,所述发送同步提交请求至各所述中转服务器之后,所述装置还包括:第三发送模块,用于将所述目标事务对应的同步状态更新为提交状态;获取所述提交状态的持续时长,在所述持续时长内检测各所述中转服务器针对所述同步提交请求的反馈信息;其中,所述反馈信息,用于反馈相应的所述中转服务器针对所述目标事务的同步提交结果,所述同步提交结果,用于指示针对所述目标事务的同步提交成功或同步提交失败;当所述持续时长超过目标时长、且所述反馈信息反馈所述至少两个中转服务器中至少存在一个中转服务器的所述同步提交结果为同步提交失败时,发送同步回滚请求至各所述中转服务器,以使各所述中转服务器基于所述同步回滚请求,针对所述目标事务执行同步回滚操作。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的分布式系统中的同步方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的分布式系统中的同步方法,例如,如图3示出的方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (16)
1.一种分布式系统中的同步方法,其特征在于,所述分布式系统包括至少一个协调服务器和至少两个中转服务器,所述方法包括:
响应于针对目标事务的同步指令,所述协调服务器发送针对所述目标事务的同步请求至各所述中转服务器;
接收到各所述中转服务器返回的针对所述同步请求的响应信息,所述响应信息用于反馈相应的所述中转服务器针对所述目标事务的预同步结果;
其中,所述预同步结果用于指示针对所述目标事务的预同步成功或预同步失败;
基于所述响应信息反馈的各所述中转服务器的所述预同步结果,确定同步处理请求的类型,并发送所述类型的同步处理请求至各所述中转服务器,以使各所述中转服务器基于所述类型的同步处理请求,针对所述目标事务执行相应类型的同步处理操作。
2.如权利要求1所述的方法,其特征在于,所述协调服务器发送针对所述目标事务的同步请求至各所述中转服务器,包括:
所述协调服务器生成所述同步指令指示的针对所述目标事务的同步请求,并发送所述同步请求至各所述中转服务器,以使
各所述中转服务器基于所述同步请求,确定对应所述同步请求的预同步结果,并基于各所述预同步结果确定响应信息,以将所述响应信息返回至所述协调服务器。
3.如权利要求2所述的方法,其特征在于,所述各所述中转服务器基于所述同步请求,确定对应所述同步请求的预同步结果,包括:
当所述同步指令指示对所述目标事务中的目标数据进行数据同步时,各所述中转服务器分别执行以下操作:
当所述中转服务器基于所述同步请求对所述目标数据进行同步得到同步数据时,确定用于指示针对所述目标数据的预同步成功的预同步结果,并将所述同步数据存储至临时内存中;
当所述中转服务器基于所述同步请求无法对所述目标数据进行同步得到所述同步数据时,确定用于指示针对所述目标数据的预同步失败的预同步结果。
4.如权利要求2所述的方法,其特征在于,所述各所述中转服务器基于所述同步请求,确定对应所述同步请求的预同步结果,包括:
当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,各所述中转服务器分别执行以下操作:
当所述中转服务器基于所述同步请求查询到更新容量列表时,确定用于指示对所述资源容量的预同步成功的预同步结果,并将所述更新容量列表存储至临时内存中;
当所述中转服务器基于所述同步请求无法查询到更新容量列表时,确定用于指示对所述资源容量的预同步失败的预同步结果。
5.如权利要求2所述的方法,其特征在于,所述基于各所述预同步结果确定响应信息,以将所述响应信息返回至所述协调服务器,包括:
当所述预同步结果指示针对所述目标事务预同步成功时,相应的所述中转服务器注册用于指示预同步成功的预同步节点;
各所述中转服务器从所述至少两个中转服务器中选取得到主中转服务器;
所述主中转服务器检测注册的所述预同步节点的数量,并对所述预同步节点的数量与所述中转服务器的数量进行比较,以基于所述比较结果确定所述响应信息,并将所述响应信息返回至所述协调服务器。
6.如权利要求5所述的方法,其特征在于,所述各所述中转服务器从所述至少两个中转服务器中选取得到主中转服务器,包括:
各所述中转服务器注册对应的临时顺序节点,得到与所述中转服务器的数量一致的临时顺序节点,所述临时顺序节点的序号是自增长的;
根据所述临时顺序节点的序号,从所述数量的临时顺序节点中选取序号最小的第一临时顺序节点,并将选取的所述第一临时顺序节点对应的中转服务器确定为主中转服务器。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
当选取的所述第一临时顺序节点对应的中转服务器发生故障时,选取与所述第一临时顺序节点相邻的第二临时顺序节点;
将选取的所述第二临时顺序节点对应的中转服务器确定为所述主中转服务器,并删除发生故障的所述中转服务器及所述第一临时顺序节点。
8.如权利要求1所述的方法,其特征在于,所述基于所述响应信息反馈的各所述中转服务器的所述预同步结果,确定同步处理请求的类型,包括:
当所述响应信息反馈各所述中转服务器的所述预同步结果均为预同步成功时,确定同步处理请求的类型为同步提交;
当所述响应信息反馈所述至少两个中转服务器中至少存在一个中转服务器的所述预同步结果为预同步失败时,确定所述同步处理请求的类型为同步回滚。
9.如权利要求1所述的方法,其特征在于,所述发送所述类型的同步处理请求至各所述中转服务器,以使各所述中转服务器基于所述类型的同步处理请求,针对所述目标事务执行相应类型的同步处理操作,包括:
当所述同步处理请求的类型为同步提交时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,针对所述目标事务执行同步提交操作;
当所述同步处理请求的类型为同步回滚时,发送同步回滚请求至各所述中转服务器,以使各所述中转服务器基于所述同步回滚请求,针对所述目标事务执行同步回滚操作。
10.如权利要求9所述的方法,其特征在于,所述发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,针对所述目标事务执行同步提交操作,包括:
当所述同步指令指示对所述目标事务中的目标数据进行数据同步时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,从临时内存中获取对所述目标数据进行同步得到的同步数据,以将所述目标数据替换为所述同步数据,并对所述目标数据进行备份;
当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,发送同步提交请求至各所述中转服务器,以使各所述中转服务器基于所述同步提交请求,从临时内存中获取更新容量列表,以将所述更新容量列表替换原有容量列表,并对所述原有容量列表进行备份。
11.如权利要求9所述的方法,其特征在于,所述发送同步回滚请求至各所述中转服务器,以使各所述中转服务器基于所述同步回滚请求,针对所述目标事务执行同步回滚操作,包括:
当所述同步指令指示对所述目标事务中目标数据进行数据同步时,发送同步回滚请求至所述至少两个中转服务器,以使所述至少两个中转服务器中除所述同步结果为同步失败的中转服务器之外的其他中转服务器,基于所述同步回滚请求,从临时内存中删除对所述目标数据进行同步得到的同步数据;
当所述同步指令指示对所述目标事务中的资源容量进行容量同步时,发送同步回滚请求至各所述中转服务器,以使所述至少两个中转服务器中除所述同步结果为同步失败的中转服务器之外的其他中转服务器,基于所述同步回滚请求,从临时内存中删除更新容量列表,并保留原有容量列表。
12.如权利要求9所述的方法,其特征在于,所述发送同步提交请求至各所述中转服务器之后,所述方法还包括:
将所述目标事务对应的同步状态更新为提交状态;
获取所述提交状态的持续时长,在所述持续时长内检测各所述中转服务器针对所述同步提交请求的反馈信息;
其中,所述反馈信息,用于反馈相应的所述中转服务器针对所述目标事务的同步提交结果,所述同步提交结果,用于指示针对所述目标事务的同步提交成功或同步提交失败;
当所述持续时长超过目标时长、且所述反馈信息反馈所述至少两个中转服务器中至少存在一个中转服务器的所述同步提交结果为同步提交失败时,发送同步回滚请求至各所述中转服务器,以使各所述中转服务器基于所述同步回滚请求,针对所述目标事务执行同步回滚操作。
13.一种分布式系统中的同步装置,其特征在于,所述分布式系统包括至少一个协调服务器和至少两个中转服务器,所述装置包括:
第一发送模块,用于响应于针对目标事务的同步指令,所述协调服务器发送针对所述目标事务的同步请求至各所述中转服务器;
响应接收模块,用于接收到各所述中转服务器返回的针对所述同步请求的响应信息,所述响应信息用于反馈相应的所述中转服务器针对所述目标事务的预同步结果;
其中,所述预同步结果用于指示针对所述目标事务的预同步成功或预同步失败;
第二发送模块,用于基于所述响应信息反馈的各所述中转服务器的所述预同步结果,确定同步处理请求的类型,并发送所述类型的同步处理请求至各所述中转服务器,以使各所述中转服务器基于所述类型的同步处理请求,针对所述目标事务执行相应类型的同步处理操作。
14.一种电子设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至12任一项所述的分布式系统中的同步方法。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1至12任一项所述的分布式系统中的同步方法。
16.一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时,实现权利要求1至12任一项所述的分布式系统中的同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210570452.8A CN117155955A (zh) | 2022-05-24 | 2022-05-24 | 分布式系统中的同步方法、装置、设备、介质及程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210570452.8A CN117155955A (zh) | 2022-05-24 | 2022-05-24 | 分布式系统中的同步方法、装置、设备、介质及程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117155955A true CN117155955A (zh) | 2023-12-01 |
Family
ID=88904804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210570452.8A Pending CN117155955A (zh) | 2022-05-24 | 2022-05-24 | 分布式系统中的同步方法、装置、设备、介质及程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117155955A (zh) |
-
2022
- 2022-05-24 CN CN202210570452.8A patent/CN117155955A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11899684B2 (en) | System and method for maintaining a master replica for reads and writes in a data store | |
US20240205073A1 (en) | System and method for data replication using a single master failover protocol | |
CN106790595B (zh) | 一种Docker容器主动负载均衡装置及方法 | |
US10248704B2 (en) | System and method for log conflict detection and resolution in a data store | |
US8930312B1 (en) | System and method for splitting a replicated data partition | |
US9489434B1 (en) | System and method for replication log branching avoidance using post-failover rejoin | |
US20080281938A1 (en) | Selecting a master node in a multi-node computer system | |
US10114848B2 (en) | Ensuring the same completion status for transactions after recovery in a synchronous replication environment | |
CN105915391B (zh) | 基于单阶段提交并具备自恢复功能的分布式键值存储方法 | |
CN112148798A (zh) | 应用于分布式系统的数据处理方法及装置 | |
CN112306755B (zh) | 一种基于微前端架构的高可用性实现方法和系统 | |
CN113051110A (zh) | 集群切换方法、装置及设备 | |
US8612799B2 (en) | Method and apparatus of backing up subversion repository | |
CN109753511A (zh) | 一种大数据平台的跨地域实时同步方法及系统 | |
CN111600794B (zh) | 服务器切换方法、终端、服务器及存储介质 | |
JP2013206072A (ja) | データ整合システム、データ整合方法およびデータ整合プログラム | |
CN117155955A (zh) | 分布式系统中的同步方法、装置、设备、介质及程序产品 | |
CN116346834A (zh) | 一种会话同步方法、装置、计算设备及计算机存储介质 | |
CN113515574B (zh) | 一种数据同步方法及装置 | |
JP6169485B2 (ja) | 分散処理システム | |
CN113986881A (zh) | 一种双活及主从同步环境的搭建方法、系统、设备及介质 | |
CN112055057B (zh) | 一种Web系统动态扩展的方法及系统和设备 | |
CN114422567B (zh) | 数据请求的处理方法、装置、系统、计算机设备及介质 | |
CN115297129B (zh) | 数据通信网络建立方法及装置 | |
CN115203215A (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 |