JGroup[摘]

Ehcache 下 用jgroup进行复制,Ehcache集群 从官方文档上了解到 用RMI 比较简单,按官方的配置,试了n遍都不成功。配置和网上的一样,还是不行,对rmi没有兴趣了,转用Jgroup. 1. 下载资源 Jgroup, http://sourceforge.net/projects/javagroups/files 阅读详情
JGroup是当前被广泛使用的可靠组间通信的工具之一。例如OSCache以及JBossTreeCache都是用的是JGroup。
       JGroup功能十分强大,通过配置各种参数就可以充分利用它所提供的各项功能。JGroup最大的特点就是支持协议栈的可配置性,它本是实现了基本的Java的协议栈实现,也就是最基本的消息广播的基础,同时支持附加协议栈的配置,消息的传递就是在这些协议栈之间相互传递,封装,检查,丢弃,重发。JGroup可以基于TCP协议来实现消息广播,也可以通过UDP方式来广播消息,利弊不言而喻,TCP可靠,但是代价大,性能没有UDP来的好,UDP速度快,代价小,但是消息的丢失率以及无序性有着很大的限制。但是JGroup在UDP方式的基础上,增加了协议栈的配置,通过配置上层的协议,可以保证消息的重发,大包体的分解(同时保证消息包体顺序),组内机器的状态检测等功能。
       这里大致描述一下使用中的配置参数的内容,可以在配置中正确合理的配置好JGroup的功能,使之在分布式环境中起到最合适的作用。
       当我们启动一个JGroup的组的时候,其实建立了一个通道,可以通过配置文件为这个通道配置相应的协议栈,那么在这个通道上传递的消息也就会在配置的协议栈中传递交互。但是配置多协议的时候也需要注意,当配置的协议越多,那么功能也越强大,支持的传输特性也越多,但是其损失的可能就是性能,所以和平时的网络编程一样,UDP和TCP各有优缺点,只是根据使用的场景需求不同来合理的使用不同的协议栈叠加,达到最佳的效果。
 
       先贴一段JGroup的范例配置:
 
"UDP(mcast_addr=224.0.0.35;mcast_port=45566;ip_ttl=32;" +
"mcast_send_buf_size=150000;mcast_recv_buf_size=80000):" +
"PING(timeout=2000;num_initial_members=3):" +
"MERGE2(min_interval=5000;max_interval=10000):" +
"FD_SOCK:" +
"VERIFY_SUSPECT(timeout=1500):" +
"pbcast.STABLE(desired_avg_gossip=20000):" +
"pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1200,2400,4800):" +
"UNICAST(timeout=5000;min_wait_time=2000):" +
"FRAG(frag_size=4096;down_thread=false;up_thread=false):" +
"pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;" +
"shun=false;print_local_addr=true)"
 
UDP:使用IP多波协议来广播组内消息并且使用的是UDP包作为消息发送给独立的Member。
 
PING:是用多波协议来查找初始化的在线Member。
 
MERGE2:允许将子组合并到一个组。
 
FD_SOCK:基于Socket的错误检测(通过Member之间的环形检测来实现)。当发现有member失败就产生消息通知。
VERIFY_SUSPECT:双重检测member是否确实Dead,多了Suspect的状态。
 
Pbcast.STABLE:删除被全部member查看到的消息(作用就是如果在分布式的情况下,其中某些member没有看到,那么这条消息就不会被删除,会重发,保证消息广播的全局性)
 
Pbcast.NAKACK:保证消息的可靠性和FIFO(消息的顺序传递)。
 
UNICAST:类似于NAKACK的功能。
 
FRAG:大消息的拆分和组装。
 
Pbcast.GMS:组成员协议,响应加入离开组的消息以及新建view的消息。
 
UDP配置:
UDP广播模式可以配置成两种方式:使用UDP和常规IP多波传输。配置类似于范例中的配置。所有的组内成员都运行在一个host上,分布在一个LAN内。但是这个需要确认的就是IP的多波传递是否允许穿越多个子网,通常情况下是不允许穿越多个子网的,因此就需要确保多个组内的member在一个局域网中,并且可以相互间通信。
 
