`
OpenMind
  • 浏览: 177214 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JGroups TCP 发现机制解读

阅读更多

jgroups创建一个channel需要创建一个协议栈,协议栈的底层是传输协议,如果使用TCP的话,它的发现机制和心跳是怎么实现的呢?

 

首先,TCP启动的时候会启动一个SocketServer bind到一个特定的地址然后accept:ConnectionAcceptor。jgroups会给每个TCP socketServer创建一个ConnectionMap<ipAddress->TCPConnection>,当accept到一个连接之后会创建一个TCPConnection对象put进这个Map。(TCPConnection对象用于读写数据)

 

心跳线程是一个timer,会在member list里面轮询去连接每个member的SocketServer,并尝试建立连接。如果失败,意味着这个member还没有加入集群,如果成功,则放入上述的TCPConnectionMap里面,并且会把当前的SocketServer的地址发送过去。

 

这里有个问题:当两个节点相互发现的时候,会建立两条连接吗?

答案会,但最终只会保留一条连接。

jgroups有一个锁,在锁里面处理创建和put操作。

 

accept线程如果accept到一个连接,先读取address,发现TCPConnectionMap里面已经有这个address对应的连接了,就会比较一下当前节点和对方节点bind的地址,当peer_addr>local_addr时,使用accept到的这个连接替换原来的(我主动connect的)连接,并把原来的连接close掉。  这些操作在锁中进行,保证不会在消息发送的过程中半路把连接close掉了。

 

TCP连接总是一方accept,一方connect,是非对等的,而集群节点之间的发现是对等的。

 

上面的设计解决了非对等(TCP)的情况下,以对等的方式发现成员的问题。

 

用UDP multicast方式的发现是对等的:每个member启动的时候(包括间隔心跳),向设定的multicast group发送消息:I'm alive。所有成员都会收到这个消息,然后就知道这个member加入了集群(或者一直处于alive状态)

 

 

分享到:
评论

相关推荐

    JavaEE源代码 jgroups-2.2.8

    JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 ...

    jgroups-2.2.7.jar

    jgroups-2.2.7.jar jgroups-2.2.7.jar

    jgroups.part1

    jgroups.part1

    jgroups-3.2

    其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种...

    JGroups的Raft实现jgroups-raft.zip

    jgroups-raft 项目是 JGroups 框架对 Raft 的实现。Maven:&lt;groupId&gt;org.jgroups &lt;artifactId&gt;jgroups-raft &lt;version&gt;0.2&lt;/version&gt;Raft 是一个容易理解的共识算法。在容错和性能方面它相当于 Paxos(Google 的一致...

    jgroups-3.0.2

    其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种...

    JGroups_集群.pdf

    JGroups_集群.pdf

    jgroups.part3

    jgroups.part3

    jgroups源代码

    jgroups源代码,想要学习jgroups开源框架的童鞋可以看看

    Jgroups 教程

    JGROUPs 的重要用法全部都在里面了

    Jgroups-all.jar

    JGroup可以基于TCP协议来实现消息广播,也可以通过UDP方式来广播消息,利弊不言而喻,TCP可靠,但是代价大,性能没有UDP来的好,UDP速度快,代价小,但是消息的丢失率以及无序性有着很大的限制。但是JGroup在UDP方式...

    Jgroups中的UNICAST3协议中文翻译

    Jgroups是一款组播工具,基于IP多播的可靠的组播中间件

    Ehcache通过Jgroups做集群

    Ehcache通过使用Jgroups做集群配置,更改每一个不同的jgroups.xml文件的端口号和IP,如果一台机器就使用127.0.0.1即可。配置好之后,把每台机器起来,就可以测试了。

    基于JGroups的共享电子白板系统的研究与实现

    基于JGroups的共享电子白板系统的研究与实现

    JGroups(Java多播通讯框架) v4.0.0.CR1.zip

    JGroups(Java多播通讯框架)简介 JGroups是一个可靠的群组通讯Java工具...- 支持UDP (IP Multicast), TCP, JMS等传输协议 - 免费开放源代码 JGroups(Java多播通讯框架)页面展示 相关阅读 同类推荐:站长常用源码

    jgroups-2.6.8.GA.jar

    jgroups-2.6.8.GA.jar jgroups-2.6.8.GA.jar

    Android代码-jgroups-android

    JGroups - A Framework for Group Communication in Java ======================================================== March 3, 1998 Bela Ban 4114 Upson Hall Cornell University Ithaca, NY 14853 bba@...

    Java多播通讯框架 JGroups

    Java多播通讯框架 JGroups

    jgroups的jar

    JGroups是一个开源的纯java编写的可靠的群组通讯工具。其是一个可靠的组播通讯工具集

    jgroups

    JGroups 2.5 tutorial 相当不错

Global site tag (gtag.js) - Google Analytics