专利名称:一种分布式数据同步系统及方法
技术领域:
本发明涉及一种数据同步系统及方法,特别涉及一种分布式数据同步系统及方 法,属于计算机技术领域。
背景技术:
随着信息技术的进步和应用系统数据的急剧增加,数据库需要及时存储和访问数 据。很多应用系统之间为了保证数据的一致,需要进行数据库数据的同步。数据库同步问题,大型数据库厂商在其主流数据库产品提出了同构复制技术,并 在此基础上提出了异构数据库复制技术。Oracle通过数据库转换器(Oracle Transparent (Gateway)来实现异构数据库同步,它是一种对称复制。DB2使用CCD (Consistent Change Data)表来实现异构复制。SyBase利用LTM(Log Transfer Manager)来实现异构复制,SQL Server提出出版者/预订者技术。目前,广泛应用于商业当中的数据库同步方案主要分为分布式数据库采用的数 据同步方法和同步中间件。一些独立软件开发商也开发出大量具有异构数据库同步功能的 软件和产品,其中比较著名的有=PeerDirect的PDRE,提出了一种基于控制表变化法的同 步方法。Syware的DataSync,采用影子表技术实现数据库同步。SynchroLogic的SyncKit, 采用基于API方法实现数据库同步。国内对于分布式异构数据库数据同步的研究,比较著名的系统有中国人民大学 的金仓数据库系统(KingBase)、东南大学的(ialaxy系统、国防科技大学的TTR、中科院软件 所对象技术中心承担的“石化应用软件示范工程”,它利用消息中间件ISMQ实现了实时数 据库环境下的数据同步。但是,目前国内外数据库同步的方案,主要针对的是存在中心节点的网络环境,由 中心节点控制数据库同步。对于无中心节点的网络环境中,怎样保持网络中每个节点数据 库中的数据实时一致,在国内外的研究中尚未见报道。无中心节点的网络环境,指网络中所 有节点地位相同,每个节点可以随时上线或下线,每个节点可以随时发起数据同步请求。
发明内容
本发明的目的是针对现有技术的缺陷,设计一种针对无中心节点网络环境的分布 式数据库同步系统和方法,实现实时、并发操作的分布式数据同步,保证网络中每个节点数 据库中的数据实时一致。本发明提供了一种分布式数据同步系统,包括通过网络连接的多个节点,其中每 个节点均包括数据库、节点状态表以及数据同步模块,其中节点状态表包括网络中每个节 点的IP地址、最高版本号和节点类型,最高版本号在节点第一次上线时设置为0,每执行一 次对数据库的修改操作最高版本号加1,节点类型分为决策节点、备份节点和普通节点;网 络中每个节点包括的数据库均拥有相同的数据库名、数据表名和数据表结构;数据同步模 块具体包括
节点上线初始化模块负责在节点新上线时通过节点类型选择模块,确定新上线 节点类型,然后向网络中其他节点发送上线消息,上线消息包括本节点的IP地址、最高版 本号和节点类型;在节点状态表中增加本节点信息;节点状态维护模块负责接收网络中其它节点的上线消息,修改节点状态表,并每 隔一定时间在网络中广播本节点的IP地址、最高版本号和节点类型;节点类型选择模块根据设置的节点类型选择策略确定本节点的节点类型;同步请求生成模块在本节点有数据同步请求时,生成数据同步操作序列;同步请求发送模块负责向网络中其他在线节点发送本节点的数据同步操作序 列;串行化调度模块负责接收网络中所有节点的数据同步操作序列,并将这些操作 序列串行化,形成串行化操作序列,序列中每个操作均对应一个版本号;决策调控模块如果是决策节点,则在有新上线节点且其最高版本号与决策节点 不一致时,向该节点发送使其最高版本号与决策节点一致的串行化操作序列;在网络中有 数据同步请求时,将决策节点最高版本号之后的串行化操作序列发送给网络中其他节点;同步更新接收模块接收从决策节点发送来的串行化操作序列;同步更新重发模块负责向决策节点发送重发串行化操作序列的请求,决策节点 也使用该模块接收其他节点发送的重发串行化操作序列的请求;同步更新执行模块网络中的节点根据接收的决策节点发送来的串行化操作序 列执行本地数据库操作,并更新最高版本号以及本地的串行化操作序列。本发明还提供了一种分布式数据同步方法,该方法使用上述分布式数据同步系统 实现数据同步,包括有数据同步请求时的数据同步和节点新上线时的数据同步,其中有数 据同步请求时的数据同步包括以下步骤步骤一、网络中有节点发起分布式数据同步请求,通过同步请求生成模块生成数 据同步操作序列;步骤二、所有发起数据同步请求的节点通过同步请求发送模块向网络中其他在线 节点发送本节点的数据同步操作序列;步骤三、网络中所有节点通过串行化调度模块接收网络中所有节点的数据同步操 作序列,并将接收到的数据同步操作序列串行化,形成串行化操作序列;步骤四、决策节点通过决策调控模块将串行化操作序列发送给网络中其他节点;步骤五、网络中的在线节点通过同步更新接收模块接收从决策节点发送来的串行 化操作序列;步骤六、网络中的在线节点将接收到的串行化操作序列中的版本号与本地节点 的最高版本号进行比较,如果串行化操作序列中的版本号是从本地节点的最高版本号+1 开始,并且版本号连续,则说明接收到的串行化操作序列正确,转到步骤九;否则转到步骤 七;步骤七、在线节点通过同步更新重发模块向决策节点发送重发串行化操作序列的 请求;步骤八、决策节点收到重发串行化操作序列的请求后,重新向该请求重发的节点 发送对应的串行化操作序列,转到步骤五;
步骤九、在线节点通过同步更新执行模块根据接收的决策节点发送来的串行化操 作序列执行本地数据库操作,并更新最高版本号以及本地的串行化操作序列;节点新上线时的数据同步包括以下步骤步骤一、节点新上线时,通过节点上线初始化模块确定新上线节点类型,向网络中 其他节点发送上线消息,在节点状态表中增加本节点信息;步骤二、新上线节点比较自身节点与决策节点的最高版本号信息,并进行判断,如 果新上线节点最高版本号小于决策节点最高版本号,则转到步骤三,否则转到步骤十;步骤三、新上线节点通过同步更新重发模块请求决策节点发送新上线节点最高版 本号之后的串行化操作序列;步骤四、决策节点通过决策调控模块将版本号从新上线节点最高版本号+1开始 到决策节点最高版本号的串行化操作序列发送给新上线节点;步骤五、新上线节点通过同步更新接收模块接收从决策节点发送来的串行化操作 序列;步骤六、新上线节点将接收到的串行化操作序列中的版本号与本地节点和决策节 点的最高版本号进行比较,如果串行化操作序列中的版本号是从本地节点的最高版本号+1 开始,并且版本号连续,直到版本号为决策节点的最高版本号为止,则说明接收到的串行化 操作序列正确,转到步骤九;否则转到步骤七;步骤七、新上线节点通过同步更新重发模块向决策节点发送重发串行化操作序列 的请求;步骤八、决策节点收到重发串行化操作序列的请求后,重新向新上线节点发送对 应的串行化操作序列,转到步骤五;步骤九、新上线节点通过同步更新执行模块根据接收的决策节点发送来的串行化 操作序列执行本地数据库操作,并更新最高版本号以及本地的串行化操作序列;步骤十、新上线节点通过节点状态维护模块每隔一定时间在网络中广播本节点的 IP地址、最高版本号和节点类型。有益效果本发明提出的分布式数据同步系统及方法在无中心节点的网络环境中,可以实现 实时、并发操作的分布式数据同步,保证在任意节点可以随时上线或下线的情况下,网络中 每个节点数据库中的数据实时一致。
图1、本发明所述系统中每个节点的结构图;图2、本发明所述方法的流程图。
图3、有节点上线或下线时的数据同步方法流程图。
具体实施例方式下面结合附图,具体说明本发明的优选实施方式。本实施例是根据本发明实现的一种分布式数据同步系统,它包括通过网络 连接的6个节点。图1为系统中每个节点的结构图。网络中6个节点的IP地址分 别为 192. 168. 1. 11,192. 168. 1. 12,192. 168. 1. 13,192. 168. 1. 14,192. 168. 1. 15、192. 168. 1. 16。每个节点本地使用的数据库为MySql数据库,每个节点的数据库名均为 testdb,数据库表名称为course,course中字段名及字段类型如表1所示。每个节点的数 据库的内容一致。表l.course表中的字段名及字段类型
数据库表字段名字段类型c_idint(3)c namevarchar(10)course表中的内容如表2所示。表2. course表中内容
c_idcname1Physics每个节点的数据同步模块具体包括节点上线初始化模块负责在节点新上线时通过节点类型选择模块,确定新上线 节点类型,然后向网络中其他节点发送上线消息,上线消息包括本节点的IP地址、最高版 本号和节点类型;在节点状态表中增加本节点信息;节点状态维护模块负责接收网络中其它节点的上线消息,修改节点状态表,并每 隔一定时间在网络中广播本节点的IP地址、最高版本号和节点类型;节点类型选择模块根据设置的节点类型选择策略确定本节点的节点类型;同步请求生成模块在本节点有数据同步请求时,生成数据同步操作序列;同步请求发送模块负责向网络中其他在线节点发送本节点的数据同步操作序 列;串行化调度模块负责接收网络中所有节点的数据同步操作序列,并将这些操作 序列串行化,形成串行化操作序列,序列中每个操作均对应一个版本号;决策调控模块如果是决策节点,则在有新上线节点且其最高版本号与决策节点 不一致时,向该节点发送使其最高版本号与决策节点一致的串行化操作序列;在网络中有 数据同步请求时,将决策节点最高版本号之后的串行化操作序列发送给网络中其他节点;同步更新接收模块接收从决策节点发送来的串行化操作序列;同步更新重发模块负责向决策节点发送重发串行化操作序列的请求,决策节点 也使用该模块接收其他节点发送的重发串行化操作序列的请求;同步更新执行模块网络中的节点根据接收的决策节点发送来的串行化操作序列 执行本地数据库操作,并更新最高版本号以及本地的串行化操作序列。日志处理模块维护日志文件,日志文件记录运行过程中的数据执行消息和错误 消息。本实施方式中,每个节点还包括共享内存和共享内存管理模块。共享内存管理模 块负责管理共享内存的读写;共享内存用于缓存本地节点的同步请求,存放数据同步操作 序列以及串行化操作序列。在本实施例中,进行数据同步前要对网络中新上线节点进行初始化。新上线节点 通过上线初始化模块修改节点状态表,通过节点类型选择模块确定新上线节点类型。节点类型选择模块根据设置的节点类型选择策略确定本节点的节点类型,节点类型选择策略可 以有很多种,例如根据节点上线顺序选择节点类型、根据节点在线时间选择节点类型、根据 节点处理速度选择节点类型等。本实施例中采用的节点类型选择策略如下当网络中有新上线节点时,新上线节点首先接收获得其他节点的状态信息,修改 本地节点状态表。当节点状态表中没有发现决策节点时即表示只有自身节点在线,则将本 节点定义为决策节点;当节点状态表中只存在决策节点时,则将本节点定义为备份节点; 当节点状态表中已经存在决策节点和备份节点时,则将本节点定义为普通节点。当网络中已有决策节点以及备份节点和其他普通节点的环境下当决策节点下 线,备份节点自动升级成决策节点,其他在线节点在本地节点状态表中删除已下线的决策 节点信息,并广播当前本节点状态;当决策节点在线,备份节点下线时,选择IP地址中最大 的节点作为新的备份节点,各在线节点在本地节点状态表中删除已下线的备份节点信息, 并广播当前本节点状态;当决策节点和备份节点同时下线时,选择在线节点中IP地址最大 的节点为当前的决策节点,选择在线节点中IP地址次大的节点为备份节点,各在线节点 在本地节点状态表中删除已下线的决策节点和备份节点信息,并广播当前本节点状态;当 普通节点下线时,不发生决策节点、备份节点的变更,各在线节点在本地节点状态表中删除 已下线普通节点的信息,并广播当前本节点状态。节点类型包括3种0表示普通节点;1表示备份节点;2表示决策节点。根据节点 类型选择策略,节点状态表的内容,如表3所示。表3.节点状态表
权利要求
1.一种分布式数据同步系统,其特征在于,包括通过网络连接的多个节点,其中每个节 点均包括数据库、节点状态表以及数据同步模块,其中节点状态表包括网络中每个节点的 IP地址、最高版本号和节点类型,最高版本号在节点第一次上线时设置为0,每执行一次对 数据库的修改操作最高版本号加1,节点类型分为决策节点、备份节点和普通节点;网络中 每个节点包括的数据库均拥有相同的数据库名、数据表名和数据表结构;数据同步模块具 体包括节点上线初始化模块负责在节点新上线时通过节点类型选择模块,确定新上线节点 类型,然后向网络中其他节点发送上线消息,上线消息包括本节点的IP地址、最高版本号 和节点类型;在节点状态表中增加本节点信息;节点状态维护模块负责接收网络中其它节点的上线消息,修改节点状态表,并每隔一 定时间在网络中广播本节点的IP地址、最高版本号和节点类型;节点类型选择模块根据设置的节点类型选择策略确定本节点的节点类型; 同步请求生成模块在本节点有数据同步请求时,生成数据同步操作序列; 同步请求发送模块负责向网络中其他在线节点发送本节点的数据同步操作序列; 串行化调度模块负责接收网络中所有节点的数据同步操作序列,并将这些操作序列 串行化,形成串行化操作序列,序列中每个操作均对应一个版本号;决策调控模块如果是决策节点,则在有新上线节点且其最高版本号与决策节点不一 致时,向该节点发送使其最高版本号与决策节点一致的串行化操作序列;在网络中有数据 同步请求时,将决策节点最高版本号之后的串行化操作序列发送给网络中其他节点; 同步更新接收模块接收从决策节点发送来的串行化操作序列; 同步更新重发模块负责向决策节点发送重发串行化操作序列的请求,决策节点也使 用该模块接收其他节点发送的重发串行化操作序列的请求;同步更新执行模块网络中的节点根据接收的决策节点发送来的串行化操作序列执行 本地数据库操作,并更新最高版本号以及本地的串行化操作序列。
2.根据权利要求1所述的一种分布式数据同步系统,其特征在于,所述节点还包括共 享内存,所述数据同步模块还包括共享内存管理模块,共享内存管理模块负责管理共享内 存的读写;共享内存用于缓存本地节点的同步请求,存放数据同步操作序列以及串行化操 作序列。
3.根据权利要求1或2所述的一种分布式数据同步系统,其特征在于,所述数据同步模 块还包括日志处理模块,负责维护日志文件,日志文件记录运行过程中的数据执行消息和 错误消息。
4.一种分布式数据同步方法,该方法使用权利要求1所述系统实现分布式数据同步, 其特征在于,网络中有数据同步请求时,实现数据同步的步骤包括步骤一、网络中有节点发起分布式数据同步请求,通过同步请求生成模块生成数据同 步操作序列;步骤二、所有发起数据同步请求的节点通过同步请求发送模块向网络中其他在线节点 发送本节点的数据同步操作序列;步骤三、网络中所有节点通过串行化调度模块接收网络中所有节点的数据同步操作序 列,并将接收到的数据同步操作序列串行化,形成串行化操作序列;步骤四、决策节点通过决策调控模块将串行化操作序列发送给网络中其他节点; 步骤五、网络中的在线节点通过同步更新接收模块接收从决策节点发送来的串行化操 作序列;步骤六、网络中的在线节点将接收到的串行化操作序列中的版本号与本地节点的最高 版本号进行比较,如果串行化操作序列中的版本号是从本地节点的最高版本号+1开始,并 且版本号连续,则说明接收到的串行化操作序列正确,转到步骤九;否则转到步骤七;步骤七、在线节点通过同步更新重发模块向决策节点发送重发串行化操作序列的请求;步骤八、决策节点收到重发串行化操作序列的请求后,重新向该请求重发的节点发送 对应的串行化操作序列,转到步骤五;步骤九、在线节点通过同步更新执行模块根据接收的决策节点发送来的串行化操作序 列执行本地数据库操作,并更新最高版本号以及本地的串行化操作序列。
5.根据权利要求4所述的一种分布式数据同步方法,其特征在于,还包括节点新上线 时的数据同步方法,包括以下步骤步骤一、节点新上线时,通过节点上线初始化模块确定新上线节点类型,向网络中其他 节点发送上线消息,在节点状态表中增加本节点信息;步骤二、新上线节点比较自身节点与决策节点的最高版本号信息,并进行判断,如果新 上线节点最高版本号小于决策节点最高版本号,则转到步骤三,否则转到步骤十;步骤三、新上线节点通过同步更新重发模块请求决策节点发送新上线节点最高版本号 之后的串行化操作序列;步骤四、决策节点通过决策调控模块将版本号从新上线节点最高版本号+1开始到决 策节点最高版本号的串行化操作序列发送给新上线节点;步骤五、新上线节点通过同步更新接收模块接收从决策节点发送来的串行化操作序列;步骤六、新上线节点将接收到的串行化操作序列中的版本号与本地节点和决策节点的 最高版本号进行比较,如果串行化操作序列中的版本号是从本地节点的最高版本号+1开 始,并且版本号连续,直到版本号为决策节点的最高版本号为止,则说明接收到的串行化操 作序列正确,转到步骤九;否则转到步骤七;步骤七、新上线节点通过同步更新重发模块向决策节点发送重发串行化操作序列的请求;步骤八、决策节点收到重发串行化操作序列的请求后,重新向新上线节点发送对应的 串行化操作序列,转到步骤五;步骤九、新上线节点通过同步更新执行模块根据接收的决策节点发送来的串行化操作 序列执行本地数据库操作,并更新最高版本号以及本地的串行化操作序列;步骤十、新上线节点通过节点状态维护模块每隔一定时间在网络中广播本节点的IP 地址、最高版本号和节点类型。
全文摘要
本发明涉及一种分布式数据同步系统及方法,包括通过网络连接的多个节点,其中每个节点均包括数据库、节点状态表以及数据同步模块,数据同步模块具体包括节点上线初始化模块、节点状态维护模块、节点类型选择模块、同步请求生成模块、同步请求发送模块、串行化调度模块、决策调控模块、同步更新接收模块、同步更新重发模块、同步更新执行模块。本发明还提供了利用所述系统实现数据同步的方法。本发明提出的分布式数据同步系统及方法在无中心节点的网络环境中,可以实现实时、并发操作的分布式数据同步,保证在任意节点可以随时上线或下线的情况下,网络中每个节点数据库中的数据实时一致。
文档编号H04L29/08GK102088489SQ201010624118
公开日2011年6月8日 申请日期2010年12月31日 优先权日2010年12月31日
发明者包成刚, 李侃 申请人:北京理工大学