分布式对话服务器的管理 - 编程入门网
分布式对话服务器的管理时间:2010-12-26摘要: 通过使用JDK 1.3中引入的RMI和Proxy API,本篇文章讨论了一种允许一台或多台servlet服务器在一台或多台对话服务器上维护对话信息的技术,采用这种技术后,单一点故障就不会再出现了。 如果系统中有一台或多台servlet服务器,对话信息只存在于运行着JVM的一台servlet服务器上,而不会被传输给其他servlet服务器。如果该servlet服务器当机或因为维护而被关机,任何保存在对话中的信息都会丢失。如果一个系统中有多台servlet服务器,一个带有对话的用户需要访问对话中的任何信息,都需要被重新定向到同一台servlet服务器。曾经有专家建议采用关系数据库保存所有的对话信息,但这仍然存在单一点故障的危险,那就是运行关系数据库的服务器。而且如果数据库出了故障,所有的servlet服务器就都不能再访问对话信息了。另外,在数据库中保存可串行化的对象在有些数据库中是比较难以实现的。 多服务器对话管理的另一个可能的途径是利用JavaSpaces API来维护对话对象中的记录。当然,如果运行JavaSpaces的服务器由于维护或故障而被关机,也会丢失所有的对话信息,我们再一次遇到了单一点故障的问题。 要实现带有N个节点的分布式对话服务器,我们必须解决如下的三个问题: 如何建立一个库来存贮对话信息。 如何对分布式对话信息存贮库进行同步。 在一个对话信息存贮库脱离网络后,如何使该服务器从下一个对话信息存贮库中访问对话信息。 Mnemosyne的简介 我们用来存贮对话信息的库是Mnemosyne界面的执行。执行Mnemosyne的对象负责管理对话信息存贮库中的所有对象,任何试图写、访问或删除库中对象的对象都必须调用Mnemosyne的相应的方法来实现相应的操作。 一个对象要存贮在Mnemosyne,就必须执行Memory界面,该界面定义了equalsMemory()操作来探测二个内存对象是否相同,这就使 Mnemosyne判断出应当把哪个对象返回给read要求或take要求。Memory界面也可以进行串行化扩充,以便我们可以用RMI在网络上传输该对象。 Mnemosyne使用三种界面表达其状态。 1、CommonContext界面存贮Mnemosyne的全部信息。每个Mnemosyne都有一个CommonContext对象的实例,以便read、write、take Memory对象时在各个方法之间进行同步。在write或者take说Memory对象时,CommonContext对象既定义“silent”方法也定义“loud”方法,当在不进行事件通知的情况下添加对象时,就会用到“silent”方法。例如,当Mnemosyne对象接收到WriteRemoteEvent(向一个远程Mnemosyne对象写对象的告示。)事件后,如果它也希望向CommonContext对象写另一个对象,它就无需通知其他的远程CommonContext对象,最初的Mnemosyne已经通知了它们,因此这种写是通过调用CommonContext对象的silentWrite()方法“静悄悄”地完成的。而“loud”方法则在有对象第一次被添加时将这一事件的详细信息通知所有被调用的监听对象。 2、Transaction对象用于在read、write、take Memory对象时进行分布式事务处理,这意味在Mnemosyne对象上可能会有多步骤的操作。 3、TransactionContext界面管理分布式事务,使得系统可以中止或提交一个事务。 分布式对话服务器的管理(2)时间:2010-12-26保持Mnemosynes的同步是通过synchronize()和notify()这二个由 Mnemosyne定义的方法完成的。synchronize()可以使一个本地的Mnemosyne与其他Mnemosyne的Vector保持同步(这些Mnemosyne可以是本地的或远程的,为简明起见,我们假定它们是远程的。)下面是synchronize()的一个例子:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |