分布式旅行预定系统.docx

上传人:b****1 文档编号:234699 上传时间:2022-10-07 格式:DOCX 页数:15 大小:155.38KB
下载 相关 举报
分布式旅行预定系统.docx_第1页
第1页 / 共15页
分布式旅行预定系统.docx_第2页
第2页 / 共15页
分布式旅行预定系统.docx_第3页
第3页 / 共15页
分布式旅行预定系统.docx_第4页
第4页 / 共15页
分布式旅行预定系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

分布式旅行预定系统.docx

《分布式旅行预定系统.docx》由会员分享,可在线阅读,更多相关《分布式旅行预定系统.docx(15页珍藏版)》请在冰豆网上搜索。

分布式旅行预定系统.docx

目录

1分布式旅行预订系统概述 2

1.1 背景介绍 2

1.2 系统目标 2

2需求分析 2

2.1系统总体需求分析 2

2.2功能需求分析 2

3系统设计 3

4系统实现 3

4.1简单旅行预定资源管理器 3

4.1.1RM存储表 4

4.1.2事务管理 4

4.2.3系统ACID属性 4

4.2.4系统并发控制的封锁处理 5

4.2分布式事务管理器 6

4.2.1事务管理器(TM) 6

4.2.2集中式2PC协议 6

5系统的运行与测试 6

5.1服务器端设置 6

5.2系统运行结果 7

6总结 15

1分布式旅行预订系统概述

1.1背景介绍

旅行是人们生活中的重要部分。

现今,旅行服务行业也在迅速发展,但是旅行业软件信息系统的使用效率上却又很大的提升空间。

观察现在旅行服务业,很少有一个服务系统能够高效智能的聚合包括飞机票预定、酒店旅馆预定、车租车预订等旅行必须的服务。

1.2系统目标

项目目标是用java或VC组建一个分布式应用系统,它用来实施一个简单的旅行预定系统。

2需求分析

2.1系统总体需求分析

旅行预订系统主要面向游客。

通过调查,对于普通游客而言,随着旅游者越来越多地参与到旅游活动的前期决策与规划中,他们迫切地需要快速获得旅游目的地信息及其它相关服务设施信息,包括餐饮、住宿、交通、购物、娱乐等。

此外,查询结果能够为游客提供最新的、现时性很强的旅游信息,要具有直观性、形象性,使游客全方位了解旅游目的地相关信息,在增加游客旅游兴趣的同时也满足其个性化旅游的需求。

2.2功能需求分析

基于总体需要分析,系统应包含:

航班、旅馆、出租车、预订情况信息查询、航班、旅馆、出租车、游客信息增(修改、删除、查寻)、航班、旅馆、出租出的退票功能等。

Ø信息查询

该系统的信息查询模块主要实现航行信息、旅馆信息、出租车信息以及客户的航班预订信息的查询。

Ø信息插入与删除

因为航班、旅馆等信息是不断更新的,为此系统需要有信息增加、修改、删除等功能,该系统在功能上只需实现部分功能。

信息的插入和删除主要包括航班信息(航班号、座位数等)、旅馆信息(地址、价格、房间数等)、出租车信息(地址、价格、数量等)的插入和删除,该部分功能只有管理员有相应的权限。

Ø航班预订与取消

航班预订是指用户根据需求选择航班,同时还有旅馆和出租出可以进行选择,这里我们假设:

1):

只有一个航班,并且在给定的航班上所有的座位都是相同的价钱;

2):

所有的旅馆房间在同一个地方的都是相同的价钱。

航班的预订和取消功能是该系统实现的关键部分。

因为该部分需要对数据进行并发控制,保证数据的正确性。

3系统设计

该系统可以通过两个阶段来实现系统:

Ø做一个简单的资源管理器(RM)(一个简单的数据库系统包括一组固定的表和操作集合)支持具有ACID属性的并发事务。

Ø实现一个工作流管理器(WC)和一个事务管理器(TM),能在各个资源管理者(RM)之间实现分布式事务处理。

RMI是EnterpriseJavaBeans的支柱,是建立分布式Java应用程序的方便途径。

运用RMI实现客户端、服务器的通信。

利用Java.util.concurrent实现Collection框架对数据结构所执行的并发操作。

本系统采用C/S框架结构。

如下图3-1所示:

Client

Client

Client

Resource

Manager(RM)

Flights,Hotels,

Cars,Customers

……

图3-1分布式旅行预订系统架构图

4系统实现

4.1简单旅行预定资源管理器

实现一个简单的资源管理器(RM),支持具有ACID属性的并发交互事务。

特别的,资源管理器储存关于:

飞机票,租车,旅馆房间和旅客的数据。

多客户机通过接口界面并发访问资源管理器来查询和更新数据。

要求资源管理器保证这些并发事务执行的正确性,例如,在有ACID要求的事务中。

4.1.1RM存储表

资源管理器储存关于飞机票、租车、旅馆房间和旅客的数据。

在该系统中资源管理器要储存下列的表:

FLIGHTS(StringflightNum,intprice,intnumSeats,intnumAvail)

HOTELS(Stringlocation,intprice,intnumRooms,intnumAvail)

CARS(Stringlocation,intprice,intnumCars,intnumAvail)

CUSTOMERS(StringcustName)

RESERVATIONS(StringcustName,intresvType,StringresvKey)

其中:

flightnum是FLIGHTS的主键;location是HOTELS的主键;custNum是CUSTOMERS的主键;ESERVATIONS表包括一个对应的项目表,这张表由用户对航班,汽车,旅馆的预定信息组成;在FLIGHTS表中,numAvail是一个给定航班可以预定到的座位号。

