掌桥专利:专业的专利平台
掌桥专利
首页

基于异地多活系统的数据处理方法、相关设备及存储介质

文献发布时间:2023-06-19 11:32:36


基于异地多活系统的数据处理方法、相关设备及存储介质

技术领域

本申请涉及计算机技术领域,尤其涉及一种基于异地多活系统的数据处理方法、装置及代理设备、存储介质。

背景技术

随着互联网的发展,对于服务的稳定性和实时性的要求越来越高;目前业内也逐渐开始使用异地多活技术,以实现承载业务服务的数据服务器发生故障时也能对外提供服务。其中,异地多活是一种为保证服务高可用的一种服务部署方式,其可通过将服务存放在不同地区的方式,来规避服务器风险;“活”是相对于冷备份而言的,冷备份是备份全量数据,平时不支撑业务需求,只有在主机房(或称为主服务器)出现故障的时候才会切换到备用机房,而“多活”则是指这些机房(服务器)在日常的业务中也需要走流量,做业务支撑。目前,在涉及异地多活的应用场景中,如何更好地进行数据存储成为研究热点。

发明内容

本申请实施例提供了一种基于异地多活系统的数据处理方法、相关设备及存储介质,可以更好地对异地多活场景中所涉及的数据进行处理。

一方面,本申请实施例提出了一种基于异地多活系统的数据处理方法,所述异地多活系统包括多个代理设备、每个代理设备对应的缓存空间以及多个数据库;其中,任意两个代理设备所处的地区互不相同;所述方法由所述多个代理设备中的目标代理设备执行,所述方法包括:

接收待存储的目标数据,并将所述目标数据缓存至所述目标代理设备对应的目标缓存空间;

在将所述目标数据成功缓存至所述目标缓存空间后,向其他代理设备广播第一通知消息,所述第一通知消息用于通知:若所述其他代理设备对应的其他缓存空间中存在所述目标数据,则删除所述其他缓存空间中的所述目标数据;

将所述目标数据存储至所述多个数据库中的目标数据库,并在将所述目标数据成功存储至所述目标数据库后,在所述目标数据库和其他数据库之间执行数据同步处理。

一方面,本申请实施例提供了一种基于异地多活系统的数据处理装置,所述异地多活系统包括多个代理设备、每个代理设备对应的缓存空间以及多个数据库;其中,任意两个代理设备所处的地区互不相同;所述装置运行于所述多个代理设备中的目标代理设备中,所述装置包括:

接收模块,用于接收待存储的目标数据,并将所述目标数据缓存至所述目标代理设备对应的目标缓存空间;

通知模块,用于在将所述目标数据成功缓存至所述目标缓存空间后,向其他代理设备广播第一通知消息,所述第一通知消息用于通知:若所述其他代理设备对应的其他缓存空间中存在所述目标数据,则删除所述其他缓存空间中的所述目标数据;

处理模块,用于将所述目标数据存储至所述多个数据库中的目标数据库,并在将所述目标数据成功存储至所述目标数据库后,在所述目标数据库和其他数据库之间执行数据同步处理。

一方面,本申请实施例提供了一种代理设备,所述代理设备包括处理器和存储器,所述处理器与所述存储器相互连接,其中,所述存储器用于存储计算机程序指令,所述处理器被配置用于执行该计算机程序指令实现上述数据处理方法中的部分或全部步骤。

一方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序指令,所述计算机程序指令被处理器执行时,用于执行上述数据处理方法中的部分或全部步骤。

本申请实施例中,代理设备接收待存储的目标数据,并将目标数据缓存至目标代理设备对应的目标缓存空间,在将目标数据成功缓存至目标缓存空间后,向其他代理设备广播第一通知消息,将目标数据存储至多个数据库中的目标数据库,并在将目标数据成功存储至目标数据库后,在目标数据库和其他数据库之间执行数据同步处理。由此可见,通过实施上述方案,可以在实现异地多活系统高可用性的同时,保证数据在缓存时的多地唯一性以及数据在数据库中的一致性,从而更好地对异地多活场景中所涉及的数据进行处理。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种异地多活系统的结构示意图;

图2为本申请实施例提供的一种基于异地多活系统的数据处理方法的流程示意图;

图3为本申请实施例提供的一种基于异地多活系统的数据处理场景的示意图;

图4a为本申请实施例提供的一种数据预览界面的示意图;

图4b为本申请实施例提供的另一种数据预览界面的示意图;

图4c为本申请实施例提供的又一种数据预览界面的示意图;

图5为本申请实施例提供的另一种基于异地多活系统的数据处理方法的流程示意图;

图6为本申请实施例提供的另一种基于异地多活系统的数据处理场景的示意图;

图7为本申请实施例提供的又一种基于异地多活系统的数据处理场景的示意图;

图8为本申请实施例提供的一种解决数据冲突场景的示意图;

图9a为本申请实施例提供的一种数据冲突场景的示意图;

图9b为本申请实施例提供的另一种数据冲突场景的示意图;

图9c为本申请实施例提供的又一种数据冲突场景的示意图;

图10为本申请实施例提供的另一种解决数据冲突场景的示意图;

图11为本申请实施例提供的一种基于异地多活系统的故障解决的示意图;

图12为本申请实施例提供的一种基于异地多活系统的数据处理装置的结构示意图;

图13为本申请实施例提供的一种代理设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

为了能够更好地实现异地多活,本申请实施例首先提出了一种全新的异地多活系统以及基于该异地多活系统的数据处理方案;以实现使得在保证异地多活系统高可用性的同时,可更好地对异地多活场景中所涉及的数据进行数据存储、数据修改等一系列的数据处理,从而为用户提供数据如存储在本地的交互体验感。请参见图1,本申请实施例所提出的异地多活系统按照自顶向下的顺序,可依次包括:接入网关层、业务接入层、业务服务层、数据代理层、数据缓存层和数据存储层。

其中,业务接入层中可包括M个接入网关设备,所谓的接入网关设备是指通过协议转换来实现网络互连的设备,具体可以是sparta网关(腾讯公司研发的统一接入网关),或者其他网关,对此不作限制。业务接入层中可包括M个接入服务设备,一个接入服务设备可与接入网关层中的一个接入网关设备进行通信对应;该接入服务设备是指可通过光纤、双绞线、同轴电缆、无线接入技术等传输介质来允许用户终端访问业务服务层的设备。业务服务层中可包括M个业务服务设备,一个业务服务设备与业务接入层中的一个业务接入设备进行通信;该业务服务设备是指可为用户终端提供一种或多种在线服务的设备,如账号、内容、用户行为等各式各样的在线服务。

数据代理层中可包括M个代理设备(又称DataProxy)、数据缓存层中可包括M个缓存空间、数据存储层可包括N个数据库(data base,DB)。其中,M和N的取值均为大于或等于2的正整数,且M和N的取值可相同或不同,对此不作限制;并且,一个代理设备对应一个缓存空间,任意两个代理设备所处的地区互不相同。此处所提及的任一代理设备可用于代理数据缓存层的缓存空间和数据底层的数据库,以实现数据在缓存层的一致性和数据底层的一致性,以及对外统一本地操作体验。其中,上述所提及的缓存空间可以是非关系型数据库(NOSQL),如Redis数据库(Remote Dictionary Server);数据存储层中的任一数据库可以是关系型数据库(SQL),对此不作限制。

