电脑技术学习

分布式编程模式中的租约、事务和分布式事件机制

dn001
<iframe align=right frameBorder=0 height=300 marginHeight=0 marginWidth=0 scrolling=no src="http://www.chinabyte.com/tag/cont_flash_software.html" width=360></iframe>  Jini 技术面向网络及分布式计算的特性决定了Jini技术必然与传统的单机系统在许多方面有概念上和实际应用中的差别。如网络的延迟、失败,或者设备的突然撤出,将导致信息的无序和丢失;资源的获得、保存、维护和回收情况更为复杂;不同实体之间通讯和协调工作的可靠性及效率并不像单机系统中那样较为容易地获得保证。因而在 Jini 中以 Java 为基础加入了分布式编程模式,特别是引入了租约、分布式事务和分布式事件。

租约

租约的基本概念是资源只能被使用一段时间,这由租约的持有者(lease holder)和租约的授权者(lease grantor)协商决定。

租约接口的目标是为分布式系统和应用程序提供一种特别的编程风格。这种编程风格是当某对象首次对该资源访问时,由这两个对象先协商,最后授权对资源进行某段时间的使用。

在非分布式系统中,资源或服务将被授权直到被明确释放或放弃,这种编程模式在分布式系统中注定要失败,原因是不能保证放弃对资源或系统的使用是肯定成功的,这将导致系统的这部分资源永远不会被释放。

为避免此类问题而引入了租约的概念。在租约中被租用的资源或服务的授权是基于时间的。一旦租借时间期满,服务就将结束,资源将被释放。租约的期限在第一次授权时决定,由租约的授权者和接收者采用request/response方式协商。租约可以在期满前续约或取消。期满时,双方认为服务或资源已回收。

租约概念的引入也可以用于解决分布式系统面临的另一个问题。连续开机的分布式系统趋向于积累过时和不必要的信息,解决这种问题的常规方法是把清理无用资源作为一项系统管理员的任务。然而,当这种资源被租用时,就不会发生过时信息的积累,也不再需要以手工方法清除。租用的信息或资源仅在租约续约时才保存在系统中。因此被遗忘的信息经过有限时间后将被删除。

Jini系统中定义了一组接口以及相关的约定和协议,目的是使不同Java虚拟机通过协商产生各种资源的使用租约。可形成租约的协议有多种,可以分为对某个对象的访问(引用)协议、对未来采取行动(事件通知)的协议和提供长久储存的协议等。租约机制要和并发机制相结合,即某资源可以有多个并发的租约持有者。

租约的特性包括:授权者确保持有者能在一段时间内对资源进行访问;在租约期限内,租约持有者可以取消租约,授权者将清除相关的资源;持有者可以要求续约,续约期限由双方协商决定;若租约到期,授权者将释放相关资源,与取消租约的不同之处在于,授权者与持有者之间不需要通讯。

事务

事务式的行为在分布式计算中尤其重要,它提供了使一个或多个远程参加者对一系列操作的结果保持一致的方法。Jini系统将实现事务语义交由事务中的个体对象处理。系统首先要提供的是对象之间确认事务时用来交换信息的合作机制,目标是提供最小的协议和接口的集合,用以让对象实现事务语义。

Jini描述的完成协议由分布式系统的两阶段提交协议组成。两阶段提交协议定义了分布式对象资源的通讯模式,这个协议需要一个管理者来保证操作集决议的一致性,即保证所有的参加者最终知道它们是应提交操作还是放弃操作。

事务由一个管理者创建和监督,每个事务由一个标识来代表,它对于事务的管理者是唯一的。客户通过一个对管理者的请求来创建事务,通常使用语义工厂类,如Transactionfactory来创建一个语义对象。在对一个服务实行操作时,这个语义对象就将作为一个参数传递。如果服务同意接受这个事务并管理它的操作,它必须作为一个参加者加入到这个事务中去。

如果一个事务成功提交,那么所有在事务之下进行的操作都将完成。放弃事务意味着所有在事务之下进行的操作都如同完全没有发生过一样。提交事务需要每个参加者“表决”,表决可选择“就绪”(准备提交)、“未改变”(只读),或者“放弃”(事务应被放弃)。

两阶段提交协议的设计目标是使对象能够提供ACID属性。缺省的事务语义定义了保留这些属性的一个方法。ACID属性是:

·Atomicity(原子化):所有在一个事务下的操作全部发生或者一个也不发生。

·Consistency(一致性):事务的完成必须使系统保持在一致的状态。事务只是一个使保证一致性成为可能的工具,而它本身并不是一致性的保证者。

·Isolation(隔离性):正在执行的事务不应彼此影响。一个事务的参加者应该只能看到自己事务中操作的中间状态,而不是其它事务的中间状态。

·Durability(耐用性):事务提交的结果应像事务提交的对象实体一样持久,但这个保证只能由对象来完成。

依赖于参加者来实现ACID属性是两阶段提交协议与传统事务处理系统的最大不同之处。两阶段提交协议的定义使用了三个主要类型:

·Transactionmanager——事务管理者创建新的事务并协调参加者的动作。

·NestableTransactionManager——一些事务管理者能够支持嵌套的事务。

·TransactionParticipant——当操作是在一个事务之下进行的,参加者必须加入事务,给管理者提供一个对 TransactonParticipant对象的引用,以便用来表决。



标签: 编程