4.1.2事务管理

在分布式数据库系统中,一个分布式事务及全局事务,通常由一个主事务和在不同站点上执行的子事务组成。

一般的,主事务负责事务的开始,提交和异常终止。

(1)将事务划分成多个子事务,通过每个子事务来访问分布存储在多个站点的数据。

(2)协调在各站点子事务工作以达到系统的原子性。

子事务不仅要与相应站点上并发执行的其他本地事务相互协调,还要与分布式系统中全局事务所产生的其他子事务相互协调。

事务管理的目标就是负责当若干个事务并发执行和事务执行发生错误时,使数据库仍保持一致状态。

所以事务管理至关重要,也是该系统中需要克服的难点。

4.2.3系统ACID属性

在本系统中,每个服务器都按照总体的设计结构图,实现数据存储、更新、插入、删除、预定。

同时,每个服务器实现本地的事务管理、并发控制。

主服务器把一个事务分为多个子事务,然后对各个站点处理子事物结果进行裁决,并发控制,实现分布式事务处理。

原子性(Atomicity):

Client向Server发出预订申请时,Server分别从每个服务器取得数据并进行交互式预订。

如果每个服务器返回确认的信息,则再由Server统一进行Commit操作,否则如果有一个服务器返回预订失败的信息,然后由Server统一将每个服务器上试预订的信息进行rollback操作。

一致性(Consistency):

数据的不一致性主要是由于事物的并发、通信传输故障、站点故障导致。

针对事物并发,可以对数据资源加锁和写锁。

数据库始终是从一个一致性状态变到另一个一致性状态,只有成功事务系统才会提交给数据库保存。

隔离性(Isolation):

事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

当某一资源被占用时,系统将给资源加锁,以保证事务不被干扰。

持久性(Isolation):

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

本系统采用记事本文件,然后把每个站点上的数据、操作日志存贮到记事本上。

4.2.4系统并发控制的封锁处理

并发控制是基于两阶段锁协议的。

特别的,当一个用户请求查询或更新信息时,资源管理器要保证适当的加锁,并且当一个事务提交或者撤销后要释放掉所有的锁。

针对并发事务的冲突造成的丢失更新、不一致性以及破坏完整性约束,因此要对事务进行加锁。

所以该系统中,采用主站点加锁法:

1)采用主站点加锁法:

选某一站点作为“主站点”,负责系统的加锁管理。

所有站点都向这个主站点提出加锁请求,然后由主站点去处理加锁事宜,读锁一个,写锁全部,更新数据时必须保证所有站点上该数据的副本同样进行更改,更新结束后才能解锁。

系统运用JAVA自带的java.util.concurrent.locks.ReentrantReadWriteLock来进行读写锁枷锁

privatefinalReentrantReadWriteLockrwl=newReentrantReadWriteLock();

privatefinalLockr=rwl.readLock();//读硕

privatefinalLockw=rwl.writeLock();//写锁

2)加锁点:

①在server的线程reseverThead类在run()里对所需要的数据资源加写锁,采用一次性资源分配的方法,所以才预定之前,需要查询数据资源是否可用。

如果其他事物需要访问被锁住的数据,必须等待锁释放。

②在各资源站点的fix函数中加入写锁。

如果其他事物需要访问被锁住的数据,必须等待锁释放。

③在各资源在commit()处理中,要把执行data=back.get(xid),需要加写锁。

在查询数据的时候,需要读数据。

④插入数据和预定commit()操作要加锁。

在插入数据后,可能会执行commit(),这样使得新增数据被覆盖了。

publicbooleanfixFlight(intxid,StringflightNum){

Hashtabletemp=newHashtable();

w.lock();}

3)预防死锁:

一次加锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。

4.2分布式事务管理器

在项目中,我们将把数据表分布在几个RM中,并在各个RM之间进行分布式事务操作。

4.2.1事务管理器(TM)

TM支持下列操作:

start,commit,abort,enlist.

事务管理器是在各个不同的RM之间进行分布式事务的合作。

当对一个RM提出请求时,将调用TM的enlist程序来告诉TM有一个事务。

TM将对事务要使用到的RM做标记。

工作流控制器将用户的start/commit/abort调用直接提交给TM来处理。

用户所有其他的调用也将被交到适当的RM。

4.2.2集中式2PC协议

在分布式事务的某一个代理指定为协调者,所有其他代理称为参与者。

由协调者质问所有的参与者是否准备好提交事务。

只有协调者才有掌握提交或者撤销事务的决定权,而其他参与者各自负责在其本地数据库中执行写操作,并向协调者提出提交或者撤销子事务的意向。

换而言之,如果有一个参与者投了“终止”票或在其规定时间内未对协调者做出响应,则协调者将命令所有的参与者终止事务。

如果所有的参与者投了“提交”票,则协调者决策所有的参与者提交事务。

在该系统中我们采用集中式2PC协议,在程序中表示为:

if(flightFlag&&carFlag&&hotelFlag&&reserFlag){…}

在投票表决阶段,协调者做出全局裁决,只有所有参与者都投了”提交“,然后协调者将执行的命令传输给参与者,由参与者做出相应的处理。

5系统的运行与测试

5.1服务器端设置

根据分析,系统分为主服务器(Server),航班服务器(FlightServer),宾馆服务器(HotelServer),出租车服务器(CarServer),用户服务器(CustomerServer)以及预订服务器(ResverServer)。

客户端请求和server建立TCP连接(程序运行在本地):

publiclogin()

{

HashSet

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1