其中,上述的异地多活系统可以保证服务高可用性和规避风险,也就是说,当某个地区的缓存空间发生故障时,可以将其他地区的缓存空间中的数据同步到该地区的缓存空间中,或者是让该地区的用户直接访问其他地区的缓存空间,以及,当某个数据库发生故障时,可以将其他数据库中的数据同步到该数据库中,或者是让用户直接访问其他数据库。其中,高可用(High Availability)是指该系统可以减少不能提供服务的停工时间,从而保证服务的高可用性。例如,如图1,当为位于D地的数据库发生故障时,可以使用位于E地的数据库中的灾备数据,也就是说,位于E地的数据库是位于D地的数据库的灾备数据库,即通过异地容灾可以解决发生故障的数据库不能对外提供服务的问题。其中,灾备数据,即当存放数据的服务器发生故障导致数据不可用时,使用的备份数据。由于该异地多活系统为跨城异地多活,因此灾备也是跨城灾备级别,进而可以有效地应对城市级灾难,例如地震等。可以理解的是,本申请实施例可以实现数据在多个缓存空间中的一致性和多个数据库中的一致性,因此任意两个缓存空间互为灾备缓存空间,任意两个数据库互为灾备数据库。

需要说明的是,图1只是示例性地表征本申请实施例所提出的异地多活系统的系统架构,并不对此进行限定。例如,图1只是示例性的展示了A、B、C三地的缓存空间和D、E两地的数据库;但实际部署中,对于缓存空间的数量可不局限于3个,数据库的数量也可不局限于2个。又如,在其他实施例中,该异地多活系统还可以包括内部管理系统,该内部管理系统可以是OMS(Order Management System,订单管理系统)、CMS(Content ManagementSystem,内容管理系统)、TMS(Transportation Management System,运输管理系统)。此情况下,异地多活系统中的代理设备的数量可以多于业务服务设备的数量,即代理设备的数量可以不局限于M个;内部管理系统产生的系统数据可由一个代理设备根据具体的业务需求选择缓存在数据缓存层的缓存空间中,或者是存储在数据存储层的数据库中。

并且,上述提及的任一设备(如代理设备、业务服务设备等)均可以是服务器;此处所提及的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,等等。当任一设备均是云服务器时,本申请实施例所提出的异地多活系统还可作为用于实现云存储(cloud storage)的分布式云存储系统(存储系统);所谓的云存储是在云计算概念上延伸和发展出来的一个新的概念,该存储系统是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。

另外,上述所提及的各个代理设备可以被部署在同一个国家中的不同城市中,即代理设备所处的地区是以城市为单位进行划分的;在此情况下,本申请实施例所提出的异地多活系统可以理解为是一个跨城级别的异地多活系统。或者,上述所提及的各个代理设备可以被部署在同一城市中的不同地点,即代理设备所处的地区是以具体地点为单位进行划分的;在此情况下,本申请实施例所提出的异地多活系统可以理解为是一个同城级别的异地多活系统。又或者,上述所提及的各个代理设备还可以被部署在不同国家中,即代理设备所处的地区是以国家为单位进行划分的;在此情况下,本申请实施例所提出的异地多活系统可以理解为是一个跨国级别的异地多活系统。为便于阐述,后续所提及的异地多活系统均以跨城级别的异地多活系统为例进行说明。

在具体实现中,上述所提及的异地多活系统的运行原理如下:当用户通过终端设备使用在线服务时,接入网关层会根据终端设备与各个接入网关设备之间的距离,就近为终端设备选择一个接入网关设备,使得被选择的接入网关设备可通过协议转换实现终端设备和服务接入层中的一个接入服务设备进行互连。此时,接入服务设备可根据用户使用的在线服务,接入业务服务层的某个业务服务设备,使得被接入的业务服务设备为用户提供在线服务,并将提供在线服务过程中所产生的需要存储的数据发送至对应的代理设备,由该代理设备基于本申请实施例所提出的数据处理方案对该数据进行处理。其中,上述所提及的终端设备可以包括但不限于:智能手机、平板电脑、膝上计算机以及台式电脑等等。

具体的,该数据处理方案的方案原理大致如下:当代理设备接收到待存储的目标数据时,可直接采用缓存多地唯一的策略将该目标数据存储至该代理设备对应的缓存空间,然后将按照DB数据一致性的策略该目标数据存储至数据存储层中的各个数据库中,以保证各个数据库之间的数据一致性。或者,代理设备在接收到待存储的目标数据后,也可先确定是否需将该目标数据存储于数据库中;若需要,则再执行采用缓存多地唯一的策略将该目标数据存储至该代理设备对应的缓存空间的步骤;否则,则采用与目标数据适配的缓存一致性策略,将该目标数据缓存至数据缓存层中的各个缓存空间中,以保证各个缓存空间之间的数据一致性。进一步的,当发生多地同时修改目标数据时,还可以采用不同的方式解决多地数据冲突问题。通过本技术方案对数据进行处理可以实现数据的一致性和实时性,以及高可用性,以此提高用户体验感。

需要说明的是,本申请实施例所提出的数据处理方案可应用于各式各样的业务场景中。例如可将该数据处理方案应用在任一分布式业务场景,该分布式业务场景可以是任一读多写少型的业务场景,该读多写少型的业务场景即用户读请求次数大于用户写请求次数的业务场景,如知识科普、资讯、导购类的业务场景;又如,可将该数据处理方案应用在任一流水单据型的业务场景,如电商交易、账单流水类的业务场景。再如,还可将该数据处理方案应用在任一状态依赖型的业务场景,如银行账务类的业务场景,等等。本申请实施例在此对应用场景不做限制,并且随着系统架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。

基于上述异地多活系统和数据处理方案的相关描述,本申请实施例提出了一种基于异地多活系统的数据处理方法。由前述可知,该异地多活系统可包括多个代理设备、每个代理设备对应的缓存空间以及多个数据库;在具体实现中,该数据处理方法可以由多个代理设备中的目标代理设备执行。参见图2所示,该基于异地多活系统的数据处理方法可以包括以下步骤S201-S203:

S201、接收待存储的目标数据,并将目标数据缓存至目标代理设备对应的目标缓存空间。

其中,待存储的目标数据可以是通过终端设备响应用户操作而进行写操作产生的数据;例如,用户通过终端发布评论从而产生的数据。或者,待存储的目标数据还可以是内部管理系统产生的数据;例如,在新闻资讯类业务场景中,为用户所推荐显示的新闻词条、热点等对应的数据,等等。随着目标数据的不同,本申请实施例所提及的终端设备也可随之不同。具体的,当目标数据为通过终端设备进行写操作产生的数据时,本申请实施例所提及的目标代理设备可以是根据距离就近接入的代理设备;例如,根据终端与多个代理设备所在的地区的距离,选择距离最近的地区中的代理设备作为就近接入的代理设备。当目标数据为内部管理系统产生的数据时,目标代理设备可以是指定的代理设备。

目标代理设备在接收到待存储的目标数据后,可将目标数据缓存至目标代理设备对应的目标缓存空间中,此处的目标缓存空间可以是目标代理设备对应的缓存空间。但需要说明的是,当目标代理设备对应的缓存空间发生故障无法提供服务时,目标缓存空间还可以是指定的其他缓存空间;例如,目标代理设备对应缓存空间A,其他缓存空间为缓存空间B,则默认目标代理设备的目标缓存空间为缓存空间A,若此时缓存空间A发生故障,则可指定缓存空间B为目标代理设备的目标缓存空间。

在一种实施方式中,针对目标数据所采用的缓存方式可以是直接存储方式;即将目标数据缓存至目标代理设备对应的目标缓存空间的具体实施方式可以是:直接将目标数据存储至目标代理设备对应的目标缓存空间中。在一种实施方式中,针对目标数据所采用的缓存方式可以是键值对缓存(key-value缓存);即将目标数据缓存至目标代理设备对应的目标缓存空间的具体实施方式可以是:解析目标数据,得到目标数据中包含的标识以及数据内容;将解析得到的标识作为key,数据内容作为key对应的value,从而将该key和对应的value缓存至目标缓存空间中。例如,目标数据是进行注册操作从而生成的数据,解析目标数据得到的标识为用户ID,数据内容为用户密码、用户信息等;则可将该用户ID作为key,用户密码、用户信息等内容作为value,然后将该key和对应的value缓存至目标缓存空间中。

S202、在将目标数据成功缓存至目标缓存空间后,向其他代理设备广播第一通知消息。

其中,其他代理设备是指:异地多活系统中除目标代理设备以外的代理设备;其他代理设备的数量可以为一个或多个,对此不作限制。第一通知消息是根据目标数据得到的,该第一通知消息用于通知:若其他代理设备对应的其他缓存空间中存在该目标数据,则删除其他缓存空间中的目标数据。通过向其他代理设备广播第一通知消息,可实现该目标数据在多个地区的缓存区中具有唯一性,即可实现只有处于目标地区的目标代理设备所对应的目标缓存区中包括该目标数据;从而使得后续在将该目标数据存储至数据库时,可保证数据存储操作的唯一性。可选的,第一通知消息可以是在目标数据成功缓存至目标缓存空间后生成的,也可以是在目标数据缓存至目标缓存空间时异步生成的。可选的第一通知消息可以是通过消息队列进行广播的,该消息队列可以是CKafka、Kafka等。

S203、将目标数据存储至多个数据库中的目标数据库,并在将目标数据成功存储至目标数据库后,在目标数据库和其他数据库之间执行数据同步处理。

其中,目标数据库可以是在多个数据库中的任一数据库。或者,该目标数据库也可以是多个数据库中的指定数据库;例如,当多个数据库之间存在主从关系时,该目标数据库可以是多个数据库中的主数据库。在一种实施方式中,目标数据可以是由目标代理设备直接存储至目标数据库的。再一种实施方式中,目标数据也可以是由目标代理设备通过为目标代理设备所配置的目标数据管理组件存储至目标数据库;此处的目标数据管理组件可以是一个异步写程序,如FlushRoutine(腾讯公司研发的一种异步写程序),通过异步写入数据可以在一定程度上减小延时。可以理解的是,该目标数据管理组件可以位于目标代理设备内部,也可以位于目标代理设备外部,对此不作限制。在此情况下,将目标数据存储至多个数据库中的目标数据库的具体实施方式可以是:目标代理设备可先生成第二通知消息,并将该第二通知消息发送给目标数据管理组件,以通知目标数据管理组件将目标数据存储至目标数据库中。

需要说明的是,将目标数据存储至多个数据库中的目标数据库这一步骤,可以是在广播第一通知消息之前执行的,也可以是在广播第一通知消息之后执行的,还可以是在广播第一通知消息的同时执行的,本申请实施例在此不作限定。并且,当其他代理设备也被配置有其他数据管理组件时,前述步骤S202所提及的“向其他代理设备广播第一通知消息”也可以是指:通过消息队列向其他代理设备对应的其他数据管理组件广播第一通知消息,使得其他数据管理组件接收到针对目标数据的第一通知消息时,删除对应的其他缓存空间的目标数据。其中,第二通知消息可以是和第一通知消息同时生成的,也可以是在第一通知消息之前生成的,还可以是在第一通知消息之后生成的,本申请实施例在此不做限制。

在将目标数据成功存储至目标数据库后,目标代理设备可在目标数据库和其他数据库之间执行数据同步处理;其中,其他数据库是指多个数据库中除所述目标数据库以外的数据库,其他数据库的数量可以是一个或多个,对此不作限制。目标数据库和其他数据库之间的数据是基于binlog(数据库写执行日志)同步的,以此实现数据写入的唯一性和数据库之间的数据一致性。由于数据写入的数据库是目标数据库,再由目标数据库将数据同步至其他数据库,因此其他数据库可作为目标数据库的灾备数据库,当目标数据库发生故障时,可由目标代理设备将流量切至其他数据库,即目标代理设备接收到请求时,访问其他数据库。

在一种实施方式中,为了验证其他数据库同步的数据是可用且正确的,可以将其他地区的读流量引入其他数据库,当其他地区的代理设备接收到读请求时,可以访问对应的其他数据库,从而实现有线上业务时刻验证其他数据库的数据是否正确。例如,如图3所示,,当代理设备B接收到写入的目标数据时,将目标数据缓存至缓存空间B,并异步生成第一通知消息和第二通知消息,将目标数据缓存成功后,通过消息队列将第一通知消息广播给其他地区的数据管理组件,即数据管理组件A、C,以及将第二通知消息发送至数据管理组件B,数据管理组件A、C接收到第一通知消息时,将删除各自的缓存空间中的目标数据,即缓存空间A、C,数据管理组件B接收到第二通知消息时将目标数据存储至数据库A,再将目标数据从目标数据库同步至数据库B。可选的,可以将地区A的读流量引入数据库B,即代理设备A接收到地区A的读请求时,可以访问数据库B,并返回结果。此时,数据库A为读写数据库,数据库B为读数据库。

在一种实施方式中,由于数据库同步具有一定的延时,当通过终端进行写操作后,在生成的目标数据成功缓存至目标缓存空间或成功存储至目标数据库之前,为了避免通过终端读到脏数据,即未更新的数据,本申请的技术方案可以执行终端假显操作,即当通过终端进行写操作后,终端可以立即显示写操作的结果,同时代理设备接收到该写操作生成的数据,并将该生成的数据进行处理,代理设备对该生成的数据进行处理完成后,其他地区可以通过读请求查询到该写操作的结果。例如,如图4a所示,用户A通过终端A在评论区发表了评论后终端A可以立即显示此条评论,而此条评论相应的数据未由代理设备进行处理,此时用户B通过终端B无法在评论区查看此条评论,如图4b所示,当代理设备对数据处理完成后,用户B可通过终端B在评论区查看此条评论,如图4c所示。

