分布式编程模式中的租约、事务和分布式事件机制
2008-01-05 08:57:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔庣划顖炲Φ閸曨垰绠抽悗锝庝簽娴犻箖姊洪棃娑欐悙閻庢矮鍗抽悰顕€宕堕澶嬫櫖濠殿噯绲剧€笛囧箲閸ヮ剙钃熼柣鏂挎憸閻熷綊鏌涢…鎴濇灈妞ゎ剙鐗嗛—鍐Χ鎼粹€茬凹缂備緡鍠楅幐鎼佹偩閻戣棄纭€闁绘劕绉靛Λ鍐春閳ь剚銇勯幒鎴濐伀鐎规挷绀侀埞鎴︽偐閹绘帩浼€缂佹儳褰炵划娆撳蓟濞戞矮娌柟瑙勫姇椤ユ繈姊洪柅鐐茶嫰婢т即鏌熼搹顐e磳闁挎繄鍋涢埞鎴犫偓锝庘偓顓涙櫊閺屽秵娼幏灞藉帯闂佹眹鍊曢幊鎰閹惧瓨濯撮柛鎾村絻閸撳崬顪冮妶鍡楃仸闁荤啿鏅涢悾鐑藉Ψ瑜夐崑鎾绘晲鎼粹剝鐏嶉梺缁樻尰濞叉﹢濡甸崟顖氱疀闂傚牊绋愮花鑲╃磽娴h棄鐓愭慨妯稿妿濡叉劙骞樼拠鑼槰闂佸啿鎼崐濠毸囬弶搴撴斀妞ゆ梻銆嬪銉︺亜椤撶偛妲婚柣锝囧厴楠炴帡骞嬮弮鈧悗濠氭⒑鐟欏嫭鍎楅柛妯衡偓鐔插徍濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩绾惧鏌熼崜褏甯涢柍閿嬪灦閵囧嫰骞掗崱妞惧缂傚倷绀侀ˇ閬嶅极婵犳氨宓侀柛鈩冪⊕閸婄兘鏌涘┑鍡楊伀妞ゆ梹鍔曢埞鎴︽倻閸モ晝校闂佸憡鎸婚悷锔界┍婵犲洦鍤冮柍鍝勫暟閿涙粓姊鸿ぐ鎺戜喊闁告瑥楠搁埢鎾斥堪閸喓鍘搁柣蹇曞仧绾爼宕戦幘璇茬疀濞达絽鎲¢崐顖炴⒑绾懎浜归悶娑栧劦閸┾偓妞ゆ帒鍟惃娲煛娴e湱澧柍瑙勫灴閹瑩寮堕幋鐘辨闂備礁婀辨灙闁硅姤绮庨崚鎺楀籍閸喎浠虹紓浣割儓椤曟娊鏁冮崒娑氬幈闂佸搫娲㈤崝宀勬倶閻樼粯鐓曢柟鑸妼娴滄儳鈹戦敍鍕杭闁稿﹥鐗犲畷婵嬫晝閳ь剟鈥﹂崸妤€鐒垫い鎺嶈兌缁犲墽鈧厜鍋撳┑鐘辩窔閸嬫鈹戦纭烽練婵炲拑绲垮Σ鎰板箳閹冲磭鍠撻幏鐘绘嚑閼稿灚姣愰梻鍌氬€烽懗鑸电仚濠电偛顕崗妯侯嚕椤愩倖瀚氱€瑰壊鍠栧▓銊︾節閻㈤潧校缁炬澘绉瑰鏌ュ箵閹烘繄鍞甸柣鐘烘鐏忋劌顔忛妷褉鍋撶憴鍕碍婵☆偅绻傞~蹇涙惞閸︻厾锛滃┑鈽嗗灠閹碱偊锝炲鍥╃=濞达綁顥撻崝宥夋煙缁嬪灝鏆遍柣锝囧厴楠炲鏁冮埀顒傜不婵犳碍鍋i柛銉戝啰楠囬悗瑙勬尭缁夋挳鈥旈崘顔嘉ч柛鈩兠棄宥囩磽娴e壊鍎愰柛銊ュ缁顓兼径瀣偓閿嬨亜閹哄秶顦︾€殿喖鐏濋埞鎴﹀煡閸℃浠梺鍛婎焼閸曨収娲告俊銈忕到閸燁垶宕愰崹顐e弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

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对象的引用,以便用来表决。
分布式事件1.分布式事件及通知
分布式事件系统有一些与单机系统不同的特点和需要。由于存在网络延迟和失败的可能性,远程对象事件的通知的顺序可能因客户的不同而异,或者根本没有到达。一个通知到达的时间可能会很长,也可能会有这种情况,接收通知的对象一方不总是希望立即得到通知,而是在接收一方决定的一个确定时间得到。甚至可能发生注册爱好的对象并不是事件通知应发送的对象。
分布式通知的中心概念是在产生通知的对象和希望接收通知的其他对象之间加入第三方对象。它们可以从对象上卸下通知,实现多种传递保证,存储通知,并进行通知的过滤和重新路由。
- ››分布式计算多机部署与配置
- ››分布式单词发音抓取机器人
- ››模式作用域:初级读本和最佳实践
- ››分布式网络爬虫关键技术分析与实现一网络爬虫相关...
- ››分布式 DBA: 创建和使用分区表
- ››编程实例 一个简单的智能感知效果
- ››分布式 Key-Value 存储系统:Cassandra 入门
- ››分布式 DBA: Cursor Stability Isolation Level 的...
- ››分布式 DBA:存储、I/O 和 DB2,第 1 部分(针对在...
- ››分布式管理:用 HADR 减少停机时间(详细解释如何...
- ››分布式 DBA:使用物化查询表
- ››模式 + GWT + Ajax = 易用性
更多精彩
赞助商链接