发明内容
本发明实施例提供了一种全局事务标识GTID的同步方法、装置及系统,以至少解决相关技术中存在的磁盘易损坏,系统中断周期长,影响业务的正常运行的问题。
根据本发明的一个实施例,提供了一种全局事务标识GTID的同步方法,包括:主用全局事务协同中心GTM接收两个以上GTID处理消息,其中,所述GTID处理消息包括申请GTID消息和/或释放GTID消息,所述申请GTID消息用于请求生成第一GTID,所述释放GTID消息用于请求删除第二GTID;所述主用GTM根据所述两个以上GTID处理消息对所述主用GTM中存储的GTID进行批量处理以及生成用于描述所述批量处理的增量文件;所述主用GTM将所述增量文件的内容同步到备用GTM中,其中,所述增量文件的内容用于指示所述备用GTM对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理。
可选地,所述主用GTM生成用于描述所述批量处理的增量文件包括:所述主用GTM按照对所述主用GTM中存储的GTID进行所述批量处理的顺序,采用顺序写的方式批量生成所述增量文件。
可选地,所述主用GTM在将所述增量文件的内容同步到所述备用GTM中之后,所述方法还包括:所述主用GTM判断在预定时间内是否接收到所述备用GTM在进行了所述批量处理后返回的增量同步应答消息;在判断结果为所述主用GTM在所述预定时间内接收到所述增量同步应答消息时,所述主用GTM根据所述增量同步应答消息向发送所述GTID处理消息的发送端反馈GTID处理应答;和/或,在判断结果为所述主用GTM在所述预定时间内未接收到所述增量同步应答消息时,所述主用GTM将进行了批量处理后的所述主用GTM中存储的GTID全部同步到所述备用GTM中。
可选地,所述主用GTM在将所述增量文件的内容同步到所述备用GTM中之后,所述方法还包括:所述主用GTM将进行了批量处理后的所述主用GTM中存储的GTID全部存入第一磁盘;所述主用GTM删除所述增量文件。
可选地,所述方法还包括:当所述主用GTM发生异常重新启动后,所述主用GTM读取所述主用GTM中存储的第一全量文件以及第一最新的增量文件,其中,所述第一全量文件用于描述所述主用GTM在预定时刻存储的所有GTID,所述第一最新的增量文件用于描述所述主用GTM中存储的GTID的变化信息;所述主用GTM在判断到所述第一最新的增量文件的生成时间晚于所述第一全量文件的生成时间时,所述主用GTM根据所述第一全量文件和所述第一最新的增量文件恢复存储所述主用GTM在重新启动之前实际存储的GTID;和/或,所述主用GTM在判断到所述第一最新的增量文件的生成时间早于所述第一全量文件的生成时间时,所述主用GTM仅根据所述第一全量文件恢复存储所述主用GTM在重新启动之前实际存储的GTID。
可选地,当所述主用GTM和所述备用GTM同时发生异常重新启动,所述主用GTM在恢复存储所述主用GTM在重新启动之前实际存储的GTID之后,所述方法还包括:所述主用GTM将恢复存储的GTID同步到所述备用GTM中。
根据本发明的另一个实施例,提供了一种全局事务标识GTID的同步方法,包括:备用全局事务协同中心GTM接收主用GTM同步的增量文件的内容,其中,所述增量文件的内容用于描述所述主用GTM根据接收的两个以上GTID处理消息对所述主用GTM中存储的GTID进行的批量处理,其中,所述GTID处理消息包括申请GTID消息和/或释放GTID消息,所述申请GTID消息用于请求所述主用GTM生成第一GTID,所述释放GTID消息用于请求所述主用GTM删除第二GTID;所述备用GTM根据所述增量文件的内容对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理。
可选地,所述备用GTM在根据所述增量文件的内容对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理之后,所述方法还包括:所述备用GTM在确定执行所述批量处理成功之后,在预定时间内向所述主用GTM返回增量同步应答消息。
可选地,所述备用GTM在根据所述增量文件的内容对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理之后,所述方法还包括:所述备用GTM接收来自所述主用GTM的进行了所述批量处理后的所述主用GTM中存储的全部GTID;所述备用GTM根据来自所述主用GTM的GTID更新所述备用GTM中存储的GTID。
可选地,所述备用GTM在根据所述增量文件的内容对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理之后,所述方法还包括:所述备用GTM将进行了所述批量处理后的所述备用GTM中存储的GTID全部存入第二磁盘;所述备用GTM删除所述增量文件。
可选地,所述方法还包括:当所述备用GTM发生异常重新启动后,所述备用GTM读取所述备用GTM中存储的第二全量文件以及第二最新的增量文件,其中,所述第二全量文件用于描述所述备用GTM在预定时刻存储的所有GTID,所述第二最新的增量文件用于描述所述备用GTM中存储的GTID的变化信息;所述备用GTM在判断到所述第二最新的增量文件的生成时间晚于所述第二全量文件的生成时间时,所述备用GTM根据所述第二全量文件和所述第二最新的增量文件恢复存储所述备用GTM在重新启动之前实际存储的GTID;和/或,所述备用GTM在判断到所述第二最新的增量文件的生成时间早于所述第二全量文件的生成时间时,所述备用GTM仅根据所述第二全量文件恢复存储所述备用GTM在重新启动之前实际存储的GTID。
可选地,当所述主用GTM和所述备用GTM同时发生异常重新启动,所述备用GTM在恢复存储所述备用GTM在重新启动之前实际存储的GTID之后,所述方法还包括:所述备用GTM接收来自所述主用GTM的恢复存储的GTID;所述备用GTM根据来自所述主用GTM的恢复存储的GTID和所述备用GTM中恢复存储的GTID进行比较;所述备用GTM在根据比较结果确定来自所述主用GTM的恢复存储的GTID为最新的存储的GTID时,利用来自所述主用GTM的恢复存储的GTID更新所述备用GTM中恢复存储的GTID。
根据本发明的另一个实施例,提供了一种全局事务标识GTID的同步装置,所述装置应用于主用全局事务协同中心GTM中,包括:第一接收模块,用于接收两个以上GTID处理消息,其中,所述GTID处理消息包括申请GTID消息和/或释放GTID消息,所述申请GTID消息用于请求生成第一GTID,所述释放GTID消息用于请求删除第二GTID;第一处理模块,用于根据所述两个以上GTID处理消息对所述主用GTM中存储的GTID进行批量处理以及生成用于描述所述批量处理的增量文件;同步模块,用于将所述增量文件的内容同步到备用GTM中,其中,所述增量文件的内容用于指示所述备用GTM对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理。
可选地,所述装置还包括:判断模块,用于判断在预定时间内是否接收到所述备用GTM在进行了所述批量处理后返回的增量同步应答消息;处理模块,用于在所述判断模块的判断结果为所述主用GTM在所述预定时间内接收到所述增量同步应答消息时,所述主用GTM根据所述增量同步应答消息向发送所述GTID处理消息的发送端反馈GTID处理应答;和/或,在判断结果为所述主用GTM在所述预定时间内未接收到所述增量同步应答消息时,所述主用GTM将进行了批量处理后的所述主用GTM中存储的GTID全部同步到所述备用GTM中。
可选地,所述装置还包括:第一存储模块,用于在将所述增量文件的内容同步到所述备用GTM中之后,将进行了批量处理后的所述主用GTM中存储的GTID全部存入第一磁盘;第一删除模块,用于删除所述增量文件。
根据本发明的另一个实施例,提供了一种全局事务标识GTID的同步装置,所述装置应用于备用全局事务协同中心GTM中,包括:第二接收模块,用于接收主用GTM同步的增量文件的内容,其中,所述增量文件的内容用于描述所述主用GTM根据接收的两个以上GTID处理消息对所述主用GTM中存储的GTID进行的批量处理,其中,所述GTID处理消息包括申请GTID消息和/或释放GTID消息,所述申请GTID消息用于请求所述主用GTM生成第一GTID,所述释放GTID消息用于请求所述主用GTM删除第二GTID;第二处理模块,用于根据所述增量文件的内容对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理。
可选地,所述装置还包括:更新模块,用于在根据所述增量文件的内容对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理之后,接收来自所述主用GTM的进行了所述批量处理后的所述主用GTM中存储的全部GTID;根据来自所述主用GTM的GTID更新所述备用GTM中存储的GTID。
可选地,所述装置还包括:第二读取及处理模块,用于当所述备用GTM发生异常重新启动后,读取所述备用GTM中存储的第二全量文件以及第二最新的增量文件,其中,所述第二全量文件用于描述所述备用GTM在预定时刻存储的所有GTID,所述第二最新的增量文件用于描述所述备用GTM中存储的GTID的变化信息;在判断到所述第二最新的增量文件的生成时间晚于所述第二全量文件的生成时间时,所述备用GTM根据所述第二全量文件和所述第二最新的增量文件恢复存储所述备用GTM在重新启动之前实际存储的GTID;和/或,在判断到所述第二最新的增量文件的生成时间早于所述第二全量文件的生成时间时,所述备用GTM仅根据所述第二全量文件恢复存储所述备用GTM在重新启动之前实际存储的GTID。
根据本发明的另一个实施例,提供了一种全局事务标识GTID的同步系统,所述系统包括主用全局事务协同中心GTM以及备用GTM,其中,所述主用GTM用于执行以下操作:接收两个以上GTID处理消息,其中,所述GTID处理消息包括申请GTID消息和/或释放GTID消息,所述申请GTID消息用于请求生成第一GTID,所述释放GTID消息用于请求删除第二GTID;根据所述两个以上GTID处理消息对所述主用GTM中存储的GTID进行批量处理以及生成用于描述所述批量处理的增量文件;将所述增量文件的内容同步到备用GTM中;所述备用GTM用于执行以下操作:接收主用GTM同步的增量文件的内容;根据所述增量文件的内容对所述备用GTM中存储的与所述主用GTM对应GTID进行所述批量处理。
根据本发明的又一个实施例,还提供了一种存储介质。该存储介质设置为存储用于执行上述各步骤的程序代码。
通过本发明,采用主备GTM结合的方式进行数据存储,从而能够保证在单个GTM异常后,快速切换至另一个GTM中,保证GTID的准确度。并且,在进行GTID处理时,采用的是批量指示备用GTM处理GTID的方式,能够在保证可靠性的同时最大限度降低时延和提高并发能力,有效提高GTID的处理效率。从而解决相关技术中存在的GTID的记录方式会出现磁盘易损坏,系统中断周期长,影响业务的正常运行的问题。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本发明实施例中的方案能够实现高可靠、高性能分发事务ID,异常情况下具备快速切换和恢复服务的能力,满足分布式数据库系统对事务高速处理的要求。
首先对本发明实施例中可能需要使用的一些概念进行说明:
Cluster集群,是分布式事务的逻辑单位,由相关的多个数据库组成,Cluster ID标示一个集群。
GTID,(Global Transaction ID,全局事务ID),在整个分布式系统中每一个事务ID在集群中是全局唯一的。
GTM,(Global Transaction Manager,全局事务协调中心),负责维护整个分布式系统中的未完事务GTID(活跃GTID)。
proxy,数据服务代理服务器,负责SQL(Structured Query Language,结构查询语言)优化、SQL路由、数据节点的负载均衡、分布式事务的调度等;如果处理的业务和分布式事务相关,需要向GTM申请GTID、释放GTID及查询当前系统的活跃GTID等。
全量持久化,一次把所有的信息都持久化保存(例如,存入磁盘中)。
增量持久化,只把当次变化的信息持久化,某时刻的信息等于过去某个时刻的全量持久化信息加上该段时间差的增量持久化信息。
本发明实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种全局事务标识GTID的同步方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的全局事务标识GTID的同步方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本发明实施例中提供了一种运行于上述计算机终端的全局事务标识GTID的同步方法,图2是根据本发明实施例的第一种全局事务标识GTID的同步方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,主用全局事务协同中心GTM接收两个以上GTID处理消息,其中,该GTID处理消息包括申请GTID消息和/或释放GTID消息,上述申请GTID消息用于请求生成第一GTID,上述释放GTID消息用于请求删除第二GTID;
步骤S204,上述主用GTM根据两个以上GTID处理消息对主用GTM中存储的GTID进行批量处理以及生成用于描述上述批量处理的增量文件;
步骤S206,上述主用GTM将上述增量文件的内容同步到备用GTM中,其中,该增量文件的内容用于指示上述备用GTM对备用GTM中存储的与主用GTM对应GTID进行批量处理。
通过上述步骤,采用主备GTM结合的方式进行数据存储,从而能够保证在单个GTM异常后,快速切换至另一个GTM中,保证GTID的准确度。并且,在进行GTID处理时,采用的是批量指示备用GTM处理GTID的方式,能够在保证可靠性的同时最大限度降低时延和提高并发能力,有效提高GTID的处理效率。从而解决相关技术中存在的GTID的记录方式会出现磁盘易损坏,系统中断周期长,影响业务的正常运行的问题。
在一个可选的实施例中,上述主用GTM生成用于描述上述批量处理的增量文件包括:上述主用GTM按照对主用GTM中存储的GTID进行批量处理的顺序,采用顺序写的方式批量生成上述增量文件。在本实施例中,主用GTM是根据两个以上GTID处理消息对存储的GTID进行处理的,主用GTM还可以将上述的多个处理批量写成增量文件,并且仅需向备用GTM发送一次消息即可将上述的多个处理指示给备用GTM,从而避免了主用GTM和备用GTM之间的多次交互,降低时延,提供业务处理速度。
在一个可选的实施例中,上述主用GTM在将上述增量文件的内容同步到上述备用GTM中之后,上述方法还包括:主用GTM判断在预定时间内是否接收到上述备用GTM在进行了批量处理后返回的增量同步应答消息;在判断结果为主用GTM在上述预定时间内接收到增量同步应答消息时,主用GTM根据该增量同步应答消息向发送GTID处理消息的发送端反馈GTID处理应答;和/或,在判断结果为上述主用GTM在预定时间内未接收到增量同步应答消息时,主用GTM将进行了批量处理后的主用GTM中存储的GTID全部同步到备用GTM中。在本实施例中,当主用GTM在预定时间(该预定时间可以是灵活设置的,例如1s、5s)内接收到备用GTM的应答时,说明备用GTM根据增量文件进行了GTID的处理,当为收到备用GTM的应答时,说明备用GTM在进行GTID处理时处理失败了,在该情况下,为了保证主用GTM和备用GTM中的数据的一致性,主用GTM可以将自身当前存储的所有GTID全部同步到备用GTM中,从而保证了主备GTM中存储的GTID的一致。当然,在实际应用中,当主用GTM在预定时间内没有收到来自备用GTM的应答时,主用GTM也可以再次向备用GTM发送上述增量文件(或者重复两次以上发送增量文件的操作),若再次向备用GTM发送增量文件之后,还是没有收到备用GTM的应答时,主用GTM再将自身当前存储的所有GTID全部同步到备用GTM中。
在一个可选的实施例中,上述主用GTM在将上述增量文件的内容同步到备用GTM中之后,上述方法还包括:主用GTM将进行了批量处理后的上述主用GTM中存储的GTID全部存入第一磁盘;上述主用GTM删除上述增量文件。在本实施例中,主用GTM可以定时将对自身存储的GTID进行全量持久化操作,即,将自身存储的全部GTID存入第一磁盘中,并且在进行了全量持久化操作之后,可以删除自身存储的增量文件,从而保证在有新的GTID处理消息时,可以继续写新的增量文件,这样可以节省主用GTM的存储空间,还可以保证增量持久化文件不至于过大,保证异常情况下的快速恢复。
在一个可选的实施例中,上述方法还包括:当主用GTM发生异常重新启动后,上述主用GTM读取主用GTM中存储的第一全量文件以及第一最新的增量文件,其中,该第一全量文件用于描述主用GTM在预定时刻存储的所有GTID,该第一最新的增量文件用于描述主用GTM中存储的GTID的变化信息;上述主用GTM在判断到第一最新的增量文件的生成时间晚于第一全量文件的生成时间时,上述主用GTM根据第一全量文件和第一最新的增量文件恢复存储主用GTM在重新启动之前实际存储的GTID;和/或,上述主用GTM在判断到第一最新的增量文件的生成时间早于第一全量文件的生成时间时,上述主用GTM仅根据第一全量文件恢复存储主用GTM在重新启动之前实际存储的GTID。在本实施例中,主用GTM在判断第一最新的增量文件的生成时间是否晚于第一全量文件的生成时间时,可以根据两个文件中的GTID的最大标识信息(该标识信息可以是与时间对应的,越晚生成的GTID,标识信息越大)进行判断。当然,也可以采用其他的方式进行判断。
在一个可选的实施例中,当上述主用GTM和备用GTM同时发生异常重新启动,上述主用GTM在恢复存储主用GTM在重新启动之前实际存储的GTID之后,上述方法还包括:主用GTM将恢复存储的GTID同步到备用GTM中。在本实施例中,当主用GTM在异常之前,可能会存在未同步到备用GTM中的GTID,当主用GTM在重启之后,可以将GTM中恢复存储的GTID同步到备用GTM中,从而保证了主备GTM中的GTID的同步。
在本发明实施例中还提供了一种运行于上述计算机终端的全局事务标识GTID的同步方法,图3是根据本发明实施例的第二种全局事务标识GTID的同步方法的流程图,如图3所示,该流程包括如下步骤:
步骤S302,备用全局事务协同中心GTM接收主用GTM同步的增量文件的内容,其中,该增量文件的内容用于描述主用GTM根据接收的两个以上GTID处理消息对主用GTM中存储的GTID进行的批量处理,其中,该GTID处理消息包括申请GTID消息和/或释放GTID消息,上述申请GTID消息用于请求主用GTM生成第一GTID,上述释放GTID消息用于请求主用GTM删除第二GTID;
步骤S304,上述备用GTM根据上述增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行批量处理。
通过上述步骤,采用主备GTM结合的方式进行数据存储,从而能够保证在单个GTM异常后,快速切换至另一个GTM中,保证GTID的准确度。并且,在进行GTID处理时,采用的是主用GTM批量指示备用GTM处理GTID的方式,能够在保证可靠性的同时最大限度降低时延和提高并发能力,有效提高GTID的处理效率。从而解决相关技术中存在的GTID的记录方式会出现磁盘易损坏,系统中断周期长,影响业务的正常运行的问题。
在一个可选的实施例中,上述备用GTM在根据增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行批量处理之后,上述方法还包括:备用GTM在确定执行上述批量处理成功之后,在预定时间内向主用GTM返回增量同步应答消息。
在一个可选的实施例中,备用GTM在根据增量文件的内容对备用GTM中存储的GTID进行处理时,可以会处理失败,或者处理成功后,但是未能在预定时间内反馈应答消息,在这些情况下,主用GTM会认为备用GTM操作失败,会向备用GTM进行全部GTID的同步,下面对该种情况下的操作进行说明:上述备用GTM在根据上述增量文件对备用GTM中存储的与主用GTM对应GTID进行所述批量处理之后,上述方法还包括:备用GTM接收来自主用GTM的进行了上述批量处理后的主用GTM中存储的全部GTID;上述备用GTM根据来自主用GTM的GTID更新备用GTM中存储的GTID。
在一个可选的实施例中,上述备用GTM在根据上述增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行上述批量处理之后,上述方法还包括:备用GTM将进行了批量处理后的备用GTM中存储的GTID全部存入第二磁盘;备用GTM删除上述增量文件。在本实施例中,备用GTM可以定时将对自身存储的GTID进行全量持久化操作,即,将自身存储的全部GTID存入第二磁盘中,并且在进行了全量持久化操作之后,可以删除自身存储的增量文件,从而保证在有新的GTID处理消息时,可以继续写新的增量文件,这样可以避免备用GTM中的不必要的内存占用,节省主用GTM的存储空间,还可以保证增量持久化文件不至于过大,保证异常情况下的快速恢复。
在一个可选的实施例中,上述方法还包括:当备用GTM发生异常重新启动后,上述备用GTM读取备用GTM中存储的第二全量文件以及第二最新的增量文件,其中,该第二全量文件用于描述备用GTM在预定时刻存储的所有GTID,第二最新的增量文件用于描述备用GTM中存储的GTID的变化信息;备用GTM在判断到第二最新的增量文件的生成时间晚于第二全量文件的生成时间时,备用GTM根据第二全量文件和第二最新的增量文件恢复存储备用GTM在重新启动之前实际存储的GTID;和/或,备用GTM在判断到第二最新的增量文件的生成时间早于第二全量文件的生成时间时,备用GTM仅根据第二全量文件恢复存储备用GTM在重新启动之前实际存储的GTID。在本实施例中,备用GTM在判断第一最新的增量文件的生成时间是否晚于第一全量文件的生成时间时,可以根据两个文件中的GTID的最大标识信息(该标识信息可以是与时间对应的,越晚生成的GTID,标识信息越大)进行判断。当然,也可以采用其他的方式进行判断。
在一个可选的实施例中,当上述主用GTM和备用GTM同时发生异常重新启动,备用GTM在恢复存储备用GTM在重新启动之前实际存储的GTID之后,上述方法还包括:备用GTM接收来自主用GTM的恢复存储的GTID;备用GTM根据来自主用GTM的恢复存储的GTID和备用GTM中恢复存储的GTID进行比较;备用GTM在根据比较结果确定来自主用GTM的恢复存储的GTID为最新的存储的GTID时,利用来自主用GTM的恢复存储的GTID更新备用GTM中恢复存储的GTID。在本实施例中,备用GTM在重启之后,恢复存储原有的GTID,并且根据来自主用GTM的GTID更新自身存储的GTID。需要说明的是,在实际应用中,当主备GTM同时发生异常重新启动之后,备用GTM可以不进行恢复存储的操作,而是直接接收来自主用GTM同步的GTID,并在备用GTM的内存中进行存储。
下面结合具体实施例对本发明进行说明:
针对相关技术中存在的上述问题,在本发明实施例中提供了一种高可用高速的GTID分发服务,本发明实施例中提供的高可用数据库事务分发器实现方法如下:
图4所示的系统架构图描述了本发明实施例中的系统结构。GTID由GTM双活热备(即,主用GTM和备用GTM)统一管理(申请、释放和维护当期活跃事务ID等);事务请求消息如果同时到达,对同时到达的消息做批量处理,提高吞吐量;GTM(包括主用GTM和/或备用GTM)运行过程中全局事务ID存储可以采用定时全量持久化和批量增量持久化结合的方式存储为二进制文件;GTM重启恢复数据时,先读取全量持久化文件(即,全量文件),再读取增量持久化文件(即,增量文件),恢复活跃事务ID的快照到GTM退出前的时刻。在保证数据的准确性的基础上,和存在在数据库中相比能最大限度的提升性能。
在本发明实施例中,GTM内部功能可以划分为消息分发模块、消息执行模块、数据持久化模块等,下面对个模块进行说明:
消息分发模块:负责将收到的proxy请求消息,根据Cluster ID转发至相应的消息执行模块。
消息执行模块:负责处理收到的外部请求消息,并进行GTID的批量增量存储,同时将内存信息同步至GTM备机模块(对应于上述的备用GTM)。
数据持久化模块:后台定时将激活的GTID全量持久化。
定时将激活的GTID持久化后,消息执行模块收到的新的proxy请求消息开始新的GTID增量持久化。
消息执行模块同时收到多条申请GTID消息、释放GTID消息时,会做批量处理,写一次增量文件,同时批量增量内容一次同步给备机。增量文件顺序存储申请、释放GTID记录内容,存储方式可以采用二进制,文件顺序写方式可以最大限度地提升写性能,快速返回,降低消息的回复时延。GTM采用双活的模式,双机间有心跳机制,双机内存批量增量同步更新。GTM重启恢复数据时,先读取定时全量持久化文件,再读取增量持久化文件,快速恢复活跃事务ID到GTM退出前的快照。为了提升性能,采用GTM主机(对应于上述的主用GTM)读取定时全量持久化加增量持久化,GTM备机内存存储同时定时全量持久化方式运行(GTM备机内存存储也可以先读取定时全量持久化加增量持久化);一旦发生主备快速切换,持久化方式同样做切换。双机同时异常后,重启后和对端GTM比较内存活跃事务ID数据后,确定主备关系,同时交换最新的活跃事务ID数据。
采用本发明实施例中的方案能够达到如下有益效果:GTM采用双活的模式,单个GTM异常时,切换速度快,提供高可用的能力;采用全量和增量存储结合、同时收到多条业务消息合并处理,采用文件顺序写的方式批量写一次增量记录,在保证可靠性的同时最大限度降低时延和提高高并发能力。文件顺序写增量文件的文件存储的效率优于一般的数据库存储解决方案。
如图4所示,本实施实施例中提供的是一种基于数据库事务分发的分布式系统,包括一个或多个数据服务代理服务器(图4中标记为proxy)、一个或多个访问数据库的客户端(图4中标记为client)、多个数据库节点设备(即DB节点,图4中标记为DB)。其中GTM按运行状态分为主用GTM(可以简称为主GTM或者主机)和备用GTM(可以简称为备GTM或者备机)。
图5是根据本发明实施例的系统流程图,如图5所示,本实施所提供的流程主要包括以下步骤:
步骤S501:主GTM收到申请GTID请求,消息分发模块将消息转发给消息执行模块,消息执行模块生成GTID;
步骤S502:主GTM的消息执行模块将生成的GTID存入内存;
步骤S503,504:主GTM收到释放GTID请求,消息分发模块将消息转发给消息执行模块,消息执行模块删除内存中对应数据;
步骤S505:消息执行模块批量的消息处理完成,采用文件顺序写的方式批量写增量文件;
步骤S506:将S501-S504步骤生成的增量内容作为一批一次同步到备GTM;
步骤S507:备GTM将增量内容存入内存;
步骤S508:备GTM向主GTM返回增量同步应答(对应于上述的增量同步应答消息);
步骤S509、510:主GTM收到备GTM增量同步应答后依次回S501、503请求的申请GTID、释放GTID应答。
图6是根据本发明实施例的GTM重启时的处理流程,如图6所示,本实施所提供的方法主要包括以下步骤:
GTM重启的时候,先读取全量文件,再读增量文件。读增量文件时候,比较增量文件里面的最大GTID和全量文件里面的最大GTID;当增量文件里面的最大GTID大于或者等于全量文件里面的最大GTID时,说明该增量文件有效,可以读取;如果增量文件里面的最大GTID小于全量文件里面的最大GTID,说明该增量文件无效,不用读取。
在本发明的实施例中,GTM实时增量持久化是可配置的,GTM的主机配置增量持久化,可以保证GTM的主机持久化GTID的准确性;GTM的备机配置增量持久化时候,主备GTM都一直在增量持久化,影响处理性能;可以配置GTM的备机处于非ACTIVE状态时候,不进行增量持久化,主GTM退出GTM的备机切换为ACTIVE状态时候,进行增量持久化;这样主备GTM保证一个GTM在进行增量持久化,保证GTM的主机持久化GTID的准确性。
在本发明的实施例中,GTM增量持久化GTID方式也是可配置的,GTID增量持久化时,有些设备在断电时无法保证将系统缓存的数据正确写入磁盘,这种情况下配置数据写入磁盘,牺牲系统处理性能,保证增量持久化GTID的准确性。对有备用电源的服务设备,GTID增量持久化时,在断电时可以保证将系统缓存的数据正确写入磁盘,这种情况下配置数据写入系统缓存,提高系统处理性能,同时也能保证增量持久化GTID的准确性。
在本发明的实施例中,GTM可以有三种工作状态,分别如下:
MODE_INACTIVE_GTID_NONVALID(无效模式),GTID无效不对外提供服务。
MODE_INACTIVE(非激活模式),GTID有效,作为备机处理主机的增量同步消息和全量同步消息,保证备机内存的GTID有效,当主GTM退出的时候,能够接替主机对proxy提供服务。
MODE_ACTIVE(激活模式),GTID有效,对proxy提供服务。
启动GTM状态切换如图7所示。
GTM被隔离/DOWN(退出)后,状态切换如图8所示。
GTM被隔离/DOWN(退出)后恢复,状态切换如图9所示。
为了保持主备机内存中活跃GTID完全一致,在本发明实施例中可以提供一种机制,主备机间增量同步超时的时候,可以从GTM主机向GTM备机同步全量GTID数据;
为了保持主备机内存中活跃GTID完全一致,GTM被隔离/DOWN(退出)后恢复,从处于MODE_ACTIVE状态的GTM向另外一台GTM同步全量GTID数据;
Proxy和GTM主备机间都维持链路,但GTM只有处于MODE_ACTIVE状态的时候向proxy提供GTID申请、释放及查询服务,GTM处于其它状态时候,向proxy返回失败;
在本发明实施例中还提供了一种机制,保证GTM主备机仅有一台机器处于MODE_ACTIVE状态向proxy提供服务;
在本发明实施例中,定时全量持久化和增量持久化可以配合实现,GTM中的消息执行模块定时将持久化内容传递给持久化模块全量持久化后,可以删除增量文件,当有新的申请GTID和释放GTID消息时候,再写新的增量文件,这样可以保证增量持久化文件不至于过大,异常情况下环境恢复快。
需要说明的是,在本发明实施中,消息执行模块可以按Cluster ID进行分组,每个Cluster可以有专用的消息执行模块为其服务,持久化也是按照集群的粒度保存。当然,也可以不分组提供服务,统一存储。
在本发明的实施中,可以有一组主备GTM,也可以部署多组主备GTM。通过配置多组连接的主备GTM组,可以提高服务性能和满足更高的容量需求。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了一种全局事务标识GTID的同步装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图10是根据本发明实施例的第一种全局事务标识GTID的同步装置的结构框图,该装置可以应用于主用全局事务协同中心GTM中,如图10所示,该装置包括第一接收模块102(对应于上述的消息分发模块)、第一处理模块104和同步模块106(第一处理模块104和同步模块106对应于上述的消息执行模块),下面对该装置进行说明:
第一接收模块102,用于接收两个以上GTID处理消息,其中,该GTID处理消息包括申请GTID消息和/或释放GTID消息,该申请GTID消息用于请求生成第一GTID,释放GTID消息用于请求删除第二GTID;第一处理模块104,连接至上述第一接收模块102,用于根据上述两个以上GTID处理消息对主用GTM中存储的GTID进行批量处理以及生成用于描述上述批量处理的增量文件;同步模块106,连接至上述第一处理模块104,用于将上述增量文件的内容同步到备用GTM中,其中,该增量文件的内容用于指示备用GTM对备用GTM中存储的与主用GTM对应GTID进行批量处理。
在一个可选的实施例中,上述第一处理模块104可以通过如下方式生成用于描述上述批量处理的增量文件:上述主用GTM按照对主用GTM中存储的GTID进行批量处理的顺序,采用顺序写的方式批量生成上述增量文件。在本实施例中,主用GTM是根据两个以上GTID处理消息对存储的GTID进行处理的,主用GTM还可以将上述的多个处理批量写成增量文件,并且仅需向备用GTM发送一次消息即可将上述的多个处理指示给备用GTM,从而避免了主用GTM和备用GTM之间的多次交互,降低时延,提供业务处理速度。
在一个可选的实施例中,上述装置还包括判断及处理模块,用于在将上述增量文件的内容同步到上述备用GTM中之后,判断在预定时间内是否接收到上述备用GTM在进行了批量处理后返回的增量同步应答消息;在判断结果为主用GTM在上述预定时间内接收到增量同步应答消息时,主用GTM根据该增量同步应答消息向发送GTID处理消息的发送端反馈GTID处理应答;和/或,在判断结果为上述主用GTM在预定时间内未接收到增量同步应答消息时,主用GTM将进行了批量处理后的主用GTM中存储的GTID全部同步到备用GTM中。在本实施例中,当主用GTM在预定时间(该预定时间可以是灵活设置的,例如1s、5s)内接收到备用GTM的应答时,说明备用GTM根据增量文件进行了GTID的处理,当为收到备用GTM的应答时,说明备用GTM在进行GTID处理时处理失败了,在该情况下,为了保证主用GTM和备用GTM中的数据的一致性,主用GTM可以将自身当前存储的所有GTID全部同步到备用GTM中,从而保证了主备GTM中存储的GTID的一致。当然,在实际应用中,当主用GTM在预定时间内没有收到来自备用GTM的应答时,主用GTM也可以再次向备用GTM发送上述增量文件(或者重复两次以上发送增量文件的操作),若再次向备用GTM发送增量文件之后,还是没有收到备用GTM的应答时,主用GTM再将自身当前存储的所有GTID全部同步到备用GTM中。
在一个可选的实施例中,上述装置还包括第一存储模块(对应于上述的数据持久化模块)及第一删除模块,其中,第一存储模块用于在将上述增量文件的内容同步到备用GTM中之后,将进行了批量处理后的上述主用GTM中存储的GTID全部存入第一磁盘;第一删除模块连接至上述第一存储模块,用于删除上述增量文件。在本实施例中,主用GTM可以定时将对自身存储的GTID进行全量持久化操作,即,将自身存储的全部GTID存入第一磁盘中,并且在进行了全量持久化操作之后,可以删除自身存储的增量文件,从而保证在有新的GTID处理消息时,可以继续写新的增量文件,这样可以避免主用GTM中的不必要的内存占用,节省主用GTM的存储空间,还可以保证增量持久化文件不至于过大,保证异常情况下的快速恢复。
在一个可选的实施例中,上述装置还包括第一读取及处理模块,用于当主用GTM发生异常重新启动后,读取主用GTM中存储的第一全量文件以及第一最新的增量文件,其中,该第一全量文件用于描述主用GTM在预定时刻存储的所有GTID,该第一最新的增量文件用于描述主用GTM中存储的GTID的变化信息;在判断到第一最新的增量文件的生成时间晚于第一全量文件的生成时间时,根据第一全量文件和第一最新的增量文件恢复存储主用GTM在重新启动之前实际存储的GTID;和/或,在判断到第一最新的增量文件的生成时间早于第一全量文件的生成时间时,仅根据第一全量文件恢复存储主用GTM在重新启动之前实际存储的GTID。在本实施例中,主用GTM在判断第一最新的增量文件的生成时间是否晚于第一全量文件的生成时间时,可以根据两个文件中的GTID的最大标识信息(该标识信息可以是与时间对应的,越晚生成的GTID,标识信息越大)进行判断。当然,也可以采用其他的方式进行判断。
在一个可选的实施例中,上述同步模块还用于当上述主用GTM和备用GTM同时发生异常重新启动,上述主用GTM在恢复存储主用GTM在重新启动之前实际存储的GTID之后,将恢复存储的GTID同步到备用GTM中。在本实施例中,当主用GTM在异常之前,可能会存在未同步到备用GTM中的GTID,当主用GTM在重启之后,可以将GTM中恢复存储的GTID同步到备用GTM中,从而保证了主备GTM中的GTID的同步。
图11是根据本发明实施例的第二种全局事务标识GTID的同步装置的结构框图,该装置可以应用于备用全局事务协同中心GTM中,如图11所示,该装置包括第二接收模块112、第二处理模块114,下面对该装置进行说明:
第二接收模块112,用于接收主用GTM同步的增量文件的内容,其中,该增量文件的内容用于描述主用GTM根据接收的两个以上GTID处理消息对主用GTM中存储的GTID进行的批量处理,其中,该GTID处理消息包括申请GTID消息和/或释放GTID消息,该申请GTID消息用于请求主用GTM生成第一GTID,该释放GTID消息用于请求主用GTM删除第二GTID;第二处理模块114,连接至上述第二接收模块112,用于根据上述增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行批量处理。
在一个可选的实施例中,上述装置还包括返回模块,用于在根据增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行批量处理之后,且在确定执行上述批量处理成功之后,在预定时间内向主用GTM返回增量同步应答消息。
在一个可选的实施例中,上述装置还包括更新模块,用于在根据上述增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行所述批量处理之后,接收来自主用GTM的进行了上述批量处理后的主用GTM中存储的全部GTID;根据来自主用GTM的GTID更新备用GTM中存储的GTID。
在一个可选的实施例中,上述装置还包括第二存储模块和第二删除模块,其中,该第二存储模块,用于在根据上述增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行上述批量处理之后,将进行了批量处理后的备用GTM中存储的GTID全部存入第二磁盘;第二删除模块,连接至上述第二存储模块,用于删除上述增量文件。在本实施例中,备用GTM可以定时将对自身存储的GTID进行全量持久化操作,即,将自身存储的全部GTID存入第二磁盘中,并且在进行了全量持久化操作之后,可以删除自身存储的增量文件,从而保证在有新的GTID处理消息时,可以继续写新的增量文件,这样可以避免备用GTM中的不必要的内存占用,节省主用GTM的存储空间,还可以保证增量持久化文件不至于过大,保证异常情况下的快速恢复。
在一个可选的实施例中,上述装置还包括第二读取及处理模块,用于当备用GTM发生异常重新启动后,读取备用GTM中存储的第二全量文件以及第二最新的增量文件,其中,该第二全量文件用于描述备用GTM在预定时刻存储的所有GTID,第二最新的增量文件用于描述备用GTM中存储的GTID的变化信息;在判断到第二最新的增量文件的生成时间晚于第二全量文件的生成时间时,根据第二全量文件和第二最新的增量文件恢复存储备用GTM在重新启动之前实际存储的GTID;和/或,在判断到第二最新的增量文件的生成时间早于第二全量文件的生成时间时,仅根据第二全量文件恢复存储备用GTM在重新启动之前实际存储的GTID。在本实施例中,备用GTM在判断第一最新的增量文件的生成时间是否晚于第一全量文件的生成时间时,可以根据两个文件中的GTID的最大标识信息(该标识信息可以是与时间对应的,越晚生成的GTID,标识信息越大)进行判断。当然,也可以采用其他的方式进行判断。
在一个可选的实施例中,上述更新模块还用于当上述主用GTM和备用GTM同时发生异常重新启动,备用GTM在恢复存储备用GTM在重新启动之前实际存储的GTID之后,接收来自主用GTM的恢复存储的GTID;根据来自主用GTM的恢复存储的GTID和备用GTM中恢复存储的GTID进行比较;在根据比较结果确定来自主用GTM的恢复存储的GTID为最新的存储的GTID时,利用来自主用GTM的恢复存储的GTID更新备用GTM中恢复存储的GTID。在本实施例中,备用GTM在重启之后,恢复存储原有的GTID,并且根据来自主用GTM的GTID更新自身存储的GTID。需要说明的是,在实际应用中,当主备GTM同时发生异常重新启动之后,备用GTM可以不进行恢复存储的操作,而是直接接收来自主用GTM同步的GTID,并在备用GTM的内存中进行存储。
在本发明实施例中还提供了一种全局事务标识GTID的同步系统,该系统包括主用全局事务协同中心GTM以及备用GTM,其中,该主用GTM用于执行以下操作:接收两个以上GTID处理消息,其中,该GTID处理消息包括申请GTID消息和/或释放GTID消息,该申请GTID消息用于请求生成第一GTID,该释放GTID消息用于请求删除第二GTID;根据上述两个以上GTID处理消息对主用GTM中存储的GTID进行批量处理以及生成用于描述上述批量处理的增量文件;将上述增量文件的内容同步到备用GTM中;上述备用GTM用于执行以下操作:接收主用GTM同步的增量文件的内容;根据该增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行上述批量处理。
可选地,上述主用GTM中所执行的动作与应用于主用GTM中的全局事务标识GTID的同步装置所执行的动作是对应的,在此,不再赘述。
可选地,上述备用GTM中所执行的动作与应用于备用GTM中的全局事务标识GTID的同步装置所执行的动作是对应的,在此,不再赘述。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S1,主用全局事务协同中心GTM接收两个以上GTID处理消息,其中,该GTID处理消息包括申请GTID消息和/或释放GTID消息,上述申请GTID消息用于请求生成第一GTID,上述释放GTID消息用于请求删除第二GTID;
S2,上述主用GTM根据两个以上GTID处理消息对主用GTM中存储的GTID进行批量处理以及生成用于描述上述批量处理的增量文件;
S3,上述主用GTM将上述增量文件的内容同步到备用GTM中,其中,该增量文件的内容用于指示上述备用GTM对备用GTM中存储的与主用GTM对应GTID进行批量处理。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:
S1,备用全局事务协同中心GTM接收主用GTM同步的增量文件的内容,其中,该增量文件的内容用于描述主用GTM根据接收的两个以上GTID处理消息对主用GTM中存储的GTID进行的批量处理,其中,该GTID处理消息包括申请GTID消息和/或释放GTID消息,上述申请GTID消息用于请求主用GTM生成第一GTID,上述释放GTID消息用于请求主用GTM删除第二GTID;
S2,上述备用GTM根据上述增量文件的内容对备用GTM中存储的与主用GTM对应GTID进行批量处理。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述各步骤。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。