JGroups 简介

unimof 2021年02月10日 554次浏览

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(kbthroughputs(MB/sec/node
1137
2.5150
5153

对于不同的环境,数值可能完全不同,建议 使用 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