快速业务通道

高影响力的Web层群集,第一部分: 利用JavaGroups扩展 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

编码模式可适用于许多分布式设计,并且特别地被创建用来与 JavaGroups 通道很好地协 同工作。例如,通过对 RpcDispatcher 编程,您可以大大地减少涉及远程过程调用语义的分 布式应用所需的代码。

马上可以使用的分布式数据结构

org.javagroups.blocks 包中的其他编码模式提供完整的、马上可以使用的、高级别的分 布式数据结构,其中的一部分列表显示在表 2 中:

表 2. 高级别的分布式数据结构作为构造块

类名称 描述
ReplicatedTree 管理一个完整的分布式树数据结构,可靠地将所有更改复制到组成员。任 何成员都可以添加和删除节点
DistributedHashtable 实现一个复制的hash表,该复制的hash表将hash表的更改传播到所有组成 员
NotificationBus 自包含的构造块 (即创建自己的通道) ,它实现一个通知总线,在该通知 总线中,消费者可以为生产者发送的通知进行注册。每个组成员可以参与任何一个或两个角 色。被设计为支持一个复制缓存的实现

高影响力的Web层群集,第一部分: 利用JavaGroups扩展(6)

时间:2011-04-16 IBM Sing Li

插入式通道实现

到目前为止,我们已经谈论了 JavaGroups 通道,就好像它是一个具体实现一样。但是, 通道实际上是 JavaGroups 中的一个抽象的类。实际上,当前的 JavaGroups 分布带有多个 通道实现,如图 6 所示:

图 6. 通道抽象和具体的实现

高影响力的Web层群集,第一部分: 利用JavaGroups扩展 - 编程入门网

JChannel

EnsembleChannel 通过一个用 Java 编写的连接器访问 Ensemble (参见 参考资料), Ensemble 是一个健壮的进程组通信基础 (非Java)。

通过创建您自己的通道实现也可以扩展 JavaGroups。

利用 JavaGroups 进行编程

JavaGroups 的一个典型使用场景涉及以下步骤:

实例化一个通道并初始化必需的协议栈。

连接到通道。

开始发送消息或者处理入站消息 (有可能是在构造块的帮助下)。

断开连接并关闭通道。

假设我们使用的是 JChannel, 我们只要设置一个初始字符串就可以创建一个协议栈 (或 者也可能用到一个外部的基于 XML 的配置文件――参见 参考资料 部分中的 “JavaGroups 用户指南”链接,以了解基于 XML 配置的更多信息)。清单 1 是 这样的字符串的一个例子:

清单 1. JavaGroups 初始化的配置字符串"UDP: PING: FD(timeout=5000): STABLE:" + "VERIFY_SUSPECT(timeout=1500):MERGE:" + "NAKACK:UNICAST(timeout=5000)" + ":FRAG:FLUSH:GMS:STATE_TRANSFER:" + "QUEUE"

字符串的每个组件用冒号 (:) 分开,分别指定了一个微协议。每个微协议实现一个可组 合的协议特性或质量。实际上,每个微协议由一个相同名称的 Java 类实现,并且由 JChannel 在运行时加载。许多这些微协议都可以在 org.javagroups.protocol 包中找到, 但是协议设计者可以使用任意的包名称。栈中指定的每个微协议可以有一个或多个对应的属 性,可以在初始字符串中的括号中设置这些属性。协议栈是在运行时自底往上建立的,根据 初始字符串,逐层增加微协议。

高影响力的Web层群集,第一部分: 利用JavaGroups扩展(7)

时间:2011-04-16 IBM Sing Li

运行时可配置、可堆叠的微协议

表 3 显示了一些经常使用的微协议的描述,其中包括我们的样例初始化字符串所使用的 一个微协议。要了解单个属性细节的更多信息,请参见 参考资料部分到"JavaGroups 用户指南"的链接。

表 3. JavaGroups 微协议

微协议名称 描述
CAUSAL 组中消息的原因排序。实现使用一个矢量时钟
FD 使用 heartbeat 协议的故障检测。根据成员关系列表中的排序, Heartbeat 消息被发送到邻居成员
FD_SOCK 基于 TCP 套接字的故障检测。基于环 的 ping 被在邻居成员之间发送。 当所有成员都在同一物理主机上时工作得最好
FD_PID 使用进程 ID 的故障检测 (本地 JNI 代码,以获得所需的 PID)。只能在 同一台主机上 (一个 IP 地址) 工作
FD_PROB 使用随机算法的故障检测。组的每个成员发送 heartbeat,并维护其他成 员的 heartbeat 计数
FLOW_CONTROL 流控制实现,限制了消息收据之间发送的消息的最大数量
FLUSH 以一致的方式跨所有成员清除所有的消息。通常是在视图更改之前执行
FRAG 消息分段和重新装配(Message fragmentation and reassembly)。确保 较大的消息在沿着栈往下发送之前被分为 FRAG_SIZE大小的段。分段的消息在沿着栈往上发 送之前在接收方被重新装配
GMS 组管理服务。基于虚拟同步模型管理组成员关系
MERGEMERGE2 合并分离的子组。当网络由于故障而分离成多个部分时就形成了子组
NACKACK 实现可靠的传输。基于消息序列号请求丢失消息的重新传输。确保从每个 起始通道发出的消息的正确排序
JMS 将 Java Message Service 用于传输。与任何 JMS 实现协同工作
STATE_TRANSFER 实现状态传输协议,使得新成员可以从同等物(coordinator)或所有成员 获得现有的状态。需要 FLUSH 微协议在协议栈上
UNICAST 实现可靠的单播传输。请求丢失消息的重新传输,并确保发出消息的正确 排序
VIEW_ENFORCER 直到接收到第一个 VIEW_CHANGE 才丢弃消息。客户端只有在成为组成员后 才需要处理消息
STABLE 实现分布式的垃圾收集协议 (也就是说,删除所有已被所有组成员接收到 的消息)
VERIFY_SUSPECT 发送消息以确保以前怀疑的成员已真正崩溃(crashed)
UDP 一般用作组消息传输的最低层。IP 多播用于组广播,而 UDP 用于点到点 通信
PING 用于引导成员关系管理。使用 IP 多播 "ping" 消息来定位成 员,然后再请求这些成员加入组中

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号