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状态)
相关推荐
JGroups支持群集成员变化的通知机制,当有新节点加入或离开时,会自动更新成员列表并通知所有节点。 ##### 2.5 尝试SimpleChat应用 SimpleChat是一个简单的示例应用,展示了如何使用JGroups进行实时聊天。通过这个...
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源代码 ...
这个文件定义了集群中节点如何相互发现、通信以及故障检测的规则。配置文件中的关键元素包括: 1. **Transport**: 定义了节点间通信的协议和参数,例如UDP或TCP。在端口配置中,每个节点应使用不同的端口以避免冲突...
本文将基于belaban-JGroups-19d7183版本的源代码,深入探讨JGroups的核心机制和关键组件,帮助读者理解并掌握这个强大的工具。 一、JGroups概述 JGroups的目标是为分布式应用提供一个健壮、高效的通信基础,确保...
JGroups支持多种传输协议,包括UDP、TCP和JMS等。在JGroups中,消息传输可以保证可靠性,即消息在传输过程中不会丢失,所有的接收者以相同的顺序接受所有的消息,并且原子性,即一个消息要么被所有的接收者接收,...
jgroups-2.2.7.jar jgroups-2.2.7.jar
例如,"TCP"协议用于提供可靠的TCP连接,"GMS"(Group Membership Service)协议则负责管理组成员的加入和离开。 在Jgroups-2.5.1-jdk14版本中,我们可以看到这个库支持JDK14,这意味着它已经考虑了现代Java语言...
此文档主要针对JGroups 2.X版本的官方帮助文档进行详细解读,旨在帮助开发者深入理解并有效地利用JGroups。 一、JGroups简介 JGroups的核心目标是确保在分布式环境中数据的一致性。它提供了一套完整的工具,用于...
总的来说,JGroups是Java开发人员构建分布式系统时的强大工具,它简化了集群通信的复杂性,提供了高效、可靠的通信机制。通过灵活的协议栈配置,开发者可以根据具体需求调整性能和功能,从而实现高度定制化的解决...
JGroups提供了事件监听器机制,以便应用程序能够接收到消息和视图变更通知。通过实现`MessageListener`接口,可以定义消息到达时的回调函数;而`ViewListener`则用于处理群集成员变化的事件。 ##### 简易聊天应用...
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多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种...
UNICAST3 协议的工作机制: 1. 发送者 A 在发送给接受者 B 的消息中附上单调递增序列号 2. B 收到 A 发来的 M 后,B 回复 ack M,这个 ack 在每条单独的消息处理过程的最后进行处理,或者批处理 3. ack 是可累积的...
jgroups.part3
1. **组成员管理**:JGroups提供了一套完整的机制来发现和管理组成员,包括加入、离开、重新加入和检测成员的死亡。 2. **消息传递**:支持多种消息模式,如单播、多播、广播和有序广播,且能确保消息的可靠传输,...
通过深入理解JGROUPS的消息发送、处理和接收机制,我们可以更好地优化我们的分布式应用程序,提高其性能和稳定性。对于有兴趣深入了解JGROUPS工作原理的开发者,阅读源码和实践案例是获取深入理解的宝贵途径。 参考...
JGroup可以基于TCP协议来实现消息广播,也可以通过UDP方式来广播消息,利弊不言而喻,TCP可靠,但是代价大,性能没有UDP来的好,UDP速度快,代价小,但是消息的丢失率以及无序性有着很大的限制。但是JGroup在UDP方式...