基于消息队列的分布事务处理的实现(3个人的团队)

 2023-02-24 09:02

论文总字数:9483字

1 概 述 2

1.1 课题背景 2

1.2 课题目的 3

1.3 章节小结 3

2 技术介绍 3

2.1 分布式数据库的定义 3

2.2 事务概念 3

2.3 前滚概念 4

2.4 两阶段提交协议2PC 5

2.6 MyEclipse简介 5

2.7 ActiveMQ简介 6

2.8 VMware Workstation 简介 6

2.9 MySQL简介 6

3. 系统概要设计 8

4. 系统详细设计 9

1 概 述

1.1 课题背景

随着网络的普及和发展,对于消息的共享和处理越来越重要,数据库与网页技术的结合也越来越密切,单纯的集中式数据库已经满足不了网页的需求,因此数据库从集中式向分布式发展是不可逆转的趋势,能处理分散在不同网络节点的分布式数据库是一个重要的研究方向。

集中式数据库系统的不足主要表现在:

  1. 数据都存放在一个节点上,使用集中式处理,通信所耗费的资源太大。
  2. 数据库都在同一台计算机上运行,一旦这台重要的计算机发生故障,那么整个系统的运行都会陷入瘫痪,系统的可靠性太低。

因此集中式数据库并不能满足客户的需要。为了提高事务的处理速度,增强数据库系统的可靠性以及减少网络通信的成本,分布式数据库必须存在。

对于分布式数据库来说,数据要分布在不同的节点上,可保证减少单节点甚至多节点失效时,冗余的数据副本也能保证系统的可用性。由此就存在维护数据的数据同步的问题。目前有很多方法可以来实现事务的一致性,但都有一定的局限性。目前普遍采用的2PC两阶段提交协议也有很大的缺陷。主要有以下两个缺陷:

  1. 效率太低,响应太慢:节点数越来越多,系统将大量的资源用于回答各个节点的应答,

延长了事务完成的时间。

2)降低了系统的可靠性:如果参与了分布事务的某一个节点由于某些故障或者网络的问 题,会导致其他节点无法继续处理数据,从而降低了系统的可靠性。

本文设计了一种基于消息队列的较为有效的、使用的维护数据一致性的分布式数据库事务处理系统。主要实现了事务的前滚和事务的一致性的达成。

1.2 课题目的

本文根据分布式数据库的相关技术,ActiveMQ和XML技术,大致使用消息队列完成了事务的前滚以及事务最终的一致性,其中事务的一致性通过故障处理机制,数据的完整性检查来保证。

1.3 章节小结

这一个章节主要介绍了当前数据库应用的背景以及面临的问题,根据这个背景,我选定了这次的课题——基于消息队列的分布事务处理的实现。本章节重点介绍了集中式数据库的大部分缺点以及分布式数据库的优点,通过比较我们不难发现分布式数据库的优越性,集中式数据库被淘汰是不可避免的。同时我也发现了一些难点,比如站点之间的通信以及XML文件的读取。这是两个比较难以解决的问题,但是本论文注重于消息队列的分布事务处理,因此对这些不多做描述。

2 技术介绍

2.1 分布式数据库的定义

分布式数据库就是一个将逻辑上属于同一个系统的,分布在网络的若干节点上的数据集合,这些节点具有自主的处理能力以及事务应用能力。每个节点的计算机都至少有一个参与全局的执行。

2.2 事务概念

事务处理是为了保持系统的完整性(通常是一个数据库或一些现代文件)在一个已知的、一致的状态,以确保相互依存的操作上的系统是所有成功完成或取消成功。

举例来说,考虑一个典型的银行事务,包括从客户的储蓄帐户移动700美元到客户的支票帐户。本次事务涉及至少两个独立的计算机术语:

储蓄账户借记700美元,并将该支票帐户计入700美元。如果操作成功,别的不说,在一天结束的时候银行的记录将不再平衡。 因此必须有一种方式,以确保无论是操作成功或失败,银行的数据库作为一个整体不存在任何不一致的数据。

