缓存数据同步方法、服务器、应用系统及存储装置与流程

文档序号:17762869发布日期:2019-05-24 21:51阅读:199来源:国知局
缓存数据同步方法、服务器、应用系统及存储装置与流程

本发明涉及互联网技术领域,特别是涉及一种缓存数据同步方法、服务器、应用系统及存储装置。



背景技术:

目前随着互联网应用的用户量的增加,尤其是拥有海量用户的互联网应用,对于应用系统的高并发、高可用提出越来越高的要求。为了提升应用系统的性能,减少对系统数据库的直接访问,通常会在应用系统中使用缓存数据库,可以将系统数据库中的数据放入缓存数据库中,在需要获取数据时直接从缓存数据库中获取数据,以提高数据的读取速度。当系统数据库中的数据在缓存数据库中作了缓存时,需要保证缓存数据库中的缓存数据与系统数据库中的源数据的一致性。现有的缓存采用被动更新策略,当用户数据出现变更时,主动删除对应缓存,待用户再次查询时才将数据写入缓存。这种方式下,在系统出现高并发的情况下,数据库将面临较大的压力,容易引起性能瓶颈。

另外,现有的系统数据库采用双主方案进行数据备份,数据库之间互为主从进行同步复制。当出现网络抖动时,主从数据库之间存在一定延时。此时如果主库出现宕机需要故障转移,将不能确保主从数据一致性,存在事务丢失风险。数据的一致性较差,且在故障恢复过程中需要人工整理对账结果确认丢失事务,并进行相应的数据补全。



技术实现要素:

本发明主要解决的技术问题是提供一种缓存数据同步方法、服务器、应用系统及存储装置,能够保证系统数据库与缓存数据库的数据一致性。

为解决上述技术问题,本发明采用的一个技术方案是:提供一种缓存数据同步方法,所述方法包括:中间件服务器获取系统数据库的变更日志,解析变更日志以获取系统数据库的数据变更信息;中间件服务器利用数据变更信息从数据表中获取待同步数据;中间件服务器按照数据表与缓存键之间的映射关系将待同步数据同步至缓存数据库,其中,中间件服务器中存储有数据表与缓存键之间的映射关系表。

为解决上述技术问题,本发明采用的另一个技术方案是:提供一种数据同步方法,所述方法包括:分布式应用服务器获取系统数据库的节点信息,并将所述节点信息发送至系统服务器和中间件服务器,系统服务器根据节点信息切换主节点的连接,并将其他各节点的数据同步至新的主节点中,中间件服务器根据节点信息定位主节点,并获取主节点的变更日志,解析变更日志以获取系统数据库的数据变更信息;利用数据变更信息从数据表中获取待同步数据,并按照数据表与缓存键之间的映射关系将待同步数据同步至缓存数据库,其中,中间件服务器中存储有数据表与缓存键之间的映射关系表。

为解决上述技术问题,本发明采用的另一个技术方案是:提供一种服务器,所述服务器包括处理器和存储器,处理器耦接存储器,存储器存储有程序,处理器用于执行所述程序实现上述的缓存数据同步方法。

为解决上述技术问题,本发明采用的另一个技术方案是:提供一种应用系统,所述系统包括:系统服务器、分布式应用服务器、中间件服务器、系统数据库、缓存数据库,系统服务器耦接分布式应用服务器、系统数据库及缓存数据库,分布式应用服务器耦接中间件服务器和系统数据库,中间件服务器耦接系统数据库和缓存数据库;系统服务器用于读/写系统数据库的数据,和/或读取缓存数据库的数据;分布式应用服务器用于获取系统数据库的节点信息,并将节点信息发送至系统服务器和中间件服务器;中间件服务器用于获取系统数据库变更日志,解析变更日志以获取系统数据库的数据变更信息,利用数据变更信息从数据表中获取待同步数据,并按照数据表与缓存键之间的映射关系将待同步数据同步至缓存数据库,其中,中间件服务器中存储有数据表与缓存键之间的映射关系表。

