JGroups掀起Java群组通讯风潮

来源:互联网 发布:java下载文件到服务器 编辑:程序博客网 时间:2024/05/06 23:58

JGroups掀起Java群组通讯风潮

cleverpig 发表于 2005-11-25 10:11:05
作者:cleverpig     来源:Matrix
评论数:3 点击数:1,156     投票总得分:3 投票总人次:1
关键字:jGroups,群组,通讯

摘要:

JGroups是一个开源的纯java编写的可靠的群组通讯工具。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈,对于每个产品都有不同的可靠性需求。这种协议栈可以让用户定义的自己可靠性指标和性能指标。
JGroups掀起Java群组通讯风潮

作者:cleverpig


版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
作者:cleverpig(http://blog.matrix.org.cn/page/cleverpig)
原文:[http://www.matrix.org.cn/resource/article/43/43987_JGroups.html]http://www.matrix.org.cn/resource/article/43/43987_JGroups.html[/url]
关键字:jGroups,群组,通讯

项目简介:

JGroups是一个开源的纯java编写的可靠的群组通讯工具。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈,对于每个产品都有不同的可靠性需求。这种协议栈可以让用户定义的自己可靠性指标和性能指标。

一、可靠性:

    * 通过使用重传丢失信息的技术保证每条群组消息被发送到所有接收者;

   * 将大块消息分解为多个小块消息发送,并在接收方重新组装;

   * 确保消息的顺序性,例如由发送者P发送的两条消息m1和m2按照相同的顺序(FIFO)被所有接收者接收;

   * 保证消息收发的原子性,一条消息或者被所有接收者接收或者没有一个接收者收到。

二、群组成员管理:

     * 轻松获得每个分组的成员信息;

   * 当新成员加入、当前成员离开或者一个当前成员掉线时,组内成员均会获得通知。

三、JGroups支持的多种协议堆栈:

下表是JGroups支持的协议:
工作模式                    不可靠的                       可靠的
单播                         UDP                                    TCP
多播                         IP多播                         JGroups

1.单播模式:

在单播通讯模式下,系统使用UDP和TCP两种协议完成一下过程:一个消息发送者发送一个消息给某个接收者。
众所周知,UDP协议是不可靠的,数据包可能在传输过程中丢失、重复、没有按照发送顺序到达,而且作为UDP数据包大小还受限于数据包的最大上限。
TCP协议也是一种单播的方式,但是它对于信息的丢失采取了消息重传的手段,有效地避免了数据重复,并将长度大于数据包的最大上限的数据进行分解,提供了这些分解后的数据给应用程序进行发送。

2.多播模式:

在多播通讯模式下,一个消息发送者可以将一条消息发送给多个接收者。IP多播扩展了UDP协议:一个发送者发送一条消息到一个多播地址,导致加入这个多播地址的接收者都会接收到此消息。像UDP一样,这种消息传输方式仍然是不可靠的,在这里对于加入到多播地址的接受者来讲并不被作为成员对待。

四、JGruops的灵活性体现:

JGroups扩展了可靠的单播消息传输到多播的设置中。就像上面所讲的,它提供了基于IP多播的群组成员管理和可靠性。之所以这样说,是因为每个应用程序具有不同的可靠性需求,JGroups将一套灵活的协议堆栈作为其协议构架,允许用户使用自定义的混合协议堆栈,自由的在不可靠性但是速度较快的协议堆栈--到高可靠性但速度稍慢的协议堆栈之间选择。

例如,一个使用者可能在开始时采用IP多播作为唯一的协议堆栈。为了增加消息传输的无损性,他可能增加NAKACK协议(一种可以减少重复数据包的协议)。此时当消息总能够从发送者发送到接收者,但是数据包发送与接收的顺序却无法定义。因此,使用者将选择利用每个发送者发送顺序的FIFO层对消息进行排序。当要求此排序应用于所有发送者时,使用者就要在协议堆栈中增加TOTAL协议。群组成员关系服务(GMS)和FLUSH协议应用于群组管理中:它允许使用者注册一个回调函数,此函数在成员关系变化(例如成员加入、离开、掉线等事件)时被调用。最后,失败检测(FD)协议是GMS在通知掉线成员时所需要的,如果一个新成员需要获得当前所有成员状态,状态传输(STATE_TRANSFER)协议就需要添加到自定义协议堆栈中。当使用者需要加密信息,则可以方便的加密(CRYPT)协议(负责加密/解密消息,使用密钥发布工具来重新发布密钥)。

通过使用这些协议的集合可以灵活的根据应用需求建立可靠的多播(或者单播)通讯,它给我们带来了以下的便利:

    * 用户只使用定义好的协议堆栈,而不是全部协议;

    * 由于这些协议互不依赖,并且可以被修改、替换、增加新协议,从而提高了系统的模块程度及维护能力。

五、参考资料:
Apache论坛:http://www.matrix.org.cn/topic.shtml?forumId=17

jgroups官方文档:http://www.jgroups.org/javagroupsnew/docs/overview.html
 
原创粉丝点击