2.1.4 可靠的传输协议
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" />
UNICAST
元素里只有一个可配置属性。
•
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
指定是否丢弃接收节点上的递送信息。在缺省情况下,我们保存所有的递送的信息。然而,如果我们只需要发送者重发信息,我们就可以启用这个选项来丢弃递送的信息。
2.1.5 其他的配置选项
除了协议栈以外
,
在
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" />
下列是
pbcast.GMS
元素里的可配置属性。
•
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" />
下列是
FC
元素的可配置属性。
•
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" />
在
FC
元素里可配置的属性如下。
•
max_interval
指定发送一个
MERGE
消息的最大时间,单位是毫秒。
•
min_interval
指定发送一个
MERGE
消息的最小时间,单位是毫秒。
JGroups
在
min_interval
和
max_interval
之间选择一个随机的数值来发送
MERGE
消息。
注意
在一个合并里集群的状态是不合并的。这需要应用程序来完成。