JGroups 是一个 纯 Java 编写的可靠通信组件库,最近在研究 物联网开源项目 HiveMQ,他的官方网站提到商业版支持集群功能,并且是通过 JGroups 来实现的,于是决定一探究竟,JGroups 到底是何方神圣!!
1. JGroups 历史
-
1998-1999在康奈尔大学
JGroups 作者Bela Ban 在康奈尔大学计算机科学学院攻读博士后学位,当时主要工作是基于 Ensemble 开发 Java 接口,但是 Ensemble 使用 OCaml 语言开发,OCaml 语言语法结构复杂,编译安装也不方便,平台依赖性强,所以作者开始用Java重写Ensemble,就是后来的JGroups。 -
2000年5月
SourceForge成立,作者决定将JGroups开源到SourceForge,其他开发者加入到JGroups,使JGroups得到了快速发展,并得到广泛认可,开始有很多项目使用Jgroups。 -
2002年秋季
当时JBoss创始人 Labourey 决定 JBoss 集群实现将使用JGroups,于是邀请Bela Ban 加入到JBoss,负责JGroups和JBoss Cache产品。 -
2006年5月
Red Hat 宣布收购JBoss,Bela Ban加入了红帽,在红帽带动下,JGroups也得到了很好的发展,越来越多的开发者参与到JGroups项目。 -
2010年10月30日
JGroups 2.11 Final 发布,该版本包含一些新特性、优化和bug修复,而下一个版本2.12将是3.0之前的最后一个版本。 -
2012年07月
JGroups 发布了两个新版本,分别是 3.0.11 和 3.1.0 。JGroups 3.0.11 用于 EAP 6 / JBoss 7.x 应用服务器的版本,主要是 bug 修复,包含两个性能方面的改进;而 3.1.0 解决了超过 90 个问题。 -
最新
JGroups 目前维护4.X 和 5.X两个版本,最新的版本分别是:4.2.11 和 5.1.4
2. 简介
简单来说,JGroups 是一个基于 Java NIO 封装的网络通信组件库,特别的是,作者将这个库做的非常的稳定好用,并且提供了简介明了的接口。
稳定好用体现在以下几个方面:
- 协议栈抽象和封装
- 组成员管理和检测
- 大消息自动拆分和合并
- 消息丢包重发
- 消息顺序发送和接收
基于以上特点,JGroups 适合使用场合服务器集群cluster、多服务器通讯、服务器replication(复制)、分布式cache缓存等
JGroups并没有处理大量连接的特性,所以并不适合用来做需要建立大量网络连接的场景,比如:聊天软件服务器,物联网服务器等。
JGroups 也不适合用来做网络客户端开发。
3.开源协议
-
Apache License 2.0
从 3.4 以后的版本,JGroups 都是基于 Apache License 2.0协议 -
LGPL 2.1
3.4 以前的版本,都是基于 LGPL 2.1 协议
4. 性能测试
作者在自建的4节点集群上进行测试,得到的结果是:
message size(kb | throughputs(MB/sec/node |
---|---|
1 | 137 |
2.5 | 150 |
5 | 153 |
对于不同的环境,数值可能完全不同,建议 使用 MPerf 或 UPerf 自行进行记性能测试。
I. 引用
https://blog.csdn.net/weixin_33950035/article/details/92443307
https://baike.baidu.com/item/Jgroups/516884?fr=aladdin
http://www.jgroups.org/performance.html