为解决上述技术问题,本发明采用的另一个技术方案是:提供一种具有存储功能的装置,所述装置存储有程序,所述程序被执行时能够实现上述的数据同步方法。

本发明的有益效果是:区别于现有技术的情况,本发明通过中间件服务器监听系统数据库的变更日志,解析获取变更记录,且中间件服务器中存储有数据表与缓存键之间的映射关系表,在服务端即可将数据的变更实时更新至缓存,可确保系统数据库与缓存数据库的数据的一致性。

附图说明

图1是本发明缓存数据同步方法第一实施方式的流程示意图;

图2是本发明应用系统第一实施方式的结构示意图;

图3是本发明应用系统第二实施方式的架构示意图;

图4是本申请数据同步方法第一实施方式的流程示意图;

图5是本申请服务器第一实施方式的结构示意图;

图6是本申请具有存储功能的装置第一实施方式的结构示意图。

具体实施方式

为使本申请的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本申请进一步详细说明。

本申请提供一种缓存数据同步方法,至少可应用于高并发应用系统中。请参阅图1,图1是本发明缓存数据同步方法第一实施方式的流程示意图。在该实施方式中,缓存数据同步方法包括如下步骤:

s101:中间件服务器获取系统数据库的变更日志,解析变更日志以获取系统数据库的数据变更信息。

