涵盖主存数据库、实时数据库、长事务、嵌套事务、事务处理监控器、事务工作流、电子商务中的事务处理和多数据库事务。
事务处理监控器(TP)提供对分布式事务处理的核心支持。
大规模事务处理系统建立在客户-服务器体系结构上。有如下体系:
TP监控器不仅将消息传送给应用服务器,当消息到达时,还有一个队伍管理器管理到达的消息。队伍可以是一个持久队列,在系统故障时仍然保存。TP监控器还提供持久消息发送的支持。
对于应用程序与多个数据库如遗产系统,建立在文件系统上的专用数据存储系统和远程站点的其他应用系统通信的系统,TP监控器提供构造和管理这种由多个子系统(例如数据库、遗产系统和通信系统)构成的大型应用的支持。TP监控器将每个子系统作为一个资源管理器,资源管理器提供对某些资源的事务性访问和数据。资源管理器接口由X/Open分布式事务处理标准定义。
TP监控器提供持久队列和持久消息发送等服务,担当这些服务和数据库系统的事务的两阶段提交协调者。管理包括多个服务器和大量客户端的复杂的客户-服务器系统。对系统检查点和系统关闭进行协调,提供安全性和客户端的授权,管理服务器缓冲池,控制故障的范围。
在复制的系统中,用TP监控器来隐藏数据库故障。远程备份系统就是一个例子。事务请求到达TP监控器后,TP监控器将消息传播给某个军思考系统(如果在远程备份系统中,就是主站点)。如果某一个站点故障,TP监控器可以透明地将消息路由到一个备份站点,隐藏第一个站点的故障。
在客户-服务器系统中,客户通常通过远程过程调用(RPC)机制与服务器交互。RPC是由客户启动一个实际在服务器端的过程调用,结果返回给客户。从启动RPC的客户代码来看,该调用好像启动本地过程调用一样,TP监控器可以为系统服务提供一个事务RPC接口,在接口中,RPC机制提供一些调用,可用来将一系列的RPC调用包括在一个事务中,由一个RPC执行的所有更新都是在该事务的范围内执行,从而发生故障时可以回滚。
工作流是一个活动,其中多个任务以不同的处理实体相互协同的方式执行。任务定义了要做的某项工作,并且可以用多种不同的方式来说明,包括文件中的文本描述、电子邮件消息、表单、消息或计算机程序。执行任务的处理实体可以是人或软件系统。
工作流有时称为任务流和多系统应用,工作流任务有时称为步骤。
工作流在机构中以及机构间起着越来越重要的作用,许多组织拥有多种软件系统,它们必须能够协同工作。为使工作流自动化,需要强调两个活动。
两个活动都很复杂,因为许多组织机构使用多个独立管理的信息处理系统,这些系统是分开开发、对不同功能进行自动化的,工作流活动可能需要几个这样的系统的交互,每个系统执行一个任务,并且与人交互。
任务内部构件无需为工作流的说明和管理建模。任务可以使用放在它的输入变量中的参数,可以检索和更新本地系统中的数据,将它的结果存放到输出变量中,可以查询任务的执行状态。在执行过程的任何时间,工作流状态包括该该工作流各个任务的状态的集合和工作流说明中所有的变量的状态。
任务之间的协调可以静态地说明,也可以动态说明。在静态说明下,任务以及任务之间的依赖关系在工作流开始执行之前定义。对于工作流的每一个任务的执行都有一个前提条件。前提条件可以用以下结果来定义:
对工作流来说,许多情况下,当其中的一个任务发生故障时工作流不一定失败。应该允许工作流设计人员定义工作流的故障原子性需求。系统应该保证工作流的每一次执行都满足设计人员定义的故障原子性需求的状态终止。我们将这些状态称为工作流的可接受终止状态,工作流的所有其他的执行状态构成一个不可接受终止状态集合,这些状态可能违背故障原子性需求。
提交的可接受终止状态是工作流的目标全部达到的执行状态。中止的可接受终止状态时一个合法的终止状态,此时工作流未能达到它的目标,那么工作流的部分执行产生的不合要求的影响应该按照该工作流的故障原子性需求撤销。
在工作流达到终止状态前,一个任务可以提交并释放资源,如果这个多任务事务中止了,它的故障原子性可能要求执行补偿任务来撤销已完成的任务所造成的影响。
多个任务的执行可以由一个协调人来控制,或者由一个工作流管理系统的软件系统控制。工作流管理系统包括一个调度程序、多个任务代理和一个查询工作流系统的状态的机制。任务代理通过处理实体控制任务的执行。调度程序是一个对工作流进行处理的程序,它将不同的任务交付执行,监控各种事件,计算与任务间依赖有关的条件。调度程序可以将一个任务交付执行,也可以要求中止一个先前交付执行的任务。调度程序根据工作流说明,按任务间的依赖关系进行调度,保证任务的执行到达可接受终止状态。
开发工作流管理系统的体系结构:
调度程序必须保证工作流终止与一个指定的可接受终止状态。理想情况是,在打算执行一个工作流之前,调度程序检查工作流,看它能否终止于一个可接受状态,如果不能,应该拒绝这样的工作流说明。保证工作流的安全性是设计工作流说明的人员的责任。
保证工作流的故障原子性。保证在工作流处理构件(包括调度程序)的任何一个发送故障时,工作流都能达到一个可接受终止状态。假设工作流涉及的处理实体有自身本地的恢复系统,能处理本地的故障。为了恢复执行环境上下文,故障恢复例程序要恢复调度程序在发送故障时的状态信息。必须将适当的状态信息作为日志记录存储到稳定存储器上。
还要考虑消息队列的内容,保证只交接一次,持久的消息发送体制提供了这样的特性。
工作流通常是手工编码,用于帮助协调整个企业内部的活动,工作流管理系统的目标是简化工作流构造,使得它们更加可靠,这些通过支持工作流以及高层形式和按照相应的说明执行来实现。有大量商业工作流系统是通用工作流管理系统。
工作流管理联盟开发了用于工作流系统之间协同工作的标准,现在的标准力图使用XML作为工作流之间沟通信息的底层语言。
活动类型:
任何电子商务站点提供用户一个站点供应的产品和服务的列表。最低限度,电子目录必须提供浏览和搜索功能,简单的比较不同选择的手段,为特定客户定制目录,存储客户信息。
市场用于协商产品的销售价格,存在不同类型的市场:
在处理市场中遇到的数据库的问题:
提供安全协议保护信用卡,防止中间人攻击。
手段:
为了获得很高的事务处理速率,必须使用高性能硬件,必须开发并行性。但是磁盘I/O会成为瓶颈。我们通常采用增大数据库缓冲区减小数据库系统受磁盘限制的程度。
对于某些应用,如实时控制应用,必须将数据存在主存内来满足性能要求。
大的主存能使数据驻留在内存中,从而使事务处理更快。然而,仍然存在于磁盘有关的限制:
另一方面,主存数据库为优化提供了机会:
某些应用系统中,约束条件包括任务必须完成的截止时间。
特性:
实时系统的事务管理必须将截止时间考虑在内。对于锁冲突时,让事务等待还是抢占锁通常很难确定。并且事务执行时间估算差异较大。
在实时系统中,最重要的问题不是绝对速度,而是截止时间。设计一个实时系统需要保证在不要求过多的硬件资源的前提下,有足够能力来满足截止时间的要求。
当事务涉及到人机交互的数据库系统时,这些事务具有重要特性:
以上特性使只允许可串行化的调度不切实际。下面每一种并发控制协议对于长事务都有负面影响。
强制要求可串行化导致长时间的等待或长事务的中止,或者两者同时发生。并且一个事务的中止可能导致其他事务的中止,尤其是长事务的级联中止是不可接受的。如果采用封锁机制又想避免级联回滚,就必须保持排他锁到事务结束,这样就增加了事务等待时间。
由此看来,强制要求事务的原子性必然导致长时间等待的可能性增大,或者发生级联回滚的可能性。
数据库并发控制是为了保证事务的并发执行不会导致数据库一致性的丢失。通过上面的结论,我们可以采用不同的方式保存数据库一致性而不是可串行化。不是所有保持数据库一致性的调度都是可串行化的。
无串行化条件下正确性概念的观点:
将长事务分解为一组相关的子事务。如果允许事务T的子任务在完成的时候释放锁,那么T称为多级事务。当一个多级事务代表一个长时间的活动时,该事务有时称为一个传奇。另一种情况,如果T的子事务Ti所持有的锁在Ti完成时自动赋予T,那么T是嵌套事务。
为减少长时间等待的发生频率,我们安排未提交的更新暴露给其他并发执行的事务。事实上,多级事务可能允许这种曝光。然而,未提交事务的曝光产生了级联回滚的可能性。
令事务T分为几个子事务t1,t2,……,tn,在一个子事务ti提交后,它释放了锁,现在如果必须中止外层事务T,那么子事务的影响需要撤销,但是我们不能撤销已提交的子事务。我们执行一个新的子事务称为补偿事务cti来撤销子事务ti的影响,每个子事务ti都需要有一个补偿事务cti。
减少保证大数据项可恢复性的开销:
由于长事务和大数据项导致的复杂性仍然使恢复过程复杂,我们希望对于某些非关键数据不记日志,而依赖于脱机的备份和人的干预。
多数据库支持两类事务:
多数据库系统没有对局部事务的执行进行控制,每个本地系统必须使用并发控制机制保证进度的串行化,并且防止局部死锁的可能。
保证局部串行化对于确保全局串行化是不够的,但全局事务无法控制局部子事务的精确封锁行为。我们可以通过两级串行化来保证全局串行化。
多数据库的另一个问题是全局原子提交,如果所有的局部系统遵循两阶段提交,那么可获得全局原子性,如果作为分布式系统的一部分无法参与这个协议,那么也会出现问题。
两级串行化(2LSR)在系统的两个级别保证串行化:
但这不足以保证全局可串行化,还需要采用弱于串行化的需求,称为强正确性:
一些协议:
在更新事务时只读事务的执行环境中,有许多机制保证用于全局串行化。这些机制有几个是基于票的思想。每个本地数据库系统创建一个特殊数据项,叫做票。每个访问该站点数据的全局事务必须在该站点上写这个票,这个要求保证了全局事务在它们访问的每一个站点直接发生冲突,全局事务管理器可以通过控制票的顺序来控制全局事务可串行化顺序。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论