本申请实施例中,代理设备接收待存储的目标数据,并将目标数据缓存至目标代理设备对应的目标缓存空间,在将目标数据成功缓存至目标缓存空间后,向其他代理设备广播第一通知消息,以使得其他代理设备可将对应的其他缓存空间的目标数据进行删除,从而保证存储至数据库中的数据在缓存时的多地唯一性,目标代理设备将目标数据存储至多个数据库中的目标数据库,并在将目标数据成功存储至目标数据库后,在目标数据库和其他数据库之间执行数据同步处理,以便于保证多个数据库之间的数据一致性。由此可见,通过实施上述方法,可以更好地对异地多活场景中所涉及的数据进行数据处理。

请参见图5,是本申请实施例提出的另一种基于异地多活系统的数据处理方法,该方法可以由上述提及的目标代理设备来执行。如图5所示,该基于异地多活系统的数据处理方法可以包括以下步骤S501-S506:

S501、接收待存储的目标数据。

S502、获取目标数据的存储标识。

在具体实施过程中,目标代理设备可接收关于目标数据的数据存储请求,该数据存储请求可携带目标数据的存储标识;那么,目标代理设备便可从数据存储请求中解析得到该存储标识。其中,存储标识用于指示是否需将目标数据存储至数据库中;若存储标识指示需将目标数据存储至数据库中,则执行步骤S503-S505,若存储标识指示无需将目标数据存储至数据库中,则执行步骤S506。其中,存储标识可根据以下任一种方式决定:

在一种实施方式中,存储标识可以根据目标数据的特性决定。由于本申请实施例的数据库可以使用SQL数据库,缓存空间可以使用NOSQL数据库,因此可以根据目标数据是否可以满足SQL的关系特性来确定是否将该目标数据存储至数据库中。例如,对于一个发言贴的数据进行存储,数据包括主键ID、发言的对象aid、发言内容content,用户ID等,对于发言内容content由于是大文本字段,不适合在数据库中用where content=”进行查询,因此可以将主键ID、发言的对象aid、用户ID等数据存储至数据库中,发言内容content缓存至缓存空间中。

在一种实施方式中,存储标识可以根据目标数据的请求次数决定。例如,针对目标数据有大量写请求时,即对目标数据有频繁更新操作时,可以无需将目标数据存储至数据库中。或者,针对目标数据有大量读请求时,即对目标数据有频繁查询操作时,可以无需将目标数据存储至数据库中。可选的,目标数据的存储标识可以由技术人员根据实际的业务场景指定。

S503、若存储标识指示需将目标数据存储至数据库中,则将目标数据缓存至目标代理设备对应的目标缓存空间。

在本发明实施例中,步骤S503的具体实施方式可以参考步骤S201的相关描述,此处不再赘述。在一种实施方式中,在成功将目标数据缓存至目标代理设备对应的目标缓存空间后,可直接执行步骤S504。

在一种实施方式中,考虑到目标缓存空间的空间有限,而目标数据可能是与用户无关的一些不重要的数据,若长期缓存该目标数据,则会造成空间资源的占用和浪费。因此,当目标数据与用户无关时,可在缓存目标数据时,可对目标数据使用过期时间策略以实现后续自动清理掉该目标数据。基于此,在确定需将目标数据存储至数据库之后,目标代理设备还可先获取目标数据的目标数据类别,该目标数据类别可以包括用户数据类别或者非用户数据类别。其中,代理设备可以通过解析目标数据是否携带用户ID进而确定目标数据的目标数据类别,即,若目标数据携带用户ID,则表明该目标数据的目标数据类别为用户数据类别;若目标数据为携带用户ID,则表明该目标数据的目标数据类别为非用户数据类别。

若目标数据类别为用户数据类别,则目标代理设备可执行步骤S504-S405。可以理解的是,此时为用户数据类别的目标数据在多地缓存具有唯一性,由于用户更多是处于读多写少状态,且更多是处于固定地区,极少会在不同地区频繁进行写操作,因此保证目标数据缓存在用户所在地区的缓存空间,而删除异地缓存空间中的目标数据,可以降低缓存空间的内存和功耗。若目标数据类别为非用户数据类别,则为目标数据设置存活时长(即过期时间),并在将目标数据成功缓存至目标缓存空间后,统计目标数据在目标缓存空间中的缓存时长,在确定缓存时长等于或大于存活时长时(即目标数据过期),在目标缓存空间中删除目标数据。需要说明的是,设置目标数据的存活时长可以是在将目标数据缓存至目标缓存空间时执行的,也可以是在将目标数据缓存至目标缓存空间之后执行的,对此不作限制。当目标数据的目标数据类别为非用户数据类别的情况下,目标代理设备仍会将目标数据存储至目标数据库,即目标代理设备仍会执行步骤S505。

可选的,在目标缓存空间中删除目标数据可以是代理设备定期遍历缓存空间中的所有数据,在确定该目标数据的缓存时长等于或大于存活时长时,生成第三通知消息,并通过消息队列发送至对应的数据管理组件,以使得数据管理组件删除目标缓存空间中的目标数据。或者,还可以是,当代理设备接收到针对目标数据的读请求或写请求时,检查该目标数据的缓存时长是否等于或大于存活时长,若该目标数据过期,则通知对应的数据管理组件对该目标数据进行删除。

S504、在将目标数据成功缓存至目标缓存空间后,向其他代理设备广播第一通知消息。

S505、将目标数据存储至多个数据库中的目标数据库,并在将目标数据成功存储至目标数据库后,在目标数据库和其他数据库之间执行数据同步处理。

S506、若存储标识指示无需将目标数据存储至数据库中,则获取与目标数据适配的缓存一致性策略,并采用缓存一致性策略将目标数据缓存至目标缓存空间和其他缓存空间中。

其中,与目标数据所适配的缓存一致性策略可以包括:多地强一致性策略,或者最终一致性策略。所谓的多地强一致性策略是指:当目标数据被成功缓存至目标缓存空间和其他缓存空间后,该目标数据才被允许访问的策略,即任意时刻任意节点,所有缓存空间中针对目标数据的读请求返回的结果是一致的。所谓的最终一致性策略是指:只要目标数据被成功缓存在目标缓存空间后,该目标数据便可被允许访问,无需等待其他代理设备的成功缓存目标数据的策略,即任意时刻任意节点,所有缓存空间中针对目标数据的读请求返回的结果可能是一致的也可能是不一致的,但是最终结果是一致的。在具体实施过程中,可根据实际的业务场景,选择多地强一致性策略或者最终一致性策略作为与目标数据适配的缓存一致性策略,从而实现异地多活。

示例性的,当目标数据为自内而外的产生数据时,例如,内部管理系统产生的系统数据,如文章、新闻资讯、疾病词条等,可选择多地强一致性策略作为与目标数据适配的缓存一致性策略。当目标数据为具备容忍性的数据时,即可以忍受短暂的数据不一致,当等待一段时间,最终会查询到最近更新的数据,例如,用户更新头像,该用户可以立刻查看更新的头像,而异地的其他用户可能此刻查看的是未更新的头像,需等待一段时间才可查看更新的头像,或者,当目标数据为对业务实时性要求不高的数据时,例如,查看商品热销榜单,此类数据一般是定时更新而不会实时更新,可选择最终一致性策略作为与目标数据适配的缓存一致性策略。

在一种实施方式中,当缓存一致性策略为多地强一致性策略时,采用缓存一致性策略将目标数据缓存至目标缓存空间和其他缓存空间中具体实施方式可以是:将目标数据缓存至目标代理设备的目标缓存空间中,并在目标缓存空间中将目标数据的状态设置为禁止使用状态,向其他代理设备发送关于目标数据的第一缓存请求,以请求其他代理设备将目标数据缓存至其他代理设备对应的其他缓存空间中,当接收到其他代理设备的缓存完成通知时,在目标缓存空间中将目标数据的状态从禁止使用状态更新为可使用状态。其中,第一缓存请求可以携带目标数据。第一缓存请求可以是在目标数据成功缓存至目标代理设备的目标缓存空间之后发出的,也可以是在目标数据缓存至目标代理设备的目标缓存空间的同时发出的,此处对第一缓存请求发送的时间不做限制。

可以理解的是,目标数据在目标缓存空间中处于禁止使用状态,即为禁止访问,当用户发出针对目标数据的读请求时,无法返回对应的结果,或者返回的结果仍然是未更新的结果。例如,目标数据包含key1和对应的value1,且目标缓存空间中此前未有key1,当目标数据处于禁止使用状态时,若用户发出针对key1的读请求,返回空值;或者,目标数据包含key1和对应的value2,且目标缓存空间中此前已有key1和对应的value1,当目标数据处于禁止使用状态时,若用户发出针对key1的读请求,返回value1,只有当目标数据处于可使用状态时,用户发出针对key1的读请求,返回value2。

例如,如图6所示,当代理设备B接收到写入的目标数据时,将目标数据缓存至缓存空间B,此时目标数据在缓存空间B中的状态为禁止使用状态,并向代理设备A、C发送关于目标数据的第一缓存请求,代理设备A、C在接收到第一缓存请求时将该目标数据写入对应的缓存空间A、C,并向代理设备B发送通知,以通知代理设备A目标数据已缓存完成,代理设备A在接收到代理设备A、C的缓存完成通知时,在缓存空间B中将目标数据的状态从禁止使用状态更新为可使用状态。由此实现数据缓存的多地强一致性,即当目标数据缓存在目标缓存空间时,会等待其他缓存空间的确认,确保其他缓存空间已完成目标数据的缓存,只有当接收到其他缓存空间的确认时,该目标数据才是可用的。。

在一种实施方式中,当缓存一致性策略为最终一致性策略时,采用缓存一致性策略将目标数据缓存至目标缓存空间和其他缓存空间中具体实施方式可以是:将目标数据缓存至目标代理设备的目标缓存空间,并异步向其他代理设备发送关于目标数据的第二缓存请求,以请求其他代理设备将目标数据缓存至其他代理设备对应的其他缓存空间中,若在目标缓存空间中成功写入目标数据,则在目标缓存空间中目标数据的状态设备为可使用状态,若在目标缓存空间中缓存目标数据失败,则将目标数据缓存至重做(redo)队列,并在检测到关于目标数据的重缓存事件后,从重做队列中读取目标数据,并将目标数据再次缓存至目标代理设备的目标缓存空间。其中,第二缓存请求可以携带目标数据。第二缓存请求可以是在目标数据成功缓存至目标代理设备的目标缓存空间之后发出的,也可以是在目标数据缓存至目标代理设备的目标缓存空间的同时发送的。

在一种实施方式中,其他代理设备将目标数据缓存至其他代理设备对应的其他缓存空间中具体方式可以是:目标代理设备将第二缓存请求通过消息队列发送至其他代理设备对应的其他数据管理组件,当其他数据管理组件接收到第二缓存请求时,将目标数据缓存至其他代理设备对应的其他缓存空间中。通过消息队列实现缓存的异地同步,可以保证当目标数据缓存至其他缓存空间时,即使发生故障,目标数据也不会丢失。

可以理解的是,目标数据在目标缓存空间中处于可使用状态,即为允许访问,当本地用户发出针对目标数据的读请求时,返回的结果为目标数据包含的结果,若此时其他地方的缓存空间还未完成目标数据的缓存同步,则其他地方的用户发出针对目标数据的读请求时,无法返回对应的结果,或者返回的结果仍然是未更新的结果。例如,缓存空间A缓存了目标数据,且目标数据包含key1和对应的value1,若位于地区A的用户发出针对key1的读请求,则访问缓存空间A并返回value1,若此时地区B的缓存空间B未完成目标数据的缓存,且缓存空间B中此前未有key1,则位于地区B的用户B发出针对key1的读请求时,返回空值,或者,缓存空间B此前已有key1和对应的value2,则位于地区B的用户B发出针对key1的读请求时,返回value2,只有当地区B的缓存空间B完成目标数据的缓存时,位于地区B的用户B发出针对key1的读请求时,返回value2。

在一种实施方式中,在目标数据缓存至目标数据失败时,代理设备可以先将目标数据缓存至重做队列,防止数据丢失。其中,缓存失败的原因可能是,缓存空间发生故障、在目标数据缓存至目标缓存空间时已有数据等待缓存、由技术人员指示目标数据此时不进行缓存等等。当目标代理设备检测到重缓存事件时,从重做队列中获取目标数据并再次将目标数据进行缓存。其中,重缓存事件可以是检测到故障解除、在目标数据缓存至目标缓存空间前待缓存的数据已完成缓存、由技术人员指示目标数据此时继续进行缓存等等。

例如,如图7所示,当代理设备B接收到写入的目标数据时,将目标数据缓存至缓存空间B,并通过消息队列向代理设备A、C对应的数据管理组件A、C发送第二缓存请求,当数据管理组件A、C接收到第二缓存请求时,将目标数据缓存至对应的缓存空间A、C。若目标数据在缓存至缓存空间B时,发生故障导致缓存失败,则将目标数据缓存至重做队列,将检测到重缓存事件后,代理设备B从重做队列中读取目标数据,并将目标数据再次缓存至缓存空间B。由此实现数据缓存的最终一致性,即当目标数据缓存时,先在本地的缓存空间进行缓存,此时目标数据在本地可用,再同步至其他缓存空间,当其他缓存空间进行目标数据的缓存完成后,目标数据在其他地区可用。

需要说明的是,本申请实施例所提及的任一数据的数据类型可分为无冲突复制数据类型和非无冲突复制数据类型;其中,无冲突复制数据类型可以是CRDT(Conflict-FreeReplicated Data Type,免冲突的可复制的数据类型),CRDT类型的数据可以用于数据跨网络复制和合并以及可以自动解决数据冲突并最终实现数据一致。相应的,本申请实施例所提及的目标数据的目标数据类型可以是无冲突复制数据类型,或者非无冲突复制数据类型。此外,在采用缓存一致性策略将目标数据缓存至目标缓存空间和其他缓存空间中之后,当多地针对目标数据进行修改操作时,则产生多地数据冲突情况。因此,可根据目标数据的目标数据类型使用不同的方案解决该情况。

在一种可能的实施方式中,目标数据的目标数据类型为无冲突复制数据类型,解决多地数据冲突情况的具体实施方式可以是:目标代理设备响应针对目标数据的修改操作,根据修改操作在目标缓存空间中对目标数据进行修改,得到修改后的第一数据,若接收到其他代理设备发送的关于该目标数据的修改通知时,则获取其他代理设备在其他缓存空间中对目标数据进行修改所得到的第二数据,目标代理设备将第一数据和第二数据进行合并,得到合并数据,并在目标缓存空间中采用合并数据对第一数据进行更新。

例如,评论点赞等信息,即多地同时为某一评论点赞,点赞数据则发生数据冲突情况。对于此类数据,可以使用CRDT类型进行缓存,多地生成的数据满足交换律、结合律和幂等律,即无论顺序如何,多地生成的数据均有效,并将多地生成的数据都进行合并,最终实现数据一致。例如,对于计数类的数据,数据类型为CRDT类型,采用的数据处理方式是数量最终一致性,如图8所示,key3的原始value为0,即A地t1时刻对目标数据key3进行修改,得到的第一数据为写入key3对应的value值加一,C地t1时刻对目标数据key3进行修改,得到的第二数据为写入key3对应的value值加一、t2时刻写入key3对应的value值加一,因此将第一数据和第二数据进行合并得到合并数据为key3对应的value值为3,因此A、B、C三地的数据进行合并后key3对应的value值为3,并用合并后的数据更新key3的原始value,在未更新前,A地读到的key3对应的value值为1,B地读到的key3对应的value值在0,C地读到的key3对应的value值为2,但并最终三地的数据一致,即三地的key3对应的value值均为3。

例如,如图9a所示,此时评论的点赞数为4,用户A通过终端A对该条评论进行点赞,同时用户B通过终端B对该条评论进行点赞,此时两地的点赞数据未进行合并和同步,由于本申请的技术方案执行终端假象操作,因此终端A上显示点赞数加一即为5,终端B上显示点赞数加一即为5,如图9b所示,等待两地的点赞数据进行合并和同步后,终端A和终端B上显示的点赞数为6,如图9c所示,实现冲突数据最终一致。

在一种实施方式中,目标数据的目标数据类型不为无冲突复制数据类型,解决多地数据冲突情况的具体实施方式可以是:目标代理设备接收到其他代理设备发送的第二数据时,获取关于目标数据的第一存储信息,以及从其他代理设备处获取关于目标数据的第二存储信息,其中,第一存储信息为目标代理设备修改目标数据时生成的第一版本号,第二存储信息是其他代理设备修改目标数据时生成的第二版本号,目标代理设备对比第一版本号和第二版本号,若第一版本号大于第二版本号,则在目标缓存空间中保持第一数据不变,若第一版本号小于或等于第二版本号,则在目标缓存空间中将第一数据更新为第二数据。其中,当目标代理设备响应修改操作对目标缓存空间中的目标数据进行修改时,将目标数据对应的第一版本号加一,例如,此时目标缓存空间中的目标数据包含的key1对应版本号为1,当目标代理设备对目标数据进行修改得到第一数据时,对应的版本号更改为2。当将目标缓存空间中的第一数据更新为第二数据时,第一版本号也将更新为第二版本号,例如,目标缓存空间中的第一数据包含的key1对应版本号为1,第二数据包含的key1对应版本号为2,则对第一数据进行更新后,目标缓存空间中的目标数据包含的key1对应版本号更改为2。

可选的,在一种可能的实施方式中,第一存储信息还可以包括目标代理设备修改目标数据时生成关于目标数据的第一时间戳,第二存储信息还可以包括其他代理设备修改目标数据时生成的第二时间戳,若第一版本号小于第二版本号,则将所述目标缓存空间中的所述第一数据更新为所述第二数据将目标缓存空间中的目标数据更新为其他代理设备缓存的目标数据;若第一版本号等于第二版本号,则比较第一时间戳和第二时间戳。具体可以是,若当第一时间戳大于或等于第二时间戳时,则在目标缓存空间中保持第一数据不变在目标缓存空间中保持目标数据不变;若第一时间戳小于第二时间戳,则在目标缓存空间中将第一数据更新为第二数据。

可选的,当发生多地写数据冲突时,可使用版本号或者版本号+时间戳的方式解决,还可仅使用时间戳的方式。即LWW(Last Write Wins)策略,该策略为一种分布式数据一致性同步策略,当分布式写入数据发生冲突时,根据规定方式进行对比确定最近写入的数据,并以此作为最新数据更新现有数据。例如,位于A地的用户在社区帖子发布了一个帖子,社区帖子的管理端在B地,位于A地的用户可以修改自己发布的帖子,在B地的管理人员也可以通过管理端修改该用户的帖子,因此存在两地同时修改同一目标数据的情况,此时可根据LWW策略解决数据冲突,即选择最新的修改数据,此前产生的修改数据无效。

例如,对于可以用键值对定义的行为产生的数据,数据类型为非CRDT类型,采用的数据处理方式是LWW策略,如图10所示,即A地某用户将key2对应的value值修改为val1,以及生成的第一存储信息为版本号为v1,时间戳为ts1,C地某用户将key2对应的value值修改为val2,以及生成第二存储信息为版本号为v1,时间戳为ts2,根据时间戳和版本号确定出C地写入的目标数据为最新数据,并利用C地写入的目标数据对A、B、C三地进行同步,从而使得三地的数据一致,即三地的key2对应的value值均为val2。

经过对本申请实施例的技术方案进行大量测试,可知该技术方案可以在本地的缓存空间发生故障时,从异地缓存空间同步灾备数据到本地新的缓存空间,并确保灾备数据的正确可用,有效地提升用户体验感,以及本申请实施例的技术方案可以使得在线服务更接近用户,当用户使用在线服务时,在一定程度上降低了数据传输的延时,图11为基于异地多活系统的故障解决的示意图,如图11所示,当C地的缓存空间发生故障且无法恢复时,本申请技术方案中的代理设备可从B地的缓存空间通过DTS(数据库传输服务,将数据从一个服务器传输至另一个服务器)同步一份数据到C地的新缓存空间,并由代理设备将C地的服务切换至新的缓存空间即可,用户在使用时全程无感知。

本申请实施例中,代理设备接收待存储的目标数据,并获取目标数据的存储标识,若存储标识指示需将目标数据存储至数据库中,则将目标数据缓存至目标代理设备对应的目标缓存空间,并在将目标数据成功缓存至目标缓存空间后,向其他代理设备广播第一通知消息,将目标数据存储至多个数据库中的目标数据库,并在将目标数据成功存储至目标数据库后,在目标数据库和其他数据库之间执行数据同步处理,以便于保证多个数据库中的数据一致性;若存储标识指示无需将目标数据存储至数据库中,则获取与目标数据适配的缓存一致性策略,并采用缓存一致性策略将目标数据缓存至目标缓存空间和其他缓存空间中,以便于保证多个缓存空间中的数据一致性。由此可见,通过实施上述方法,可以根据应用的业务场景不同对数据进行不同的处理,从而实现更好地对异地多活场景中所涉及的数据进行数据处理,以及为用户提供数据如存储在本地的交互体验感。