事务处理在一个单一的、不可分割的事务中链接多个单独的操作,并确保在事务中的所有操作都没有错误,或者全部错误。如果一些操作完成但错误发生时,其他人都在申请,事务处理系统“回滚”的所有事务的操作(包括成功的操作),从而消除一切痕迹的事务,将系统恢复到一致状态,也就是之前的事务处理开始。如果所有的操作事务完成后,事务是由系统提交,所有的数据库的变化是永久性的,反式行动不能回滚。

事务处理防范那些可能导致事务只有一部分部分完成的硬件和软件错误。如果计算机系统在事务的中间崩溃,事务处理系统保证任何未提交的事务的所有操作都会被取消。

一般而言,事务是并行发行的。如果它们重叠(即需要接触到数据库中的相同部分),就可以创建冲突。例如,如果客户提到的例子上面有150美元在他的存款和试图转移100美元到一个不同的人同时移动100美元的支票账户,其中只有一个能成功。而且,强迫处理顺序是无效的。因此,并发的事务处理是被设计成保证最终的结果反映冲突的结果,同样可以在事务执行顺序地以任何顺序达到(即所谓的串行化)。在我们的例子中,这意味着无论是哪一项事务是第一次发行,要么转移到一个不同的人或移动到支票帐户的成功,而另一个失败。

事务的特性如下:

1)原子性:

一个事务的状态变化是原子的:要么全部发生要么全部不发生。这些变化包括不限于数据库的变化,信息和传感器的动作。原子性要求某个事务由于某些原因而中断时,它的的部分结果也被取消。一般来说,事务中止和系统故障是事务被中断的原因主要原因。事务可以自己来请求一个事务的中止,也可以因为和系统有关的缘由而由系统来强制中止。在出现事务中止时维持其原子性的举措称之为事务恢复,而在系统故障时触发的举措称之为故障恢复。

2)一致性:

一个事务是一个一致的转换状态。作为一个群体,采取的操作不能违反相关状态的完整性约束。保证事务一致性的举措称为并发控制。如果系统提供了可操作的并发控制的话,程序员可以像单独执行的事务一样来编写他们。

3)分离性:

即使事务同时执行,但是对每一个事务T,其他事务总是在其之前或之后执行,而不是两者都是。

4)耐久性:

一旦事务完成成功(提交),它的状态变化为生存故障状态。因为系统保存的事务的提交结果是存储在数据库中的,所以我们将提供事务耐久性的措施称为数据库的恢复。

2.3 前滚概念

它也可以保持一个单独的所有修改期刊数据库管理系统。(有时也被称为后图像)。这是不需要回滚失败的事务,但它在数据库管理系统中,在数据库失败的情况下更新数据库管理系统是非常有用的,因此一些事务处理系统提供了它。如果数据库管理系统完全失败,它必须是从最近的备份恢复。备份将不会反映自备份以来所犯的事务。然而,一旦数据库管理系统恢复后,该杂志图像可以被应用到数据库(前滚)带来的数据库管理系统的更新。任何事务,在失败的时候可以回滚。结果是一个处于一致的,已知的状态数据库,包括所有事务的结果,提交到的那一刻的失败。

2.4 两阶段提交协议2PC

在两阶段提交协议中,具有协调功能的代理者被我们称为协调者;除协调者以外的所有其他代理者称为参与者。协调者负责且仅仅负责做出最终的撤销或提交决定,参与者不进行其他动作,只负责该节点事务的动作。

2PC的基本思想就是为全部参与者做出唯一性的撤销或提交所有该节点子事务决定。只要有其中有一个参与者无法在本地提交其子事务,那么所有参与者必须本地撤销。

2.5 消息队列

消息队列主要采用存储—转发的通信方式。应用程序通过消息队列,相互交换消息。消息的容器就是队列。应用程序发出的消息存放到发送队列;接受队列是存放从应用程序发送过来的消息;在接收和发送消息时,先将消息存放在缓存队列。如果发送或接收过程中,遇到故障,可利用缓存队列重新传输消息。只有当完成消息传输后,才将消息从发送队列和缓存队列中删除;存储队列将接收和发送的消息保存到磁盘,在系统出现故障时进行消息恢复。

