发明内容
本公开实施例提供一种缓存同步方法、装置、电子设备及计算机可读存储介质。
第一方面,本公开实施例中提供了一种缓存同步方法。
具体的,所述缓存同步方法,包括:
在本地服务器上监测到业务系统的第一预设信息发生变更后,利用变更后的所述第一预设信息更新所述本地服务器的第一缓存;其中,所述业务系统分布在包括所述本地服务器的服务器集群中;
向所述服务器集群中的至少一个其他服务器发送第一预设信息变更事件,以利用变更后的所述第一预设信息更新至少一个所述其他服务器的第三缓存;
响应于接收到至少一个所述其他服务器上第三缓存更新成功的事件,利用所述第一缓存更新所述本地服务器的第二缓存。
进一步地,所述缓存同步方法,还包括:
响应于接收到至少一个所述其他服务器上第三缓存更新失败的事件,清空所述第一缓存;或者,
在第一预设时间内未接收到至少一个所述其他服务器上第三缓存更新成功的事件,清空所述第一缓存。
进一步地,所述响应于接收到至少一个所述其他服务器上第三缓存更新成功的事件,利用所述第一缓存更新所述本地服务器的第二缓存之后,还包括:
向至少一个所述其他服务器发送第一预设信息的提交事件,以利用所述第三缓存更新至少一个所述其他服务器的第四缓存。
进一步地,所述缓存同步方法,还包括:
响应于所述服务器集群中至少一个其他服务器发送的第二预设信息变更事件,利用变更后的第二预设信息更新所述第一缓存。
进一步地,所述响应于所述服务器集群中至少一个其他服务器发送的第二预设信息变更事件,利用变更后的第二预设信息更新所述第一缓存之后,还包括:
在更新所述第一缓存失败后,清空所述第一缓存,并向至少一个所述其他服务器发送第一缓存更新失败的事件;或者,
在更新所述第一缓存成功后,向至少一个所述其他服务器发送第一缓存更新成功的事件。
进一步地,所述在更新所述第一缓存成功后,向至少一个所述其他服务器发送第一缓存更新成功的事件之后,还包括:
响应于至少一个所述其他服务器发送的第二预设信息的提交事件,利用所述第一缓存更新所述第二缓存。
第二方面,本公开实施例提供了一种缓存同步装置,包括:
第一更新模块,被配置为在本地服务器上监测到业务系统的第一预设信息发生变更后,利用变更后的所述第一预设信息更新所述本地服务器的第一缓存;其中,所述业务系统分布在包括所述本地服务器的服务器集群中;
变更通知模块,被配置为向所述服务器集群中的至少一个其他服务器发送第一预设信息变更事件,以利用变更后的所述第一预设信息更新至少一个所述其他服务器的第三缓存;
第二更新模块,被配置为响应于接收到至少一个所述其他服务器上第三缓存更新成功的事件,利用所述第一缓存更新所述本地服务器的第二缓存。
进一步地,所述缓存同步装置,还包括:
第一清空模块,被配置为响应于接收到至少一个所述其他服务器上第三缓存更新失败的事件,清空所述第一缓存;或者,
第二清空模块,被配置为在第一预设时间内未接收到至少一个所述其他服务器上第三缓存更新成功的事件,清空所述第一缓存。
进一步地,所述第二更新模块之后,还包括:
提交通知模块,被配置为向至少一个所述其他服务器发送第一预设信息的提交事件,以利用所述第三缓存更新至少一个所述其他服务器的第四缓存。
进一步地,所述缓存同步装置,还包括:
第三更新模块,被配置为响应于所述服务器集群中至少一个其他服务器发送的第二预设信息变更事件,利用变更后的第二预设信息更新所述第一缓存。
进一步地,所述第三更新模块之后,还包括:
更新失败通知模块,被配置为在更新所述第一缓存失败后,清空所述第一缓存,并向至少一个所述其他服务器发送第一缓存更新失败的事件;或者,
更新成功通知模块,被配置为在更新所述第一缓存成功后,向至少一个所述其他服务器发送第一缓存更新成功的事件。
进一步地,所述更新成功通知模块之后,还包括:
第四更新模块,被配置为响应于至少一个所述其他服务器发送的第二预设信息的提交事件,利用所述第一缓存更新所述第二缓存。
所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,缓存同步装置的结构中包括存储器和处理器,所述存储器用于存储一条或多条支持缓存同步装置执行上述第一方面中缓存同步方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。所述缓存同步装置还可以包括通信接口,用于缓存同步装置与其他设备或通信网络通信。
第三方面,本公开实施例提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现第一方面所述的方法步骤。
第四方面,本公开实施例提供了一种计算机可读存储介质,用于存储缓存同步装置所用的计算机指令,其包含用于执行上述第一方面中缓存同步方法所涉及的计算机指令。
本公开实施例提供的技术方案可以包括以下有益效果:
本公开实施例在本地服务器上监测到业务系统的预设信息有变更时,将变更后的预设信息更新至第一缓存中,同时将该预设信息的变更以事件方式通知给服务器集群中的其他服务器,以便其他服务器执行同样的操作,在其他服务器执行成功同样的操作后,再利用第一缓存更新第二缓存,以使第一预设信息的变更在整个服务器集群中生效。本公开实施例通过将预设信息的变更作为一次事件变更,通知服务器集群中的其他服务器做缓存更新,将缓存更新由相关技术中的定时任务的被动更新变成为事件触发的主动更新,提高了缓存更新的实时性;本公开实施例还通过将缓存更新分为两阶段,以避免在更新过程对持久存储介质的依赖,当配置发生错误时能够动态及时的回滚,避免了预设信息更新过程的一次性问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
图1示出根据本公开一实施方式的缓存同步方法的流程图。如图1所示,所述缓存同步方法包括以下步骤S101-S103:
在步骤S101中,在本地服务器上监测到业务系统的第一预设信息发生变更后,利用变更后的所述第一预设信息更新所述本地服务器的第一缓存;其中,所述业务系统分布在包括所述本地服务器的服务器集群中;
在步骤S102中,向所述服务器集群中的至少一个其他服务器发送第一预设信息变更事件,以利用变更后的所述第一预设信息更新至少一个所述其他服务器的第三缓存;
在步骤S103中,响应于接收到至少一个所述其他服务器上第三缓存更新成功的事件,利用所述第一缓存更新所述本地服务器的第二缓存。
本实施例中,业务系统可以是任务在服务器集群中分布式存在的业务系统,服务器集群中的一个或多个服务器可以共享该业务系统,业务人员可以通过服务器集群中的任一服务器对业务系统进行操作,例如变更业务系统中的预设信息等操作,当业务系统的预设信息发生变更时,可以将预设信息同步至业务系统所分布的服务器集群中所有服务器的缓存中,以便各个服务器基于缓存中的预设信息执行相应的业务。第一预设信息和第二预设信息可以为缓存在服务器集群的各个服务器上的业务系统信息,例如一个或多个配置参数。例如,服务器集群上分布的一业务系统为一种较为复杂的算法业务,服务器集群上的多台服务器共同承担复杂算法的一部分运算,在业务人员通过其中一台服务器变更该复杂算法相关的配置参数时,需要将该变更的配置参数同步更新到所有服务器上的本地缓存中,以便所有服务器利用更新后的配置参数执行该复杂算法。
业务系统上的预设信息可以存储在服务器集群的各个服务器上的缓存中,以便各个服务器运行业务系统时能够快速地从缓存中获取业务系统的预设信息,并且业务系统的同一个预设信息在各个服务器上的缓存中保持一致。为解决业务系统的预设信息在各个服务器上实时同步的问题,降低因配置不一致导致业务数据丢失以及配置变更的稳定性的问题,本公开实施例为业务系统的每个预设信息设置两个缓存,主要用于预设信息的可回滚操作;其中一个缓存为服务器当前使用的主缓存,也即服务器在运行业务系统时从该缓存中提取预设信息;另一个缓存为服务器在收到预设信息变更事件时用来更新的从缓存,其主要作用是确保预设信息的可用性,服务器集群中所有相关服务器上变更后的预设信息都更新成功后,则利用该从缓存更新主缓存,也即将从缓存中的内容写入主缓存中,以供服务器使用。
本公开实施例实时监测本地服务器上业务系统预设信息的变更事件。在监测到业务人员或者其他方式通过本地服务器变更业务系统上的第一预设信息后,利用变更后的第一预设信息更新本地服务器上的第一缓存,也即将第一预设信息存储至第一缓存中,进而覆盖第一缓存中原始的内容。第一预设信息成功存储至第一缓存后,本公开实施例会向服务器集群中的其他服务器发送第一预设信息变更事件,其他服务器在接收到第一预设信息变更事件之后,同样会利用变更后的第一预设信息更新其他服务器上的第三缓存,需要说明的是,第一缓存和第三缓存仅为区分不同服务器,它们的作用相同,都是针对第一预设信息设置的,在第一预设信息同步更新时使用。在有多个预设信息的情况下,本地服务器会设置多个第一缓存,而其他服务器上也会设置相应数量的多个第三缓存。
需要说明的是,第一预设信息的变更是直接发生在业务系统的存储空间,例如数据库中,因此本地服务器上监测到第一预设信息的变更事件后,可以从本地服务器获得变更后的第一预设信息,并更新第一缓存;而其他服务器在接收到本地服务器发送的第一预设信息变更事件后,也是从业务系统的存储空间获得变更后的第一预设信息,并更新第三缓存。业务系统的存储空间可以分布在服务器集群中的一台或多台服务器上。
服务器集群中接收到本地服务器发送的第一预设信息变更事件的其他服务器,均会利用变更后的第一预设信息更新第三缓存,并在更新成功后,向本地服务器发送第三缓存更新成功的事件。本地服务器接收到其他服务器发送的第三缓存更新成功的事件后,利用第一缓存更新本地服务器上的第二缓存,也即将第一缓存中的第一预设信息存储至第二缓存中,进而覆盖第二缓存中存储的原始第一预设信息。
需要说明的是,本地服务器上针对每个预设信息均设置有对应的第一缓存和第二缓存。本地服务器在运行业务系统时,需要的情况下使用第二缓存中的预设信息,也即第二缓存是业务系统的预设信息的缓存,第一缓存仅用于预设信息的同步更新。
本公开实施例在本地服务器上监测到业务系统的预设信息有变更时,将变更后的预设信息更新至第一缓存中,同时将该预设信息的变更以事件方式通知给服务器集群中的其他服务器,以便其他服务器执行同样的操作,在其他服务器执行成功同样的操作后,再利用第一缓存更新第二缓存,以使第一预设信息的变更在整个服务器集群中生效。本公开实施例通过将预设信息的变更作为一次事件变更,通知服务器集群中的其他服务器做缓存更新,将缓存更新由定时任务的被动更新变成为事件触发的主动更新,提高缓存更新的实时性;本公开实施例还通过将缓存更新分为两阶段,以避免在更新过程对持久存储介质的依赖,当配置发生错误时能够动态及时的回滚,避免预设信息更新过程的一次性问题。
下面通过一示例性实施例详细说明本公开实施例的实现方式。
如图2所示,本实施例引入了分布式缓存协调器,也即在服务器集群的每台服务器上运行一分布式缓存协调器,不同服务器上的分布式缓存协调器之间具有通信功能。分布式缓存协调器用于存储不同预设信息的各个缓存(1-n)通过注册到分布式缓存协调器中,并接受分布式协调器的管理来实现服务器集群中各个服务器上同一预设信息的一致性。当业务系统的某一预设信息在持久化存储空间(例如数据库)中发生变更时,分布式协调器完成对应的缓存更新。此处的分布式协调器主要有3个功能需要完成:1.服务器集群中某台服务器上的预设信息变更时,该服务器上的分式协调器通知服务器集群中所有的分布式协调器预设信息发生变更;2.服务器集群中所有的服务器接受到预设信息变更事件后,更新对应的缓存,从而达到实时刷新服务器集群所有服务器的缓存;3.分布式协调器广播预设信息变更时采用两阶段方式处理,以支持预设信息更新失败后的动态回滚,降低对持久存储层的依赖,两阶段处理过程包括一阶段和二阶段;一阶段:收到预设信息变更通知,分布式协调器更新对应的第一缓存,如果更新成功,则二阶段提交,如果更新则失败二阶段回滚;二阶段:二阶段提交,第二缓存置为第一缓存,第一缓存清空;二阶段回滚,第二缓存不变更,第一缓存清空。
在本实施例的一个可选实现方式中,所述缓存同步方法还包括:
响应于接收到至少一个所述其他服务器上第三缓存更新失败的事件,清空所述第一缓存;或者,
在第一预设时间内未接收到至少一个所述其他服务器上第三缓存更新成功的事件,清空所述第一缓存。
该可选的实现方式中,本地服务器在向其他服务器发送第一预设信息变更事件后,如果其他服务器未成功更新第三缓存,例如利用第一预设信息更新第三缓存时失败,或者其他服务器没有接收到第一预设信息变更事件,或者其他服务器本身发生异常,导致未成功更新第三缓存的情况下,本地服务器要么接收到其他服务器发生的第三缓存更新失败的事件,要么在规定第一预设时间内未接收到其他服务器第三缓存更新成功的事件,无论哪种情况,都说明其他服务器的第三缓存并未更新成功,这时为了保持服务器集群上各个服务器的缓存中第一预设信息的一致性,本地服务器会清空第一缓存,而不再执行后续操作,这样服务器集群中各个服务器上就第一预设信息的缓存内容能够保持一致。当然,由于业务系统的存储空间中第一预设信息已经被更改,会导致业务系统的第一预设信息与服务器集群上各个服务器的缓存不一致的情况,可以通过其他已有机制来解决,在此不做限制。
在本实施例的一个可选实现方式中,所述步骤S101,即响应于接收到至少一个所述其他服务器上第三缓存更新成功的事件,利用所述第一缓存更新所述本地服务器的第二缓存的步骤之后,所述方法进一步还包括以下步骤:
向至少一个所述其他服务器发送第一预设信息的提交事件,以利用所述第三缓存更新至少一个所述其他服务器的第四缓存。
该可选的实现方式中,第一预设信息发生变更,且本地服务器上的第一缓存和其他服务器上的第三缓存均更新成为变更后的第一预设信息后,本地服务器利用第一缓存更新第二缓存,也即第二缓存也被更新成为变更后的第一预设信息,为了保持服务器集群中各个服务器上缓存的第一预设信息保持一致,本地服务器会向服务器集群中的其他服务器发送第一预设信息的提交事件,其他服务器接收到该提交事件后,会利用第三缓存更新第四缓存。本地服务器上的第二缓存和其他服务器上的第四缓存的作用相同,都是用于缓存第一预设信息,且本地服务器和其他服务器从第二缓存和第四缓存读取并使用第一预设信息。通过这种方式,最终实现了服务器集群上多个服务器对于第一预设信息的缓存同步。
需要说明的是,在一实施例中,如果没有接收到其他服务器的确认信息,也即没有接收到其他服务器利用第三缓存更新第四缓存成功的事件时,可以重复发送第一预设信息的提交事件,以防止其他服务器未接收到该提交事件,多次重试,直到其他服务器更新成功为止。
在本实施例的一个可选实现方式中,所述方法还包括:
响应于所述服务器集群中至少一个其他服务器发送的第二预设信息变更事件,利用变更后的第二预设信息更新所述第一缓存。
该可选的实现方式中,服务器集群上的其他服务器上监测到第二预设信息被变更后,例如业务人员通过其他服务器对业务系统的第二预设信息进行变更,其他服务器会通知本地服务器第二预设信息变更事件,本地服务器可以从业务系统的存储空间例如数据库中提取变更后的第二预设信息,并利用该第二预设信息更新第一缓存。需要说明的是,第一预设信息和第二预设信息可以是同一个预设信息,也可以是不同的预设信息。如果是不同的预设信息,那么利用变更后的第二预设信息更新第二预设信息对应的第一缓存,在物理上与第一预设信息对应的第一缓存不同。通过这种方式,本地服务器也可以根据其他服务器发送的预设信息变更事件同步更新本地缓存。
在本实施例的一个可选实现方式中,所述响应于所述服务器集群中至少一个其他服务器发送的第二预设信息变更事件,利用变更后的第二预设信息更新所述第一缓存的步骤之后,所述方法还包括:
在更新所述第一缓存失败后,清空所述第一缓存,并向至少一个所述其他服务器发送第一缓存更新失败的事件;或者,
在更新所述第一缓存成功后,向至少一个所述其他服务器发送第一缓存更新成功的事件。
该可选的实现方式中,本地服务器接收到其他服务器发送的第二预设信息变更事件后,在利用变更后的第二预设信息更新第一缓存失败后,清空第一缓存,并向该其他服务器发送第一缓存更新失败的事件,以告知其他服务器第二预设信息同步更新失败。如果利用变更后的第二预设信息更新第一缓存成功,则向该其他服务器发送第一缓存更新成功的事件,以告知其他服务器第二预设信息同步更新成功。
在本实施例的一个可选实现方式中,所述在更新所述第一缓存成功后,向至少一个所述其他服务器发送第一缓存更新成功的事件的步骤之后,所述方法还包括以下步骤:
响应于至少一个所述其他服务器发送的第二预设信息的提交事件,利用所述第一缓存更新所述第二缓存。
该可选的实现方式中,本地服务器利用变更后的第二预设信息更新第一缓存成功后,如果接收到其他服务器发送的第二预设信息提交事件,则利用第一缓存更新第二缓存,也即完成第二预设信息的缓存同步。需要说明的是,在一实施例中,如果发生利用第一缓存更新第二缓存失败的情况,则可以重试多次,最终更新成功为止。
下述为本公开装置实施例,可以用于执行本公开方法实施例。
图3示出根据本公开一实施方式的缓存同步装置的结构框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图3所示,所述缓存同步装置包括第一更新模块301、变更通知模块302和第二更新模块303:
第一更新模块301,被配置为在本地服务器上监测到业务系统的第一预设信息发生变更后,利用变更后的所述第一预设信息更新所述本地服务器的第一缓存;其中,所述业务系统分布在包括所述本地服务器的服务器集群中;
变更通知模块302,被配置为向所述服务器集群中的至少一个其他服务器发送第一预设信息变更事件,以利用变更后的所述第一预设信息更新至少一个所述其他服务器的第三缓存;
第二更新模块303,被配置为响应于接收到至少一个所述其他服务器上第三缓存更新成功的事件,利用所述第一缓存更新所述本地服务器的第二缓存。
本实施例中,业务系统可以是任务在服务器集群中分布式存在的业务系统,服务器集群中的一个或多个服务器可以共享该业务系统,业务人员可以通过服务器集群中的任一服务器对业务系统进行操作,例如变更业务系统中的预设信息等操作,当业务系统的预设信息发生变更时,可以将预设信息同步至业务系统所分布的服务器集群中所有服务器的缓存中,以便各个服务器基于缓存中的预设信息执行相应的业务。第一预设信息和第二预设信息可以为缓存在服务器集群的各个服务器上的业务系统信息,例如一个或多个配置参数。例如,服务器集群上分布的一业务系统为一种较为复杂的算法业务,服务器集群上的多台服务器共同承担复杂算法的一部分运算,在业务人员通过其中一台服务器变更该复杂算法相关的配置参数时,需要将该变更的配置参数同步更新到所有服务器上的本地缓存中,以便所有服务器利用更新后的配置参数执行该复杂算法。
业务系统上的预设信息可以存储在服务器集群的各个服务器上的缓存中,以便各个服务器运行业务系统时能够快速地从缓存中获取业务系统的预设信息,并且业务系统的同一个预设信息在各个服务器上的缓存中保持一致。为解决业务系统的预设信息在各个服务器上实时同步的问题,降低因配置不一致导致业务数据丢失以及配置变更的稳定性的问题,本公开实施例为业务系统的每个预设信息设置两个缓存,主要用于预设信息的可回滚操作;其中一个缓存为服务器当前使用的主缓存,也即服务器在运行业务系统时从该缓存中提取预设信息;另一个缓存为服务器在收到预设信息变更事件时用来更新的从缓存,其主要作用是确保预设信息的可用性,服务器集群中所有相关服务器上变更后的预设信息都更新成功后,则利用该从缓存更新主缓存,也即将从缓存中的内容写入主缓存中,以供服务器使用。
本公开实施例实时监测本地服务器上业务系统预设信息的变更事件。第一更新模块301在监测到业务人员或者其他方式通过本地服务器变更业务系统上的第一预设信息后,利用变更后的第一预设信息更新本地服务器上的第一缓存,也即将第一预设信息存储至第一缓存中,进而覆盖第一缓存中原始的内容。第一预设信息成功存储至第一缓存后,本公开实施例中变更通知模块302会向服务器集群中的其他服务器发送第一预设信息变更事件,其他服务器在接收到第一预设信息变更事件之后,同样会利用变更后的第一预设信息更新其他服务器上的第三缓存,需要说明的是,第一缓存和第三缓存仅为区分不同服务器,它们的作用相同,都是针对第一预设信息设置的,在第一预设信息同步更新时使用。在有多个预设信息的情况下,本地服务器会设置多个第一缓存,而其他服务器上也会设置相应数量的多个第三缓存。
需要说明的是,第一预设信息的变更是直接发生在业务系统的存储空间,例如数据库中,因此本地服务器上监测到第一预设信息的变更事件后,可以从本地服务器获得变更后的第一预设信息,并更新第一缓存;而其他服务器在接收到本地服务器发送的第一预设信息变更事件后,也是从业务系统的存储空间获得变更后的第一预设信息,并更新第三缓存。业务系统的存储空间可以分布在服务器集群中的一台或多台服务器上。
服务器集群中接收到本地服务器发送的第一预设信息变更事件的其他服务器,均会利用变更后的第一预设信息更新第三缓存,并在更新成功后,向本地服务器发送第三缓存更新成功的事件。本地服务器的第二更新模块303接收到其他服务器发送的第三缓存更新成功的事件后,利用第一缓存更新本地服务器上的第二缓存,也即将第一缓存中的第一预设信息存储至第二缓存中,进而覆盖第二缓存中存储的原始第一预设信息。
需要说明的是,本地服务器上针对每个预设信息均设置有对应的第一缓存和第二缓存。本地服务器在运行业务系统时,需要的情况下使用第二缓存中的预设信息,也即第二缓存是业务系统的预设信息的缓存,第一缓存仅用于预设信息的同步更新。
本公开实施例在本地服务器上监测到业务系统的预设信息有变更时,将变更后的预设信息更新至第一缓存中,同时将该预设信息的变更以事件方式通知给服务器集群中的其他服务器,以便其他服务器执行同样的操作,在其他服务器执行成功同样的操作后,再利用第一缓存更新第二缓存,以使第一预设信息的变更在整个服务器集群中生效。本公开实施例通过将预设信息的变更作为一次事件变更,通知服务器集群中的其他服务器做缓存更新,将缓存更新由定时任务的被动更新变成为事件触发的主动更新,提高缓存更新的实时性;本公开实施例还通过将缓存更新分为两阶段,以避免在更新过程对持久存储介质的依赖,当配置发生错误时能够动态及时的回滚,避免预设信息更新过程的一次性问题。
下面通过一示例性实施例详细说明本公开实施例的实现方式。
如图2所示,本实施例引入了分布式缓存协调器,也即在服务器集群的每台服务器上运行一分布式缓存协调器,不同服务器上的分布式缓存协调器之间具有通信功能。分布式缓存协调器用于存储不同预设信息的各个缓存(1-n)通过注册到分布式缓存协调器中,并接受分布式协调器的管理来实现服务器集群中各个服务器上同一预设信息的一致性。当业务系统的某一预设信息在持久化存储空间(例如数据库)中发生变更时,分布式协调器完成对应的缓存更新。此处的分布式协调器主要有3个功能需要完成:1.服务器集群中某台服务器上的预设信息变更时,该服务器上的分式协调器通知服务器集群中所有的分布式协调器预设信息发生变更;2.服务器集群中所有的服务器接受到预设信息变更事件后,更新对应的缓存,从而达到实时刷新服务器集群所有服务器的缓存;3.分布式协调器广播预设信息变更时采用两阶段方式处理,以支持预设信息更新失败后的动态回滚,降低对持久存储层的依赖,两阶段处理过程包括一阶段和二阶段;一阶段:收到预设信息变更通知,分布式协调器更新对应的第一缓存,如果更新成功,则二阶段提交,如果更新则失败二阶段回滚;二阶段:二阶段提交,第二缓存置为第一缓存,第一缓存清空;二阶段回滚,第二缓存不变更,第一缓存清空。
在本实施例的一个可选实现方式中,所述缓存同步装置还包括:
第一清空模块,被配置为响应于接收到至少一个所述其他服务器上第三缓存更新失败的事件,清空所述第一缓存;或者,
第二清空模块,被配置为在第一预设时间内未接收到至少一个所述其他服务器上第三缓存更新成功的事件,清空所述第一缓存。
该可选的实现方式中,本地服务器在向其他服务器发送第一预设信息变更事件后,如果其他服务器未成功更新第三缓存,例如利用第一预设信息更新第三缓存时失败,或者其他服务器没有接收到第一预设信息变更事件,或者其他服务器本身发生异常,导致未成功更新第三缓存的情况下,本地服务器要么接收到其他服务器发生的第三缓存更新失败的事件,要么在规定第一预设时间内未接收到其他服务器第三缓存更新成功的事件,无论哪种情况,都说明其他服务器的第三缓存并未更新成功,这时为了保持服务器集群上各个服务器的缓存中第一预设信息的一致性,本地服务器会清空第一缓存,而不再执行后续操作,这样服务器集群中各个服务器上就第一预设信息的缓存内容能够保持一致。当然,由于业务系统的存储空间中第一预设信息已经被更改,会导致业务系统的第一预设信息与服务器集群上各个服务器的缓存不一致的情况,可以通过其他已有机制来解决,在此不做限制。
在本实施例的一个可选实现方式中,所述第二更新模块303之后,还包括:
提交通知模块,被配置为向至少一个所述其他服务器发送第一预设信息的提交事件,以利用所述第三缓存更新至少一个所述其他服务器的第四缓存。
该可选的实现方式中,第一预设信息发生变更,且本地服务器上的第一缓存和其他服务器上的第三缓存均更新成为变更后的第一预设信息后,本地服务器利用第一缓存更新第二缓存,也即第二缓存也被更新成为变更后的第一预设信息,为了保持服务器集群中各个服务器上缓存的第一预设信息保持一致,本地服务器会向服务器集群中的其他服务器发送第一预设信息的提交事件,其他服务器接收到该提交事件后,会利用第三缓存更新第四缓存。本地服务器上的第二缓存和其他服务器上的第四缓存的作用相同,都是用于缓存第一预设信息,且本地服务器和其他服务器从第二缓存和第四缓存读取并使用第一预设信息。通过这种方式,最终实现了服务器集群上多个服务器对于第一预设信息的缓存同步。
需要说明的是,在一实施例中,如果没有接收到其他服务器的确认信息,也即没有接收到其他服务器利用第三缓存更新第四缓存成功的事件时,可以重复发送第一预设信息的提交事件,以防止其他服务器未接收到该提交事件,多次重试,直到其他服务器更新成功为止。
在本实施例的一个可选实现方式中,所述缓存同步装置还包括:
第三更新模块,被配置为响应于所述服务器集群中至少一个其他服务器发送的第二预设信息变更事件,利用变更后的第二预设信息更新所述第一缓存。
该可选的实现方式中,服务器集群上的其他服务器上监测到第二预设信息被变更后,例如业务人员通过其他服务器对业务系统的第二预设信息进行变更,其他服务器会通知本地服务器第二预设信息变更事件,本地服务器可以从业务系统的存储空间例如数据库中提取变更后的第二预设信息,并利用该第二预设信息更新第一缓存。需要说明的是,第一预设信息和第二预设信息可以是同一个预设信息,也可以是不同的预设信息。如果是不同的预设信息,那么利用变更后的第二预设信息更新第二预设信息对应的第一缓存,在物理上与第一预设信息对应的第一缓存不同。通过这种方式,本地服务器也可以根据其他服务器发送的预设信息变更事件同步更新本地缓存。
在本实施例的一个可选实现方式中,所述第三更新模块之后,所述缓存同步装置还包括:
更新失败通知模块,被配置为在更新所述第一缓存失败后,清空所述第一缓存,并向至少一个所述其他服务器发送第一缓存更新失败的事件;或者,
更新成功通知模块,被配置为在更新所述第一缓存成功后,向至少一个所述其他服务器发送第一缓存更新成功的事件。
该可选的实现方式中,本地服务器接收到其他服务器发送的第二预设信息变更事件后,更新失败通知模块在利用变更后的第二预设信息更新第一缓存失败后,清空第一缓存,并向该其他服务器发送第一缓存更新失败的事件,以告知其他服务器第二预设信息同步更新失败。如果利用变更后的第二预设信息更新第一缓存成功,更新成功通知模块则向该其他服务器发送第一缓存更新成功的事件,以告知其他服务器第二预设信息同步更新成功。
在本实施例的一个可选实现方式中,所述更新成功通知模块之后,所述缓存同步装置还包括:
第四更新模块,被配置为响应于至少一个所述其他服务器发送的第二预设信息的提交事件,利用所述第一缓存更新所述第二缓存。
该可选的实现方式中,本地服务器利用变更后的第二预设信息更新第一缓存成功后,如果接收到其他服务器发送的第二预设信息提交事件,第四更新模块则利用第一缓存更新第二缓存,也即完成第二预设信息的缓存同步。需要说明的是,在一实施例中,如果发生利用第一缓存更新第二缓存失败的情况,则可以重试多次,最终更新成功为止。
图4是适于用来实现根据本公开实施方式的缓存同步方法的电子设备的结构示意图。
如图4所示,电子设备400包括中央处理单元(CPU)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储部分408加载到随机访问存储器(RAM)403中的程序而执行上述图1所示的实施方式中的各种处理。在RAM403中,还存储有电子设备400操作所需的各种程序和数据。CPU401、ROM402以及RAM403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
以下部件连接至I/O接口405:包括键盘、鼠标等的输入部分406;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分407;包括硬盘等的存储部分408;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。驱动器410也根据需要连接至I/O接口405。可拆卸介质411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器410上,以便于从其上读出的计算机程序根据需要被安装入存储部分408。
特别地,根据本公开的实施方式,上文参考图1描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行图1的方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分409从网络上被下载和安装,和/或从可拆卸介质411被安装。
附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。