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

  Jini 技术面向网络及分布式计算特性决定了Jini技术必然和传统单机系统在许多方面有概念上和实际应用中差别如网络延迟、失败或者设备突然撤出将导致信息无序和丢失;资源获得、保存、维护和回收情况更为复杂;区别实体的间通讯和协调工作可靠性及效率并不像单机系统中那样较为容易地获得保证因而在 Jini 中以 Java 为基础加入了分布式编程模式特别是引入了租约、分布式事务和分布式事件   租约

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

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

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

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

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

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

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

  事务

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

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

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

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

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

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

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

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

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

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

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

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

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


  分布式事件   1.分布式事件及通知

  分布式事件系统有些和单机系统区别特点和需要由于存在网络延迟和失败可能性远程对象事件通知顺序可能因客户区别而异或者根本没有到达个通知到达时间可能会很长也可能会有这种情况接收通知对象方不总是希望立即得到通知而是在接收方决定个确定时间得到甚至可能发生注册兴趣对象并不是事件通知应发送对象

  分布式通知中心概念是在产生通知对象和希望接收通知其他对象的间加入第 3方对象它们可以从对象上卸下通知实现多种传递保证存储通知并进行通知过滤和重新路由

  2.基本接口和类

  Jini 技术中分布式事件接口定义了个协议通过使用该协议个Java 虚拟机对象可以在其他Java 虚拟机对象上注册感兴趣事件并在事件发生时得到通知接口中还规定了这类通知中必须包含信息协议中并未体现通知可靠性和时限这种保证并非协议部分而是涉及到区别对象部分

  2.1涉及到实体

  事件和通知接口定义了实体基本类型、对提交给实体信息需求些支持性接口和类

  分布式系统中基本对象有:对事件注册感兴趣对象、发生事件对象(事件产生者)和事件通知接收者(远程事件监听者)

  事件产生者有某些其他对象可能会感兴趣抽象状态并允许其他对象对此事件注册兴趣事件发生时它将产生通知发送通知到注册过此类事件事件监听者

  基本类型由RemoteEventListener定义远程事件监听者对其他对象发生某类事件感兴趣个远程事件监听者主要功能是接受其他对象中事件发生通知

  支持性接口和类包括RemoteEvent对象、用作注册标识EventRegistration对象组可能产生例外远程事件是从事件产生者传递到远程事件监听者对象用来指示某类特殊事件发生EventRegistration类定义了返回注册者需要信息对象它是远程事件注册返回值EventRegistration类例子包括个事件类型标识、当前事件类型序列号个注册Lease对象

  保持和远程事件注册模型致性接口应反映:

  ·事件注册是限定时间其思路方法是使那些注册在需要时候续约这可反映为返回个注册租约把它作为事件注册部分

  ·通知无需传送至最初注册兴趣实体即使用第 3方过滤器

  ·通知可以包含由原始注册者提供MarshalledObject使事件通知中能包含任意信息;注册应包括MarshalledObjecct以作为RemoteEvent部分来传送

  2.2 RemoteEventListener接口

  RemoteEventListener是RemoteEvents接收者RemoteEventListener由个只包含个noty思路方法接口来定义思路方法将返回注册时导入信息允许登记者将任意信息或动作和通知信息关联起来

  RemoteEventListener接口应由希望从其他对象收到 RemoteEvent通知对象所实现为使事件发生通知送至其他对象注册需要接收个目标参数来指明通知所应送达对象

  RemoteEventListener接口继承自Remote接口及java.util.EventListener接口前者介绍说明RemoteEventListener中思路方法为远程思路方法支持这些思路方法对象将通过RMI传递引用后者用于Java AWT及JavaBeans组件中来指明某个接口是事件通知接收者RemoteEventListener接口由个noty思路方法组成

  2.3 RemoteEvent类

  RemoteEvent对象所包含基本形式包括:对发生事件对象引用、标识事件类型长整型、个指明发生此类事件序列号long个回复Marshalled Object它是注册者注册部分这些RemoteEvent通知对象作为RemoteEventListener对象noty思路方法参数传递给 RemoteEventListener

  事件标识及从 RemoteEvent 对象得到事件发生者引用组合应唯确定事件类型如果此类型并非RemoteEventListener中注册兴趣(或其他代表RemoteEventListener注册)类型远程事件监听器noty思路方法将抛出 UnknownEventException例外



  从RemoteEvent对象获得序列号是个递增以此来判定远程事件发生先后顺序

  2.4 EventRegistration类

  EventRegistration类对象用于封装客户所需要信息标识出作为注册请求应答通知并维护此注册请求个允许事件注册思路方法并不定要返回个EventRegistration类型对象但这个类确包含了在事件模型中需要返回信息类型



Tags:  分布式事务管理 java分布式编程 .net分布式事务 分布式事务

延伸阅读

最新评论

发表评论