本文共 3690 字,大约阅读时间需要 12 分钟。
JGroups
栈里的可靠传输协议(reliable delivery protocols
)确保数据包按正确的顺序(FIFO
)正确地递送到目的节点。可靠的信息递送的基础是肯定和否定的递送确认(delivery acknowledgments
)(ACK
和 NAK
)。在 ACK
模式下,发送者重新发送信息直到收到接收者的确认。在 NAK
模式下,当接收者发现一个间断时,它会请求重新传送。 2.1.4.1 UNICAST
UNICAST 协议用于单播信息。它使用 ACK 。它被配置成 JGroups Config 元素下的一个子元素。这里有一个配置 UNICAST 协议的例子。 < UNICAST timeout ="100,200,400,800" /> • timeout 指定重新传送的超时时间(毫秒数)。例如,如果这个超时时间是 "100,200,400,800"
,如果发送者在 100
毫秒后还没有接到 ACK
,它会重新发送信息,第二此重发会在 200
毫秒后,以此类推。 2.1.4.2 NAKACK
NAKACK 协议用于多点传送信息。它使用 NAK 。在这个协议下,每个信息用一个序列号标识。接收者根据这个序列号来按顺序递送信息。当检测到序列号存在一个间断时,接收者会要求发送者重新传送丢失的信息。 NAKACK 协议被配置为 JGroups Config 元素下的 pbcast.NAKACK 子元素。这里有一个配置示例。 < pbcast.NAKACK max_xmit_size ="8192" use_mcast_xmit ="true" retransmit_timeout ="600,1200,2400,4800" /> 下列是pbcast.NAKACK
元素的可配置属性。 • retransmit_timeout 指定重发的超时时间(毫秒数)。它和 UNICAST
协议里的 timeout
属性是一样的。 • use_mcast_xmit 决定发送者是否应该重发给整个群集而不只是请求的节点。这在发送者取消数据包时很有用 -
我们不需要对每个节点都重发。 • max_xmit_size 指定当多个数据包丢失时,捆绑在一起的重发的最大规模。 • discard_delivered_msgs 指定是否丢弃接收节点上的递送信息。在缺省情况下,我们保存所有的递送的信息。然而,如果我们只需要发送者重发信息,我们就可以启用这个选项来丢弃递送的信息。 除了协议栈以外,
在Config
元素中你也可以配置JGroups
网络服务。 2.1.5.1 组成员资格
JGroups 栈里的组成员资格( group membership )服务维护一个活动节点的列表。它处理加入和离开群集系统的请求。它也处理故障检测协议( failure detection protocols )发送的可疑 (SUSPECT) 信息。当组成员资格有变动时,它通知群集系统里的所有节点,负载平衡系统( load balancer )和客户端拦截器( client side interceptors )。组成员资格( group membership )服务可以在 JGroups Config 元素下的 pbcast.GMS 子元素里配置。这里是一个配置示例。 < pbcast.GMS print_local_addr ="true" join_timeout ="3000" down_thread ="false" join_retry_timeout ="2000" shun ="true" /> • join_timeout 指定了等待新节点 JOIN
请求成功的最长时间(毫秒数)。 然后再试。 • join_retry_timeout 指定 JOIN
失败后重新递交JOIN
前所等待的时间(毫秒数)。 • print_local_addr 指定是否在启动时输出节点自己的地址。 • shun 指定如果收到指明自己并非成员节点的群集视图,节点是否剔除(shun
)自己。 • disable_initial_coord 指定是否阻止这个节点成为群集控制点(cluster coordinator
)。 2.1.5.2 流程控制
流量控制( flow control )服务试图在节点间控制发送和接收数据传输率。如果一个节点发送的过快,它可能会使接收节点难以负荷,导致数据包的丢失而且不得不重新发送。在 JGroups 里,流量控制通过基于信用值( credit-based )的系统来实现。发送和接收节点具有相同的初始信用值( credits )(字节数)。发送者减去所发送信息的字节数,而接收者积累它接收到的信息的字节数。当发送者的信用值减少至某一极限时,接收者将把一些信用值发送给发送者。如果发送者的信用值被用光了,发送者将暂停,直到它收到接收者的信用值为止。流量控制服务在 JGroups Config 元素下的 FC 子元素里配置。下面是一个配置示例。 < FC max_credits ="1000000" down_thread ="false" min_threshold ="0.10" /> • max_credits 指定最大的信用值(字节数)。这个值应该小于 JVM
的 heap size
。 • min_credits 指定发送者的极限信用值,如果低于这个值,接收者就应该发送更多的信用值给发送者。 • min_threshold 指定极限值的百分比。它可以覆盖 min_credits
属性。 2.1.5.3 状态转移
状态迁移服务从一个现有的节点 ( 例如 ., 集群协调者 ) 传输状态到一个新加入的节点。它的配置在 JGroups Config 元素之下的 pbcast.STATE_TRANSFER sub-element 里 . 它没有一些配置属性 . 这是一个配置实例 . < pbcast.STATE_TRANSFER down_thread ="false" up_thread ="false" 2.1.5.4 分布式的垃圾回收
在一个 JGroups 集群里 , 所有的节点不得不存放收到的所有消息,为了万一出现故障的潜在重发。可是 , 如果我们永远存储所有的消息 , 我们将用完内存。所以 , 在 JGroups 中的分布式的碎片收集服务周期性的,从我们能看到的所有节点的各自的内存中清理消息。分布式碎片收集配置在 JGroups Config 元素之下的 pbcast.STABLE sub-element 。这是一个配置实例 . < pbcast.STABLE stability_delay ="1000" desired_avg_gossip ="5000" down_thread ="false" max_bytes ="250000" /> 在pbcast.STABLE
元素里的配置属性如下.
• desired_avg_gossip 指定碎片收集运行的时间间隔(
单位是毫秒).
当值设置成0
时,将禁用此服务。 • max_bytes 指定在集群触发一个碎片收集运行之前,收到的字节的最大数量.
当值设置成0
时,将禁用此服务。 • max_gossip_runs 指定在一些修改之前最大碎片收集运行。 这个数值到达之后,直到这个消息被接收,否则没有碎片收集。 注意 当你有一个高效的通信群集的时候设置 max_bytes 属性. 2.1.5.5 合并
当一个网络出现错误的时候,集群可以被分割为几个不同的分区。 JGroups 有一个 MERGE 服务,允许协调者在分区中互相通话。 and form a single cluster back again. flow 控制服务配置在 JGroups Config 元素之下的 MERGE2 sub-element 里面。这有一个实例配置。 < MERGE2 max_interval ="10000" min_interval ="2000" /> • max_interval 指定发送一个MERGE
消息的最大时间,单位是毫秒。 • min_interval 指定发送一个MERGE
消息的最小时间,单位是毫秒。 JGroups 在 min_interval 和 max_interval 之间选择一个随机的数值来发送 MERGE 消息。 注意 在一个合并里集群的状态是不合并的。这需要应用程序来完成。 本文转自xudayu 51CTO博客,原文链接:http://blog.51cto.com/xudayu/70656,如需转载请自行联系原作者