16

我想在具有多个节点的 JVM 上创建一个分布式应用程序,并且需要一个库来允许我:

  • 管理集群/网格成员,即我想在离开/加入时获得通知
  • 管理集群成员之间的消息

我找到了两个解决方案:

  • JGroups - 它可以工作,但它看起来有日期并且没有被广泛使用
  • Akka - 它基于 Scala,它的集群模块看起来并不成熟

有没有其他图书馆可以做同样的事情?

4

4 回答 4

32

JGroups 自 1998 年以来一直存在,因此非常稳定,一点也不过时!它正在积极开发中(我是主要开发人员)。

它被很多应用程序/系统使用,如果你用谷歌搜索它,你会发现很多参考资料。就在本周,一家使用它的电信公司打破了使用 JGroups 构建的最大集群的记录,拥有 1115 个节点的集群!

JBoss (Wildfly) 集群 (Infinispan) 也使用 JGroups。我建议写一个小原型,看看它的表现如何。如果您在 JGroups 邮件列表上提问,那里的人会非常乐于助人...

我无法评论 Akka,因为我没有使用过它,但无论如何我对 Scala 的厌恶会让我远离它......

于 2013-09-26T06:08:40.917 回答
7

有没有其他图书馆可以做同样的事情?

阿帕奇动物园管理员。自己从未使用过,但听说过。

就个人而言,我使用 JGroups 已有好几年了。一开始它是不稳定的——我的基于 TCP 的大约 10 个节点的集群每周被破坏几次(分成子集群),但后来 Bela Ban 改进了库,它运行良好。

我对“JGroups vs Akka”的 5 美分:

  • Akka Cluster 配置更简单,不像 JGroups 那样“深”
  • Akka Cluster 使用非阻塞 I/O 进行通信(目前在 Netty 之上),JGroups 总是使用阻塞 TCP 套接字(这对于大型集群可能很关键;但 JGroups 中也有 UDP ......但 UDP 并不总是适用...)
  • Akka Cluster 提供了更高级的东西,比如集群感知路由器和分布式 PubSub,它们与 Actors 很好地集成(当然如果你喜欢 Akka 和 Actors)
  • Akka Cluster 涵盖了大多数用例,但不是全部:查看我们前段时间的讨论:https ://groups.google.com/forum/#!topic/akka-dev/WUsi6qfV5BU
于 2013-09-30T09:02:46.827 回答
5

如果您按 GitHub 上的星数计算,那么其他项目(Cassandra、Riak、Hadoop 等)也会胜过 JGroups... :-) 我会在 JGroups 和 Aka 上制作原型,然后选择可行的解决方案最适合您(性能、功能、简单性等)。干杯,

于 2013-09-26T14:38:50.537 回答
5

我的 2 美分。我在我的项目中使用了 JGroups 来实现类似的要求。env 大约有 60 个节点,这有点小,但我们在节点之间有大量活动(大约 1MM 消息 pd)。JGroups 非常棒,因为它的网络配置非常灵活且非常稳定。当您为集群配置 JGroups 时,您可能会很难学到一些东西,这些集群拆分在不同的数据中心/LAN 甚至 VLAN 上,因为 JGroups 上的用户活动并不多,这与其他可用的较新选项不同现在。如果您有时间使用它并拥有与您的产品相当的 QA/Staging 环境,我认为 JGroups 是一个非常好的选择。

于 2013-09-26T16:04:01.030 回答