队列的排队机制主要分为四种:

  1. 先进先出(FIFO)

先到达先处理,后到达后处理,这是FIFO的数据结构原理

  1. 优先排队(Priority)

在系统中使用多个队列,每个队列根据严格的优先机制具有从高到低的优先级别,然后 按照级别的高地先后处理。每个队列中,所有消息的优先级别是一致的,每一个优先级别都 拥有单独的消息队列,对于每个单独的队列中消息采用FIFO排队算法:当发生阻塞时,就 会丢弃优先队列低的消息。

  1. 公平排队(FairQueuing)

公平排队解决了消息“饿死”问题。公平排队机制按照从高到低的优先级别分配了不同 比例的处理能力,按照优先级从高到低顺序进行循环处理,这样就能保证低优先级的数据包 也能得到处理。但公平排队也有一定的问题,他会导致短小的数据包因等待一个长数据包的 处理而空闲很长时间。

  1. 加权公平排队(Weighted Fair Queuing)

加权公平排队是对优先级排队和公平排队的一种改进。他是一种基于数据流的排队算法, 通过权重来划分通信队列的带宽,替代动态的 公平的排队方式。加权公平排队的主要目标是 为各种网络用户提供公平一致的服务,减少延迟变化,为数据流提供可预测的吞吐量和响应 时间

2.6 MyEclipse简介

MyEclipse是对EclipseIDE的扩展,是我们最常用的工作平台之一,使用它可以大大的提高我们在J2EE和数据库方面的工作效率。它能支持包括不限于SSH在内的诸多框架和平台,功能十分丰富,拥有完整的编码,编译运行以及测试功能。

MyEclipse 是一个十分优秀的插件集合,关键是他迟滞各种开源产品,虽然它是收费的,但是瑕不掩瑜,这并不能掩盖它强大的功能以及广泛的应用范围。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

2.7 ActiveMQ简介

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

2.8 VMware Workstation 简介

VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。

具有以下特性:

1、使用Unity来集成客户机与宿主机.

2、更加强大的VM录制与回放功能.

3、支持智能卡和相关读卡器.

4、增强型ACE.

5、改进型3D图形支持.

2.9 MySQL简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

2.10 XML文件简介

XML(可扩展标识语言)是SGML的一个简化子集,他将SGML的丰富的功能与HTML的实用性融合到了一起,用一种自我的开放的描述方式去重新定义了数据结构,他能够很好的突出对于数据结构的描述,从而体现出数据与数据之间的关系。这样组织好的数据对于应用程序和程序员来说都是相当友好的,它能够最大程度的满足人们日益增长的对于web服务功能的需求。XML是一种界定文本数据的简便而标准的方法,跟HTML注重数据及其表达方式不同,XML仅仅关心数据本上。XML的优势在于它是可以被用户定义的标记环绕,可以在数据库中进行无损的事务操作。它所封装的信息只要简单的添加一下标记就可以被描述出来,这种机制让XML成为Internet上共享信息的重要途径之一。因为,它是开放的,不管是什么平台,它都能够在不同的用户和程序之间交换数据。因此XML作为信息的载体是再好不过的选择了。

XML几乎可以说是没有事先定好的标记的,它是有用户在需要时可以自主定义自己的标记,但是使用自定义标记建立的标记和文档并不是可以随意的,必须要遵循一定的规则。只有遵守这些规则的文档才会被认为是结构完整的。XML处理器和浏览器最起码的标准就是结构完整性。这些规则如下:

  1. 文档必须要以lt;? xml version=”1.0”gt;开始,即必须加以XML声明,出去那些看不见的字节顺序,在声明之前不能有任何代码,包括空格在内。该声明定义了正被使用的XML的版本,字符集等信息。
  2. XML文件中的元素都必有开始和结束标记,另外XML语法对大小写敏感。
  3. 在XML中有且只能有一个根元素包含其他元素。
  4. 元素之间不允许交叉嵌套。
  5. 属性值必须加引号。