请参见图12,为本申请提供的一种基于异地多活系统的数据处理装置的结构示意图,涉及的异地多活系统包括多个代理设备、每个代理设备对应的缓存空间以及多个数据库;其中,任意两个代理设备所处的地区互不相同;该装置运行于多个代理设备中的目标代理设备中,用于执行本申请图2和图5所示实施例的方法,为了便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示,可参照本申请图2和图5所示的实施例。该基于异地多活系统的数据处理装置1200可包括:接收模块1201、通知模块1202、处理模块1203。

接收模块1201,用于接收待存储的目标数据,并将所述目标数据缓存至所述目标代理设备对应的目标缓存空间;

通知模块1202,用于在将所述目标数据成功缓存至所述目标缓存空间后,向其他代理设备广播第一通知消息,所述第一通知消息用于通知:若所述其他代理设备对应的其他缓存空间中存在所述目标数据,则删除所述其他缓存空间中的所述目标数据;

处理模块1203,用于将所述目标数据存储至所述多个数据库中的目标数据库,并在将所述目标数据成功存储至所述目标数据库后,在所述目标数据库和其他数据库之间执行数据同步处理。

在一种可能的实施方式中,所述接收模块1201在用于接收待存储的目标数据之后,还用于:

获取所述目标数据的存储标识,所述存储标识用于指示是否需将所述目标数据存储至数据库中;

若所述存储标识指示需将所述目标数据存储至数据库中,则执行将所述目标数据缓存至所述目标代理设备对应的缓存空间的步骤;

若所述存储标识指示无需将所述目标数据存储至数据库中,则获取与所述目标数据适配的缓存一致性策略,并采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中。

在一种可能的实施方式中,所述接收模块1201在用于当所述存储标识指示需将所述目标数据存储至数据库中时,还用于:

获取所述目标数据的目标数据类别,所述目标数据类别包括:用户数据类别或者非用户数据类别;

若所述目标数据类别为所述用户数据类别,则在将所述目标数据成功缓存至所述目标缓存空间后,执行向其他代理设备广播第一通知消息的步骤;

若所述目标数据类型为所述非用户数据类别,则为所述目标数据设置存活时长,并在将所述目标数据成功缓存至所述目标缓存空间后,统计所述目标数据在所述目标缓存空间中的缓存时长,在确定所述缓存时长等于或大于所述存活时长时,在所述目标缓存空间中删除所述目标数据。

在一种可能的实施方式中,所述接收模块1201在用于采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中时,具体用于:

将所述目标数据缓存至所述目标代理设备的目标缓存空间中,并在所述目标缓存空间中将所述目标数据的状态设置为禁止使用状态;

向所述其他代理设备发送关于所述目标数据的第一缓存请求,以请求所述其他代理设备将所述目标数据缓存至所述其他代理设备对应的其他缓存空间中;

当接收到所述其他代理设备的缓存完成通知时,在所述目标缓存空间中将所述目标数据的状态从所述禁止使用状态更新为可使用状态。

在一种可能的实施方式中,所述接收模块1201在用于采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中时,具体用于:

将所述目标数据缓存至所述目标代理设备的目标缓存空间,并异步向其他代理设备发送关于所述目标数据的第二缓存请求,以请求所述其他代理设备将所述目标数据缓存至所述其他代理设备对应的其他缓存空间中;

若在所述目标缓存空间中成功写入所述目标数据,则在所述目标缓存空间中将所述目标数据的状态设置为可使用状态;

若在所述目标缓存空间中缓存所述目标数据失败,则将所述目标数据缓存至重做队列,并在检测到关于所述目标数据的重缓存事件后,从所述重做队列中读取出所述目标数据,并将所述目标数据再次缓存至所述目标代理设备的目标缓存空间。

在一种可能的实施方式中,所述接收模块1201在用于采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中之后,还用于:

响应针对目标数据的修改操作,根据所述修改操作在所述目标缓存空间中对所述目标数据进行修改,得到修改后的第一数据;

若接收到所述其他代理设备发送的关于所述目标数据的修改通知,则获取所述其他代理设备在所述其他缓存空间中对所述目标数据进行修改所得到的第二数据;

若所述目标数据的目标数据类型为无冲突复制数据类型,则将所述第一数据和所述第二数据进行合并,得到合并数据;并在所述目标缓存空间中采用所述合并数据对所述第一数据进行更新。

在一种可能的实施方式中,所述接收模块1201,还用于:

若所述目标数据类型不为所述无冲突复制数据类型,则获取关于所述目标数据的第一存储信息,所述第一存储信息至少包括:所述目标代理设备修改所述目标数据时生成的第一版本号;

从所述其他代理设备处获取关于所述目标数据的第二存储信息,所述第二存储信息至少包括:所述其他代理设备修改所述目标数据时生成的第二版本号;

若所述第一版本号大于所述第二版本号,则在所述目标缓存空间中保持所述第一数据不变;若所述第一版本号小于或等于所述第二版本号,则在所述目标缓存空间中将所述第一数据更新为所述第二数据。

在一种可能的实施方式中,所述第一存储信息还包括:所述目标代理设备修改所述目标数据时生成的第一时间戳,所述第二存储信息还包括:所述其他代理设备修改所述目标数据时生成的第二时间戳;所述处理模块1203,具体用于:

若所述第一版本号小于所述第二版本号,则在所述目标缓存空间中将所述第一数据更新为所述第二数据;

若所述第一版本号等于所述第二版本号,则对比所述第一时间戳和所述第二时间戳;

当所述第一时间戳大于或等于所述第二时间戳时,在所述目标缓存空间中保持所述第一数据不变;当所述第一时间戳小于所述第二时间戳时,在所述目标缓存空间中将所述第一数据更新为所述第二数据。

本申请实施例中,接收模块接收待存储的目标数据,并将目标数据缓存至目标代理设备对应的目标缓存空间,通知模块在将目标数据成功缓存至目标缓存空间后,向其他代理设备广播第一通知消息,以使得其他代理设备可将对应的其他缓存空间的目标数据进行删除,处理模块将所述目标数据存储至所述多个数据库中的目标数据库,并在将所述目标数据成功存储至所述目标数据库后,在所述目标数据库和其他数据库之间执行数据同步处理,以便于保证多个数据库之间的数据一致性。由此可见,通过实施上述过程,可以更好地对异地多活场景中所涉及的数据进行处理。

在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以是两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现,本申请不做限定。

