高影响力的Web层群集,第一部分: 利用JavaGroups扩展 - 编程入门网
证能接收到视图之间的同一组消息。一个视图中发送的任何消息也能保 证在该视图中接收到。尽管对于小的成员关系是稳定的,但是这种实现对于非常大的成员关 系却缺乏可伸缩性。事实上,JavaGroups 中的虚拟同步实现对于大的组成员关系是相当有问 题的。
为了支持非常大的成员关系――这种情况下,随机广播比绝对保证更加可接受―― JavaGroups 提供了一组基于 随机广播的协议。随着成员关系的增长,这些协议是可扩展的 和稳定的。 JavaGroups 通道 通道是一个类似于套接字的实体,具有大量添加进来的值,以使我们的分布式编程更加容 易。作为分布式的应用开发者,我们在通道上面编程,而通道为我们访问 JavaGroups 提供 的丰富的协议支持提供保障。 就跟套接字一样,通道有一个与之相关的地址,并且是我们用来发送和接收数据的对象。 但是与套接字不同的是,与通道相关的地址是不透明的 (应用开发者不必知道该地址的物理 细节),并且我们从通道发送和接收的数据是消息――是比套接字的分组更高级别的实体。 为了对进程组通信有用,一个通道将与一组进程相关。每个通道都有一个与之相关的文本 化的通道名称 (有时叫做 组地址) ,并且具有相同名称的通道实例在逻辑上属于相同的组。 分布式网络中的组成员关系管理解决(或者编程)起来不是一个容易的问题。事实上,组 成员关系管理是 JavaGroup 最有价值的特性之一。通道抽象下面的协议栈可以为我们执行组 成员关系管理,在成员加入和离开组时对它们进行跟踪。您甚至可以选择使用基于虚拟同步 的算法或者是基于随机广播的算法 (参见 虚拟同步与随机广播)。 地址和通道名称一起惟一地标识一个通道实例。要使用通道实例,必须首先与之连接。一 次只可以有一个进程连接到一个通道实例。您也可以断开与一个通道实例的连接,以将它释 放给其他进程使用,也可以关闭一个通道实例以永久地禁用它。图 4 演示了通道实例如何方 便进程组通信: 图 4. 利用 JavaGroups 通道进行通信 图 4 显示了三台机器上四个通过 LAN 的通道实例。注意,所有的通道实例具有相同的通 道名称,但是具有不同的物理地址。在这种情况下,每个物理地址包含一个 <IP 地址: 端口>, ,因而允许同一主机(一个 IP 地址)上的多个物理地址。另外注意,只有一个进 程连接到每个通道实例。四个进程全都属于同一个组。 进程组中的通信 您可以通过通道发送一个消息到组的一个特定成员 ( 单播),或者发送到组的所有成员 ( 多播)。要发送消息到组的特定成员,您需要它的地址。 既然通道为我们管理组成员关系,因此您总可以通过从通道检索成员关系列表来获得当前 “视图”中的成员。另外,您也可以在视图更改(成员关系更改通知) 发生时从通 道了解到这一更改。图 5 演示了分布式应用开发者和通道抽象之间职责的分离: 图 5. JavaGroups 通道的功能视图 高影响力的Web层群集,第一部分: 利用JavaGroups扩展(5)时间:2011-04-16 IBM Sing Li可重用的通信编码模式 为了进一步简化分布式的应用编程,JavaGroups 以 Java 类的形式提供了一组经常使用 的通信编码模式。您可以使用多个这些 编程模式(也叫做 构造块) ,来代替或补充对通道抽 象的直接访问。 在 org.javagroups.blocks 包中可以找到所有这些模式。表 1 显示了最有用的构造块的 部分列表: 表 1. 编码模式构造块
|
||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |