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.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.part1
其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种...
jgroups-raft 项目是 JGroups 框架对 Raft 的实现。Maven:<groupId>org.jgroups <artifactId>jgroups-raft <version>0.2</version>Raft 是一个容易理解的共识算法。在容错和性能方面它相当于 Paxos(Google 的一致...
其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种...
JGroups_集群.pdf
jgroups.part3
jgroups源代码,想要学习jgroups开源框架的童鞋可以看看
JGROUPs 的重要用法全部都在里面了
JGroup可以基于TCP协议来实现消息广播,也可以通过UDP方式来广播消息,利弊不言而喻,TCP可靠,但是代价大,性能没有UDP来的好,UDP速度快,代价小,但是消息的丢失率以及无序性有着很大的限制。但是JGroup在UDP方式...
Jgroups是一款组播工具,基于IP多播的可靠的组播中间件
Ehcache通过使用Jgroups做集群配置,更改每一个不同的jgroups.xml文件的端口号和IP,如果一台机器就使用127.0.0.1即可。配置好之后,把每台机器起来,就可以测试了。
基于JGroups的共享电子白板系统的研究与实现
JGroups(Java多播通讯框架)简介 JGroups是一个可靠的群组通讯Java工具...- 支持UDP (IP Multicast), TCP, JMS等传输协议 - 免费开放源代码 JGroups(Java多播通讯框架)页面展示 相关阅读 同类推荐:站长常用源码
jgroups-2.6.8.GA.jar jgroups-2.6.8.GA.jar
JGroups - A Framework for Group Communication in Java ======================================================== March 3, 1998 Bela Ban 4114 Upson Hall Cornell University Ithaca, NY 14853 bba@...
Java多播通讯框架 JGroups
JGroups是一个开源的纯java编写的可靠的群组通讯工具。其是一个可靠的组播通讯工具集
JGroups 2.5 tutorial 相当不错