另一种模式就是使用UDP但是不使用IP多波传递。UDP和PING的配置都是基于IP的多波传递的,因此消息传递以及组内成员的初始化检测都是要依靠于IP多波。因此这里提供了另外一种方式就是设定一个每一个member都能够访问到的机器,在这台机器上面设置一个GossipRouter,类似于路由一样,每一个member的注册都直接在这台机器上的服务上管理。
需要配置的就是设置ip_mcast为false。同时需要配置gossip_host gossip_port gossip_refresh这三个参数(地址,端口,刷新一次GossipRouter的时间)。
然后就在那台服务器上运行GossipRouter程序:
java org.jgroups.stack.GossipRouter -port 5555 -bindaddress localhost
 
配置如下:
"UDP(ip_mcast=false;mcast_addr=224.0.0.35;mcast_port=45566;ip_ttl=32;" +
"mcast_send_buf_size=150000;mcast_recv_buf_size=80000):" +
"PING(gossip_host=localhost;gossip_port=5555;gossip_refresh=15000;" +
"timeout=2000;num_initial_members=3):" +
 
当如果需要在WAN中使用JGroup的时候就需要配置TCP来替换UDP了。
"TCP(start_port=7800):" +
"TCPPING(initial_hosts=localhost[7800];port_range=5;timeout=
"num_initial_members=3;up_thread=true;down_thread=true):" +
"VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):"
"pbcast.STABLE(desired_avg_gossip=20000;down_thread=false;up_
"pbcast.NAKACK(down_thread=true;up_thread=true;gc_lag=100;retransmit_
"pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;"
"print_local_addr=false;down_thread=true;up_thread=true)";
FD 协议栈(Failure Detection)
FD的作用就是探测组内的成员是否还活着。当组内的成员被怀疑可能死掉了,那么SUSPECT消息就会传播到集群的每一个节点上。不过这个协议没有将crashed的member踢出去的功能,这个工作由GMS来做,它只是通知的功能。
FD是基于心跳消息检测来实现的,如果回复消息在timeout的规定时间内没有收到,那么就会宣布那个node被suspected,然后会被GMS给踢出去。一共三个参数作为配置项:
Timeout,max_tries,shun。前面两个不说了,最后一个十分重要。例如:一个组内有a,b,c,d四个成员,当d由于负荷过高没有在timeout的时间内作出响应,导致被踢出组的时候,a,b,c的组员view中只有abc三个member,而d的view却还有abcd四个成员,此时如果D再发消息给组内的成员,组内成员将会拒绝接受。那么如果设置shun为true的时候,D就重新加入组内在下面两种情况:1.ABC接受到了D发过来的are-you-alive的检测消息。2.D自己收到了一个view消息,view内不包含D。(类似于重连机制)。这点很重要特别是在分布式的环境中,当某些服务器的压力可能较高,配置的超时时间又不确定是否可以满足高负荷响应。记得要在GMS里面的shun也配置一样的情况。
 
FD_ALL也是基于简单的心跳协议,只不过是每个节点会向每一个member周期的发送心跳包,同时将会保存每个member的状态表。
 
FD_SOCK是基于环形的TCP Socket互联,相互监测来实现FD的功能的,每一个member都有自己的邻居,使得member组成一个环形的校验链。但是有几个缺点,第一当使用多网卡机器的时候,2.2.8以前的版本就可能造成随机绑定ip的问题,以后可以指定bind_addr这个参数,明确邻居的ip。另外的缺点也就是我们在实施过程中发现的问题,由于TCP的异常产生未必都能被检测到,同时例如网络问题等因素,往往这种FD很难保证真实的挂起出错的node,加之他是ring的检测方式,会导致明明某个member已经dead了,但是由于没有检测到,导致后面再加入的member或者自己重启,都无法正常使JGroup正常工作,不断地在重复join/leave的操作。(所以不建议使用这种模式)
 
Group Membership
他关注新member的加入,member离开的请求,处理crashed的member suspect消息等操作。
 