其中,系统数据库是关系型数据库,如mysql等关系型数据库,系统数据库用于存储应用系统的重要数据。系统数据库的变更日志是二进制日志(binlog日志),binlog日志是mysql最重要的日志,它记录了所有的ddl和dml(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。如binlog日志记录着系统数据库的增加、修改和删除等数据变更信息。

s102:中间件服务器利用数据变更信息从数据表中获取待同步数据。

其中,在获取系统数据库的数据变更信息时,同时获取同步配置信息,同步配置信息包括缓存数据库的地址信息、哪些数据库及数据库中哪些数据表需要进行同步缓存以及同步缓存的同步规则等。获取变更数据中的数据对应的数据名,在同步配置信息的数据表中查找是否有与该数据名相匹配的记录,若有,则该数据名对应的数据即为待同步数据。

s103:中间件服务器按照数据表与缓存键之间的映射关系将待同步数据同步至缓存数据库,其中,中间件服务器中存储有数据表与缓存键之间的映射关系表。

其中,使用缓存项的key能够唯一确定一个缓存项,利用数据表与缓存键之间的映射关系,能够将待同步数据对应的写入缓存数据库,对缓存项进行更新,提高数据同步缓存的可靠性。

其中,缓存数据库可以是redis数据库,redis是remotedictionaryserver(远程数据服务)的缩写,是一款内存高速缓存数据库,属key-value型数据库。redis数据库性能强劲,具有较多优点。如redis数据库完全在内存中,处理速度非常快。redis还支持数据持久化,可以将内存中的数据存储到磁盘上,方便在宕机等突发情况下快速恢复。redis支持丰富的数据类型,除简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。能够保证数据一致性,所有redis操作是原子的,这保证了如果两个客户端同时访问的redis服务器将获得更新后的值。

其中,在一实施方式中,利用中间件服务器获取系统数据库的变更日志。中间件可以是cannal中间件,canal会将自己伪装成mysql的从节点(slave),并从主节点(master)获取binlog,解析和贮存后供下游消费端使用。canal包含两个组成部分:服务端和客户端。服务端负责连接至不同的mysql实例,并为每个实例维护一个事件消息队列;客户端则可以订阅这些队列中的数据变更事件,处理并存储到数据仓库中。

现有的canal框架只支持tcp、kafka、rocketmq三种模式,其中,kafka是linkedin开源的分布式发布-订阅消息系统,是基于pull的模式来处理消息消费,追求高吞吐量;rocketmq是阿里开源的消息中间件,它是纯java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。本申请中对canal框架进行了优化,使其能够支持redis模式,具体地,将原有位于canal客户端用于读取canal服务端消息的连接canal的程序集成到canal服务端中,使其在canal服务端一端就能完成消息的发送和读取,减少时延,进而能够支持redis模式。在该实施方式中,通过中间件服务器监听系统数据库的变更日志,解析获取变更记录,且中间件服务器中存储有数据表与缓存键之间的映射关系表,在服务端即可将数据的变更实时更新至缓存,可确保系统数据库与缓存数据库的数据的一致性。

其中,在一实施方式中,如果存在多个缓存数据库,中间件服务器能够按照数据表与缓存键之间的映射关系将待同步数据同步至不同机房中的多个缓存数据库。

请参阅图2和图3,图2是本发明应用系统第一实施方式的结构示意图,图3是本发明应用系统第二实施方式的架构示意图。本申请提供一种应用系统,如可以是虚拟币管理系统。在该实施方式中,应用系统200包括系统服务器10、分布式应用服务器20、中间件服务器30、系统数据库40、缓存数据库50,系统服务器10耦接分布式应用服务器20、系统数据库40及缓存数据库50,分布式应用服务器20耦接中间件服务器30和系统数据库40,中间件服务器30耦接系统数据库40、缓存数据库50。其中,系统服务器10、分布式应用服务器20、中间件服务器30可以是独立的服务器,也可以是多个服务器组成的服务器集群。系统数据库40、缓存数据库50是由独立的服务器或服务器集群配置形成的。系统服务器10、分布式应用服务器20、中间件服务器30也可以是独立的服务器或服务器集群。

在该应用系统中,系统数据库为mysql关系型数据库,中间件为canal中间件,缓存数据库为redis数据库。

其中,现有应用系统的系统数据库一般采用双主方案,数据库之间互为主从进行同步复制。但当出现网络抖动时,主从数据库之间存在一定延时。此时如果主库出现宕机需要故障转移,将不能确保主从数据一致性,存在事务丢失风险。在故障恢复过程中还需要人工整理对账结果确认丢失事务,并进行相应的数据补全。为了解决这一技术问题,本申请在系统数据库中采用mgr模式,通过mysql内部分布式一致性算法保证数据写入的强一致性。mgr是一款高可用集群方案mysqlgroupreplication,简称:mgr(组复制),是基于paxos协议的状态机复制,能够解决基于传统的异步复制和半同步复制中数据一致性问题无法保证的情况,也让mysql数据库涉及的领域更广。组复制可以在单主模式下运行,也可以在多主模式下运行。本申请应用系统的系统数据库采用mgr模式,能够保证数据写入的强一致性,还减少了人工参与程度,提高系统可用性。

其中,现有的应用系统在mgr集群发生故障或者宕机时,集群会重新选举主节点达到自动恢复的功能,但是这些故障恢复的功能,对客户端来说是无法感知的,因此需要在客户端自主定制故障切换功能。为了解决这一技术问题,本申请通过在系统服务器和中间件服务器上集成分布式应用服务的客户端,利用分布式应用服务(zookeeper,zk)来监听mgr集群的状态变更,然后将mgr更新发送至系统服务器和中间件服务器,以使其及时感知mgr集群的变更。

具体地,zk服务端(mgr-monitor)通过执行sql获取mgr集群节点信息,并将主节点信息持久化至zk节点,节点信息包括系统数据库集群各节点的状态信息以及当前主节点的信息。将分布式应用服务的客户端(mgr-monitor-client)集成在应用程序中,以使应该程序通过zk客户端监听节点变化,当主库出现故障或者宕机出现主节点切换时,可以实时感知。即系统服务器可通过接收到的系统数据库的节点信息,在主节点宕机后及时切换主节点的连接,并将其他各节点的数据同步到新的主节点中,保证数据的一致性。在该实施方式中,应用程序利用集成的mgr-motor-client通过zk监听对应的节点变化,当mgr集群内部故障或者宕机出现节点切换时,可以实时感知,并通过程序处理自动切换数据库,达到故障快速恢复的目的。

同时在中间件服务器中也集成有分布式应用服务的客户端(mgr-monitor-client),以使中间件服务器监听节点变化,当切换主节点时,及时跟踪定位主节点,获取主节点的变更日志。解析变更日志以获取系统数据库的数据变更信息,利用数据变更信息从数据表中获取待同步数据,并按照数据表与缓存键之间的映射关系将待同步数据同步至缓存数据库。保证系统数据库与缓存数据库的数据的一致性。具体过程请参阅上述的缓存数据同步方法实施方式的描述,在此不再赘述。

其中,现有应用系统中,缓存部署在单机房,而程序部署在双机房,这就导致了必然存在一个机房的程序调用缓存是属于跨机房调用,对于高并发情况下的查询业务容易因为机房之间的网络丢包导致成功率下降,影响用户体验。为了解决这一技术问题,本申请采用在两个机房中都部署有缓存数据库,并基于canal框架的同步平台,通过监听mgr集群主节点的binlog变更,将数据的变更即时更新到两个机房的缓存服务器,系统服务器根据机房配置优先连接同机房的缓存数据库,减少跨机房调用,也减少了因为网络丢包导致的超时/失败。

其中,在一实施方式中,为了进一步提升系统性能,本申请的应用系统中还设置有配置化管理平台,以对系统数据库的节点信息、缓存信息等配置信息的更新进行管理。该配置化管理平台可以是系统服务器中的一个单元,也可以是独立的服务器。

基于此,本申请还提供一种数据同步方法,该数据同步方法可应用于上述应用系统,保证系统数据库及缓存数据库的数据一致性。请参阅图4,图4是本申请数据同步方法第一实施方式的流程示意图,在该实施方式中,数据同步方法包括如下步骤:

分布式应用服务器获取系统数据库的节点信息,并将节点信息发送至系统服务器和中间件服务器。

其中,可以是分布式应用服务器主动推送节点信息至系统服务器和中间件服务器;也可以是在系统服务器和中间件服务器请求后,再发送节点信息。

系统服务器根据节点信息切换主节点的连接,并将其他各节点的数据同步至新的主节点中。

中间件服务器根据节点信息定位主节点,并获取主节点的变更日志,解析变更日志以获取系统数据库的数据变更信息及系统数据库的节点信息;利用数据变更信息从数据表中获取待同步数据,并按照数据表与缓存键之间的映射关系将待同步数据同步至缓存数据库。其中,所述中间件服务器中存储有数据表与缓存键之间的映射关系表。

其中,系统数据库是关系型数据库,如mysql等关系型数据库,系统数据库用于存储应用系统的重要数据。系统数据库的变更日志是二进制日志(binlog日志),记录着系统数据库的增加、修改和删除等数据变更信息。

具体实现过程请参阅上述实施方式的描述,在此不再赘述。

基于此,本申请还提供一种服务器,请参阅图5,图5是本申请服务器第一实施方式的结构示意图,在该实施方式中,服务器50包括处理器501和存储器502,处理器501耦接存储器502,存储器502存储有程序,处理器501用于执行所述程序实现如上述的缓存数据同步方法。该服务器可以是上述的中间件服务器。该服务器可以是独立的服务器或服务器集群。

基于上述数据同步方法,本申请还提供一种具有存储功能的装置,请参阅图6,图6是本申请具有存储功能的装置第一实施方式的结构示意图。在该实施方式中,存储装置60存储有程序601,程序601被执行时实现上述数据同步方法。具体工作过程与上述方法实施例中一致,故在此不再赘述,详细请参阅以上对应方法步骤的说明。其中具有存储功能的装置可以是便携式存储介质如u盘、光盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟等各种可以存储程序代码的介质,也可以是终端、服务器等。

在本申请所提供的几个实施方式中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。

另外,在本申请各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。

以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1