请参见图13,为本申请实施例提供的一种代理设备的结构示意图。如图13所示,该代理设备1310包括:至少一个处理器1301、存储器1302。可选的,该电子设备还可包括网络接口1303。其中,所述处理器1301、存储器1302以及网络接口1303之间可以交互数据,网络接口1303受所述处理器的控制用于收发消息,存储器1302用于存储计算机程序,所述计算机程序包括程序指令,处理器1301用于执行存储器1302存储的程序指令。其中,处理器1301被配置用于调用所述程序指令执行上述方法。

所述存储器1302可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1302也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),固态硬盘(solid-state drive,SSD)等;所述存储器1302还可以包括上述种类的存储器的组合。

所述处理器1301可以是中央处理器1301(central processing unit,CPU)。在一个实施例中,所述处理器1301还可以是图形处理器1301(Graphics Processing Unit,GPU)。所述处理器1301也可以是由CPU和GPU的组合。

在一个实施例中,所述存储器1302用于存储程序指令。所述处理器1301可以调用所述程序指令,执行以下步骤:

接收待存储的目标数据,并将所述目标数据缓存至所述目标代理设备对应的目标缓存空间;

在将所述目标数据成功缓存至所述目标缓存空间后,向其他代理设备广播第一通知消息,所述第一通知消息用于通知:若所述其他代理设备对应的其他缓存空间中存在所述目标数据,则删除所述其他缓存空间中的所述目标数据;

将所述目标数据存储至所述多个数据库中的目标数据库,并在将所述目标数据成功存储至所述目标数据库后,在所述目标数据库和其他数据库之间执行数据同步处理。

在一种可能的实施方式中,所述处理器1301在用于接收待存储的目标数据之后,还可用于执行:

获取所述目标数据的存储标识,所述存储标识用于指示是否需将所述目标数据存储至数据库中;

若所述存储标识指示需将所述目标数据存储至数据库中,则执行将所述目标数据缓存至所述目标代理设备对应的缓存空间的步骤;

若所述存储标识指示无需将所述目标数据存储至数据库中,则获取与所述目标数据适配的缓存一致性策略,并采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中。

在一种可能的实施方式中,所述处理器1301在用于当所述存储标识指示需将所述目标数据存储至数据库中时,还可用于执行:

获取所述目标数据的目标数据类别,所述目标数据类别包括:用户数据类别或者非用户数据类别;

若所述目标数据类别为所述用户数据类别,则在将所述目标数据成功缓存至所述目标缓存空间后,执行向其他代理设备广播第一通知消息的步骤;

若所述目标数据类型为所述非用户数据类别,则为所述目标数据设置存活时长,并在将所述目标数据成功缓存至所述目标缓存空间后,统计所述目标数据在所述目标缓存空间中的缓存时长,在确定所述缓存时长等于或大于所述存活时长时,在所述目标缓存空间中删除所述目标数据。

在一种可能的实施方式中,所述处理器1301在用于采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中时,还可用于执行:

将所述目标数据缓存至所述目标代理设备的目标缓存空间中,并在所述目标缓存空间中将所述目标数据的状态设置为禁止使用状态;

向所述其他代理设备发送关于所述目标数据的第一缓存请求,以请求所述其他代理设备将所述目标数据缓存至所述其他代理设备对应的其他缓存空间中;

当接收到所述其他代理设备的缓存完成通知时,在所述目标缓存空间中将所述目标数据的状态从所述禁止使用状态更新为可使用状态。

在一种可能的实施方式中,所述处理器1301在用于采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中时,还可用于执行:

将所述目标数据缓存至所述目标代理设备的目标缓存空间,并异步向其他代理设备发送关于所述目标数据的第二缓存请求,以请求所述其他代理设备将所述目标数据缓存至所述其他代理设备对应的其他缓存空间中;

若在所述目标缓存空间中成功写入所述目标数据,则在所述目标缓存空间中将所述目标数据的状态设置为可使用状态;

若在所述目标缓存空间中缓存所述目标数据失败,则将所述目标数据缓存至重做队列,并在检测到关于所述目标数据的重缓存事件后,从所述重做队列中读取出所述目标数据,并将所述目标数据再次缓存至所述目标代理设备的目标缓存空间。

在一种可能的实施方式中,所述处理器1301在用于采用所述缓存一致性策略将所述目标数据缓存至所述目标缓存空间和所述其他缓存空间中之后,还可用于执行:

响应针对目标数据的修改操作,根据所述修改操作在所述目标缓存空间中对所述目标数据进行修改,得到修改后的第一数据;

若接收到所述其他代理设备发送的关于所述目标数据的修改通知,则获取所述其他代理设备在所述其他缓存空间中对所述目标数据进行修改所得到的第二数据;

若所述目标数据的目标数据类型为无冲突复制数据类型,则将所述第一数据和所述第二数据进行合并,得到合并数据;并在所述目标缓存空间中采用所述合并数据对所述第一数据进行更新。

在一种可能的实施方式中,所述处理器1301还可用于执行:

若所述目标数据类型不为所述无冲突复制数据类型,则获取关于所述目标数据的第一存储信息,所述第一存储信息至少包括:所述目标代理设备修改所述目标数据时生成的第一版本号;

从所述其他代理设备处获取关于所述目标数据的第二存储信息,所述第二存储信息至少包括:所述其他代理设备修改所述目标数据时生成的第二版本号;

若所述第一版本号大于所述第二版本号,则在所述目标缓存空间中保持所述第一数据不变;若所述第一版本号小于或等于所述第二版本号,则在所述目标缓存空间中将所述第一数据更新为所述第二数据。

在一种可能的实施方式中,所述第一存储信息还包括:所述目标代理设备修改所述目标数据时生成的第一时间戳,所述第二存储信息还包括:所述其他代理设备修改所述目标数据时生成的第二时间戳;所述处理器1301还可用于执行:

若所述第一版本号小于所述第二版本号,则在所述目标缓存空间中将所述第一数据更新为所述第二数据;

若所述第一版本号等于所述第二版本号,则对比所述第一时间戳和所述第二时间戳;

当所述第一时间戳大于或等于所述第二时间戳时,在所述目标缓存空间中保持所述第一数据不变;当所述第一时间戳小于所述第二时间戳时,在所述目标缓存空间中将所述第一数据更新为所述第二数据。

具体实现中,本申请实施例中所描述的装置、处理器1301、存储器1302等可执行上述方法实施例所描述的实现方式,也可执行本申请实施例所描述的实现方式,在此不再赘述。

本申请实施例中还提供一种计算机(可读)存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时,可执行上述方法实施例中所执行的部分或全部步骤。可选的,该计算机存储介质可以是易失性的,也可以是非易失性的。

需要说明的是,根据本申请的一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述图2所示的基于异地多活系统的数据处理方法或图5所示的基于异地多活系统的数据处理方法实施例方面的各种可选方式中提供的方法。

在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机存储介质中,该计算机存储介质可以为计算机可读存储介质,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所揭露的仅为本申请的部分实施例而已,当然不能以此来限定本申请之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本申请权利要求所作的等同变化,仍属于本申请所涵盖的范围。

相关技术
  • 基于异地多活系统的数据处理方法、相关设备及存储介质
  • 异地多活容灾方法、系统、设备及可读存储介质
技术分类

06120112965901