JGroups:Java多播通讯框架详解及示例代码 JGroups是一个强大的Java多播通讯框架,它提供了可靠的群组通信功能,使得开发者可以轻松地实现分布式系统中的群组通信和协调。1.2 可靠性:JGroups使用可靠的传输协议,确保消息的可靠传递,即使在网络不稳定或节点故障的情况下也能保证消息的完整性。1.3 群组成员管理:JGroups提供了灵活的群组成员管理机制,可以动态地加入或离开群组,并自动进行成员发现和故障检测。1.1 多播通信:JGroups支持多播通信,可以在群组中广播消息,实现群组成员之间的高效通信。方法会被触发,并打印接收到的消息。 阅读详情

相关推荐

DeepLabv3+改进68:全网首发-添加DBlock模块 |高效且鲁棒的多任务低光图像修复神经网络

本文提出了一种高效鲁棒的多任务低光图像修复神经网络DarkIR,针对夜间或昏暗条件下图像存在的噪点、光线不足和模糊问题。不同于现有方法分别处理去模糊和低光增强任务,该模型采用新的注意力机制增强CNN感受野,在降低计算成本的同时,在LOL-Blur、LOLv2和Real-LOLBlur数据集上取得最优结果,并能良好泛化到真实夜间图像。

AIcurator的博客 305

Jgroup学习总结

NULL 博文链接:https://8366.iteye.com/blog/921760

【DEIM创新改进】全网独家创新、注意力改进篇 | AAAI 2026 | DEIM 引入轻量级群体注意力(LWGA)模块,可以显著提高其多尺度物体检测能力,特别是在小物体和复杂背景下的表现

本文提出了一种改进的DEIM网络模型,通过引入轻量级LWGA模块显著提升了多尺度物体检测性能。LWGA模块采用局部和全局注意力机制,有效提升了小物体和复杂背景下的识别能力,同时保持低计算成本。该模块通过分割输入特征图并应用多种注意力机制(GPA、RLA、SMA、SGA)进行特征提取和融合,优化了多尺度物体的特征表示。实验表明,改进后的DEIM模型在遥感图像处理等任务中表现出色,在12个数据集上实现了性能与计算效率的最佳平衡,为资源受限设备提供了高效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 236

JGroups介绍及入门实战

但是,消息队列在使用的时候会显得太“重”,他需要额外启动的队列进程:存储队列消息,特定的进程间通信接口。我们在实际工作中,集群往往是按需搭建的,因此缺乏统一、有效的集群模型,其中有技术上实现难度的原因,也有思维上缺乏构建模型的原因,但是jgroups让我们发现,集群的管理功能,如状态同步、消息传递、底层通信都可以模块化设计的。可以看到,为了实现组播,其实底层是需要有很多网络维护工作的,特别是集群中节点故障状态的控制,由于jgroups帮我们做了,所以我们才可以这么简单的完成可靠性如此之高的组播功能。

a1058926697的博客 4121

JGroup全面深入学习--常规使用【1】

JGroups集群通信工具,本文展示了如何创建通道、加入和离开集群、发送和接收消息、获得视图更改通知以及实现状态传输,以及JGroups的JChannel和Receiver api提供的核心功能。

joiwsev的博客 2290

java jgroup_JGroup的初步学习

现在有很多项目都使用JGroups做底层的通讯,知道的开源项目有JBossCache和OSCache用它做为底层支持来实现集群的,一定还有其他的项目也用到了,只不过我不知道而已了。JGroups 适合使用场合服务器集群cluster、多服务器通讯、服务器replication(复制)等,分布式cache缓存JGroups 简介JGroups是一个基于Java语言的提供可靠多播(组播)的开发工具包。...

weixin_32597009的博客 1576

JGroup 使用分享

 JGroup 使用分享       JGroup是当前被广泛使用的可靠组间通信的工具之一。例如OSCache以及JBossTreeCache都是用的是JGroup。       JGroup功能十分强大,通过配置各种参数就可以充分利用它所提供的各项功能。JGroup最大的特点就是支持协议栈的可配置性,它本是实现了基本的Java的协议栈实现,也就是最基本的消息广播的基础,同时支持附加协

放翁(文初)的一亩三分地 1万+

java jgroup_Jgroup | 学步园

服务器开发中,经常要同步几台数据库服务器的数据,同步数据要好几种,比如说在linux中,经常用rsync来同步数据或者写几个Servlet来同步服务器数据,因为我最近学习到JGroup这个通讯工具,所以利用它来更新一些不同服务器上的memcache的数据。一、JGroups 简介JGroups是一个基于Java语言的提供可靠多播(组播)的开发工具包。在IPMulticast基础上提供可靠服务,也可...

