王珏 孟晓蕊
摘 要: 针对分布式数据库系统中对等模式下副本一致性的问题,设计了一个基于中间件的数据库同步系统。该系统利用中间件实现数据库同步的目的,通过事务管理模块、冲突检测模块、通信模块、事务执行模块完成事务的捕获、分析以及对冲突事务的检测和处理。实验结果表明,由于冲突在本地得到检测和处理,与两阶段协议(2PL)相比,基于中间件的数据库同步系统降低了事务的响应时间,减少了不必要的通信,提升了系统的性能。
关键词: 数据库同步; 对等模式; 中间件; 冲突检测
中图分类号: TN915?34; TP311.133.1 文献标识码: A 文章编号: 1004?373X(2016)09?0031?06
Abstract: To improve the duplicate consistency under peer?to?peer pattern in distributed database system, a middleware?based database synchronization system was designed. The middleware is used to realize the database synchronization in the system to capture and analyze the transaction with transaction management module, collision detection module, communication module and transaction execution module, and then detect and treat with the conflict transaction. The experimental results show that, in comparison with the two?phase locking (2PL), the middleware?based database synchronization system can reduce the response time of the transaction due to the conflict detected and treated at local, decrease the unnecessary communication, and improve the system performance.
Keywords: database synchronization; peer?to?peer pattern; middleware; conflict detection
0 引 言
随着信息时代的到来,网络技术进一步发展和普及,基于分布式数据库的应用系统越来越广泛,像电子购物系统、银行管理系统等。在这些分布式应用中,通常会引入多个数据副本。一方面用户只需要访问本地副本中的数据,减少通信消耗和访问延迟,从而提高应用的性能;另一方面,多个地方的数据副本同时提供服务,数据的吞吐量得到成倍的提升,且系统不会因为一个数据副本的故障导致整个应用的瘫痪,增强了数据的有效性和系统的可靠性[1?3]。如何保证分布式数据库中数据副本的一致性显得非常重要,也一直是数据库应用中的热门问题。
目前,在现有的分布式数据库同步解决方案中,对于异地并发的事务,大部分解决方案采用两阶段锁来解决并发的问题,从而实现副本一致性。但这种锁机制会导致效率低、响应慢,从而使得整个应用系统的可靠性下降。因此,本文基于中间件技术,面向对等模式的同步需求,通过对事务的捕获、分析以及冲突检测,实现对等模式的数据库同步。
1 数据库同步
1.1 基本概念
数据库同步[3?7]是指在数据库系统中,存在两个或者多个数据库,通过技术手段将其中一个数据库中的数据传播到其他数据库中,从而保持所有数据库中的统一数据对象完全一致。因此,在基于数据库的系统中,某一个数据库中的数据发生改变,其他数据库中的数据也要随之发生改变,从而保证应用需要。
在分布式数据库系统中,往往会将同一数据放在多个节点的数据库中,引入数据副本,提高系统的性能和可靠性。针对这种情况,由于多个节点均可以对同一数据进行操作,所以要保持所有节点数据一致,确保系统正常运转。
1.2 同步模式
数据库同步模式有主从模式和对等模式[4]。主从模式的同步原理是指只有一个节点能够提供数据的更新服务,称为主节点,其他节点数据库称为从节点。从节点只可以接收数据查询操作,而主节点可以接收查询和更新操作。主从节点分散在不同的地理位置,从而可以快速实现分布式查询服务,并能够分散分布式数据库系统的查询压力。由于更新操作仍然集中在一个节点的数据库中,所以当更新操作数量较大时,数据库仍要承担大量的更新操作,会降低系统性能,同时,当主节点出现故障,系统就无法提供更新服务,容错能力较差。
对等模式中,所有节点的数据库副本都可以提供数据的查询和更新服务,既可以平衡系统的更新压力和查询压力,又提高了系统的性能。当某一个节点发生故障,其他节点仍然能够提供查询服务和更新服务,进一步提高了系统的容错能力。
2 对等模式数据库同步系统的设计与实现
2.1 系统模型
在分布式数据库中,多个数据副本均能提供数据的读写服务,即每个节点的数据副本相互之间地位对等,功能相同。因此,在同步系统的设计中,这些数据副本所在的节点构成一个组,组内每个成员通过同步系统中的通信模块进行同步数据的交互,从而保证数据副本的一致性。系统的结构如图1所示。
根据数据副本所分的组中,副本与副本直接是通过网络相连的,每个副本所在的逻辑单位称为节点,每个节点由两个部分组成[6?7]:
(1) 数据库同步中间件
对等模式下的分布式数据库系统中每个节点都可以进行数据的读写。数据库同步中间件对用户透明,同步系统通过中间件对用户提交的读写事务进行实时监控和拦截并加以分析,当分析到用户提交的是含有写操作的事务时,就进行节点之间的同步数据通信,检测并发事务是否存在冲突,从而使每个节点中的数据副本实时保持一致性。
(2) 数据库系统
分布式数据库的每个节点都安装有数据库系统,用于存放应用的数据信息。对于面向该节点应用的用户来说,节点中的数据库系统成为本地数据库(或本地副本),其他节点相对于用户来说,是远程节点,所以其他节点上的数据库系统也称为远程数据库(或远程副本)。
2.2 系统功能模块
各节点之间通过数据同步中间件进行数据交互,如图2所示。根据数据交互关系,将所设计的数据库同步中间件划分为事务管理模块、通信模块、冲突处理模块和事务执行模块四个主要功能模块。分布式环境下,每个节点都布置同步中间件,中间件的功能模块分别处理各自的任务,最终实现所有节点副本同步进行事务更新,从而保障分布式数据库中所有副本的数据一致性[2,7]。
2.2.1 事务管理模块
数据库同步中间件对用户透明,用于监测用户对数据的操作,当监测到用户提交的事务处理操作时,首先对该事务处理操作进行捕获,然后对捕获到的事务进行判断处理。针对事务的捕获功能和事务的解析功能,又将事务管理模块划分为事务捕获子模块和事务解析子模块。
2.2.2 冲突处理模块
由于分布式环境下会出现多个节点同时对同一数据进行操作,从而产生冲突的情况。所以分布式数据库同步系统中需要对并发事务进行冲突处理。
在冲突处理中,主要的任务是检测用户提交的事务是否存在冲突,冲突类型分为读操作冲突和写操作冲突。其中读操作冲突是指读取的数据正在被更新,写操作冲突是指要修改的数据正在被并发事务修改。到该事物与正在执行的并发事务存在冲突时,返回中止信息,中止检测的事务,从而使所有的并发事务实现所有副本可串行化。
由于应用中用户提交的事务一般读操作的数据量较大,考虑到通信的消耗,将读操作在本地副本执行,不向其他节点发送读操作,从而减少系统的通信量。所以在本地节点,首先对提交的事务进行冲突检测,当冲突检测通过才将事务信息进行发送[8?13]。
冲突处理流程如图3所示,算法如下:
(1) 本地写冲突检测
对提取出来的写操作集合进行检测,与本地事务队列中的操作进行比对,若发现有其他并发事务修改同一数据对象,则改事务与其他事务存在写冲突,进入步骤(3),否则进入步骤(2)。
(2) 读冲突检测
① 将写操作集合加入到本地事务队列中;
② 判断该事务是否为本地事务,若不是本地事务,则冲突检测结束;
③ 若是本地事务,则提取数据队列中存放的该事务的读操作集合。对读操作集合进行读冲突检测,若存在冲突,则返回abort信息,冲突检测结束;
④ 若不存在读冲突,返回commit信息,冲突检测结束。
(3) 本地事务检测
① 判断写操作集合是否为本地事务,若不是本地事务,冲突检测结束;
② 若是本地事务,将本地数据队列中存放该事务对应的数据信息删除,释放空间,冲突检测结束。
2.2.3 通信模块
数据库同步中间件相互之间通过通信模块进行数据传输。通信模块的主要功能是将系统中的同步数据有序地传送到每一个成员节点上,副本节点上的数据库同步中间件的通信模块接收所有成员节点发送的同步信息和同步数据。在设计中,考虑便于到同步数据的转换和解析,结合XML的特性,将同步的数据和信息通过通信模块封装成XML格式信息,将信息通过网络发送给其他成员节点。其他副本节点接收到XML信息后,对其进行解析,并根据解析出来的信息对数据进行操作。由于需要对同步数据进行封装、解析以及发送和接收,所以同步中间件的通信模块分为数据发送/接收子模块和数据解析/封装子模块。
在XML格式同步信息中,主要有三大类消息:组成员管理消息、事务同步消息和异常处理消息。其中组成员管理信息主要包括同步系统中节点离线/上线,加入/退出的消息;事务同步消息中主要包括事务的提交/中止信息和更新事务的写操作集合信息;异常处理消息包括同步异常消息、节点状态异常消息等。
数据库同步信息具体说明如表1所示。
2.2.4 事务执行模块
事务执行模块负责处理本节点中通过冲突检测后的事务,通过调用数据库访问接口将事务提交到本地数据库,获取事务执行的结果和异常信息。
用户提交的事务执行流程如图4所示,算法如下:
(1) 本地事务检测
① 接收到提交信息,根据事务ID,从本地队列中提取该事物的写操作结合;
② 根据事务信息判断该事务是否为本地事务,若是本地事务,进入步骤(2),否则进入步骤(3)。
(2) 本地事务处理
① 根据事务ID,从队列中将该事物的读操作集合提取出来;
② 将读操作集合和写操作集合按照顺序合并,恢复成事务提交状态,进入步骤(3)。
(3) 执行事务
① 根据本地节点的数据库接口连接数据库,并在数据库中执行用户提交的事务;
② 若改事务执行成功,则返回事务执行的结果,否则返回事务执行的异常信息。
3 对等模式下分布式数据库同步协议
3.1 基本思想
由于在分布式数据库中,副本数据存放在不同地方的数据库节点中,所以同一时间段执行的事务除了本地节点中提交的事务,还包含了所有远程节点上用户提交的事务的集合。要使分布式数据库中所有节点副本的数据达到一致,就需要从全局角度对同一时间段所有并发事务进行冲突检测和处理。