XML由于其良好的数据格式,高度结构化,可扩展性和网络传输的便利性而具有了卓越的表现,它可以设计与特定领域有关的标记语言,而不必去担心是否用特定的软件来交流信息。而且它完成了不同性质的系统间的通信,只要这些系统之间安装了XML解析器,就可以解读另外系统传输过来的信息。并且由于其良好的压缩性,很大程度上降低了服务器的压力,可以开发出更为灵活和高效的web应用软件。同时它良好的数据格式保证了检索行为的简单和高效。

2.11 JDK简单介绍

所谓的JDK就是一个软件开发所使用的工具包,主要是为Java服务的,我设计的这个系统使用了JDK进行开发

JDK包含的基本组件包括:

编译器主要负责将源程序转成字节码。

打包工具主要负责将相关的类文件打包成一个文件

文档生成器主要负责从源码注释中提取文档

查错工具

java – 命令主要负责运行编译后的java程序(.class后缀的)

小程序浏览器主要负责一种执行HTML文件上的Java小程序的Java浏览器。

Javah主要负责产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。

Java反汇编器主要负责显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

Jconsole主要负责Java进行系统调试和监控

2.12 章节小结

本章节主要论述了本论文需要用到的工具以及基本概念,首先是分布式数据库的概念,这是本论文的基础,其次是事务的概念和特性,这是很重要的概念,因为我们要做的就是事务的分布处理。再来就是2PC两阶段提交协议,我们的目标之一就是改进2PC两阶段提交协议。再接着就是前滚的概念,我承认我花了很长时间去理解前滚和回滚的区别,并最后做出决定,他们一个是完成未完成的事务,一个是撤销已完成的事务,接下来就是本论文的重点,也就是消息队列,他的作用是十分重要的,他需要完成数据库的前滚并保持数据的一致性。再来就是各种工具的介绍了,MyEclipse是java开发时使用的工具,JDK则是工具包,VMware是用来布置分布式数据库的,ActiveMQ用来实现消息队列,另外mysql用来建立数据库。

3. 系统概要设计

3.1 系统结构设计

整个系统根据功能能够划分为数据库同步应用以及消息队列服务器两个部分。数据库同步应用分布在分布式数据库同步的节点上,每一个数据库同步应用都可以有自己的消息队列服务器。当两个不同的数据库建立对等的同步关系时,这个站点既是副本数据节点也是数据库同步源数据站点。根据从消息队列中读取的更新数据,可以对本地数据库进行更新,从而达成数据的一致性,同时可以对事物进行并发处理。

3.2数据库设计

数据库中包括更新事务日志表,故障日志表,以及注册站点信息表等。

更新事务日志表:记录了对出版表的更新事务,需要注意的是这个表不仅记录了本地站点的更新事务,也记录了其他站点对本站点的更新事务。

故障日志表:记录所有因为故障等原因未能发送成功的站点以及事务信息。

站点出版信息表:记录了本站点所有出版的数据的信息。

注册站点信息表:记录所有在本站点注册的站点的信息。

3.3 功能设计

  1. 日志处理模块

这个模块负责监督数据库的活动,获取数据库的更新信息,把这些更新的事务从数据库的事务日志里面提取并发送给事务日志处理模块。

  1. 事务日志处理模块

记录了数据库中表的更新事务日志以及没有发送成功的注册站点的故障日志。这个模块负责对故障日志表以及更新事务日志表进行添加和修改。

  1. 消息收发模块

这个模块负责所有信息的发送和接收。根部不同的消息类型发送给不同的模块。

  1. 事务分发模块

这个模块负责发送事务。从更新事务日志和故障日志中找到标志为false的事务,用消息的形式发送到消息队列服务器的队列中。

  1. 执行模块

这个模块负责接收从收发模块处传来的事务,在数据库里处理这些事务,同时更新数据库。

剩余内容已隐藏,请支付后下载全文,论文总字数:9483字

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;