weixin_39631767的博客 444

JGroup多播协议

JGroup是一种可靠的群组通讯工具,用Java实现。JGroup以IP多播为基础并且提供可靠性和群组功能。 其中,可靠性包括 1,消息不丢失 2,大消息拆分和重组功能 3,保证消息有序性 4,消息原子性(某条消息要么全部成员都收到,或都收不到) 群组功能包括 1,群组成员知道群组内所有其他成员 2,当群组发生以下的事件,所有群组成员都能收到通知: ...

老七的那些事 1030

远程服务调用协议-Jgroup协议配置

Bboss Aop1.0.7 集成了Jgroup 2.8.0 GA,并对其进行扩展,嵌入了aop框架提供的安全认证、鉴权、消息加密功能。Bboss Aop通过jgroup来支持带有集群特性的远程服务功能,其集群功能依赖于ip 组播协议,远程通讯的范围受ip组播协议的范围限制,因此只能在一个局域网段内使用其组播协议,udp协议上有此限制,其他协议(比如tcp)不受此限制。Jgroup本身的特性可

BbossGroups 打造中国制造品牌 3896

基于TCP多播的JGroup协议

 JGroup是一种可靠的群组通讯工具,用Java实现。JGroup以IP多播为基础并且提供可靠性和群组功能。 其中,可靠性包括 1,消息不丢失 2,大消息拆分和重组功能 3,保证消息有序性 4,消息原子性(某条消息要么全部成员都收到,或都收不到) 群组功能包括 1,群组成员知道群组内所有其他成员 2,当群组发生以下的事件,所有群组成员都能收到通知:                      a)

3235

JGroups 简介、适用场合、配置、程序例子Demo等完全使用指南

2007-05-08 14:38 目前项目中在克服JGroups初期使用的困难之后,已经使用比较稳定了。感觉比较烦琐和容易出错的还是JGroups配置。感觉中文的资源较少,现将自己总结的经验总结如下Tim http://hi.baidu.com/jabber/blog/item/7e879852a23efd0f0cf3e3ea.htmlJGroups 适合使用场合服务器集群clu...

“因举报被劝退”学生:我愿做出头鸟 790

JGroup入门

分布式通知技术-JGroups 入门 1 基本信息 要: 介绍什么是Multicast,什么是JGroups,以及JGroups详解 2 什么是Multicast    Multicast 是一种同时像多台机器发送数据的机制。Multicast使用224.0.0.0 到239.255.255.255

小易的坐骑 9847

分布式通信框架 - JGroups

分布式通信框架 - JGroups

weixin_46619605的博客 883

推荐文章:JGroups - 高效可靠的分布式通信框架

推荐文章:JGroups - 高效可靠的分布式通信框架 JGroupsThe JGroups project项目地址:https://gitcode.com/gh_mirrors/jg/JGroups JGroups 是一个用于构建高可用、可靠和高效的分布式系统的开源通信框架。它提供了一套完整的解决方案,可以实现节点间的发现、组播和单播消息传递、故障检测和容错等功能。 JGroups 能用来做什...

gitblog_00004的博客 660

利用JGroup同步Memcache文件

利用JGroup同步Memcache文件

走向资深架构师的旅程 5090

组通信之jgroups篇----jgroups综述

 Group communication uses the terms group and member. Members are part of a group. In the more common terminology,a member is a node and a groups is a cluster. We use these words interchangeably.我

ustcgy的专栏 3415

【分布式通知技术-JGroups】

    什么是JGroups JGroups是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。JGroups可以用来创建一个组,这个组中的成员可以给其他成员发送消息。   JGroups is a toolkit for reliable messaging. It can be used to create...

468

WIN8PE-xiaobei-raid-sas-X64.iso

支持raid的8 PE系统,服务器必备,亲测可用

上一篇: [摘]Subversion之路---实现精细的目录访问权限控制
下一篇: PowerDesigner12破解[zhai]
shiqiang1234
博客等级 码龄21年 20粉丝 51原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值