JGroups, Terracotta & Hazelcast

16

我试图理解这三个项目,它们似乎都处理在尝试进行聚类时出现的略微不同的问题。但是所有关于它们的文档都是针对已经“知道的”开发人员编写的,并且对于像我这样的新手来说很难理解。

  • 它们各自试图解决哪些具体问题,这些问题彼此之间有何不同?
  • 与使用应用程序服务器进行聚类(例如JBoss或GlassFish内置的聚类功能)相比,使用它们进行聚类有什么不同?
  • 这些框架解决的问题是否足够不同,以使它们在同一项目上使用成立?还是它们是彼此竞争的,因此对同一/类似问题具有不同的解决方案?

非常感谢您提供对这些神秘而又难懂的框架的任何见解!

2个回答

13

jgroups主要涉及任务分配和集群管理,而hazelcast/terracotta更专注于分布式缓存(数据网格) - 当你比较它们所有的功能时,它们之间肯定存在一些重叠 - 您需要确定哪些功能更重要,可能更容易实现。

hazelcast可以通过基于TCP的寻址或多播来进行集群化。它支持map、multimap、list、queue、topic - 对于基于磁盘的备份,您必须实现load/store接口。

对于EhCache,您可以使用JGroups、JMS或RMI复制缓存。

简而言之,如果您正在寻找一个分布式数据缓存/网格,那么hazelcast或ehcache是需要考虑的工具 - 如果您正在使用库进行任务分配并且不关心现有的数据网格缓存,则应该选择JGroups。


感谢@ali (+1) - 但是还有一个问题需要追问:JGroups/Hazelcast/Terracotta上的集群与集群我的JBoss/GlassFish服务器有何不同?此外,如果您能帮助我理解Terracotta和EhCache之间的差异/关系,那将不胜感激!再次感谢! - IAmYourFaja
Terracotta几年前购买了Ehcache并将其作为缓存整合到他们的产品中。我假设您正在寻找开源解决方案(除非您希望获取这些产品的企业版)。我没有花太多时间研究JBoss / GlassFish - 我认为JBoss使用JGroups进行内存复制/集群(不确定,但我认为您过去也可以尝试使用JMS / RMI) - 您还可以进行基于磁盘的备份。不确定GlassFish的最新版本。希望能有所帮助。 - ali haider
@IAmYourFaja - 据我所知,GlassFish使用Shoal进行集群。 Shoal在底层使用JXTA / JGroups。 JBOSS使用Infinispan和JGroups的组合,其中Infinispan是数据网格解决方案,而JGroups是集群解决方案。Hazelcast和Terracotta更容易比较。Hazelcast可用于集群和数据网格。由于尚未在生产中使用过该框架,因此无法评论其性能,但该框架非常易于使用。另外一件事是,Hazelcast被设计为点对点解决方案,而Terracotta更像是主从类型。 - sutanu dalui

4

有两种技术可以区分: i. 启用器 (即中间件API) 和 ii. 端到端或即插即用解决方案 (即应用程序API)。

JGroups是一种启用器技术,因为其核心实现了Group Communication Primitives,如可靠的单播、组播和广播,这些是更复杂的分布式协议如Atomic Broadcast的构建块;它属于Group Communication Toolkits (GCTs)类别。

Hazelcast和Terracotta也是端到端服务技术,因为它们为分布式应用程序提供了丰富的服务集;它们属于In-Memory Data Grids (IMDGs)类别,也称为分布式和内存缓存解决方案,非常适合计算低延迟数据。

在能力方面:

  • JGroups提供了一组基本原语,以启用群组成员身份,这是任何集群场景中的关键概念,在这种场景中,加入/离开参与者/节点必须在生命周期和角色方面进行管理;它允许创建一个丰富的协议集,基于协议内核设计,通过在基础API(如群组成员身份)上堆叠微型协议来实现,这些API依赖于可靠的消息分发,无论是在TCP还是UDP上。JGroups默认情况下不提供任何组合服务:这种类型的服务可以建立在提供的基本功能之上。

  • Hazelcast提供了一组丰富的分布式数据结构,可以完全复制或分片,并具有隐式复制因子;分布式List、Map、Queue和Lock是使用Java Collection接口实现的基本数据结构的示例,显然,分发和复制需要群组成员身份服务,其引擎提供并提供带有Cloud Discovery SPI的集群管理器模块。Hazelcast可以通过IP多播、带TCP的IP多播和第三方云服务(例如Zookeeper)实现群组成员身份管理。潜在地,Hazelcast可能使用JGroups服务进行节点发现和集群管理(也称为群组成员身份服务)。

  • Terracotta,另一方面,如果与流行的Ehcache相关联,则提供了一个分布式缓存服务,该服务又基于一组基本的群组成员身份能力;在实现方面,Terracotta Ehcache可能基于JGroups服务,并提供特定于缓存系统的特定API,因此不像Hazelcast那样通用。

考虑到这两种技术之间的关系,JGroups实际上是一种“启用服务”(即构建块),用于像Hazelcast和Terracotta这样的“复合服务”(即语义丰富的API),为第三方应用程序提供端到端或即插即用的服务,并在幕后管理所有可靠的分发方面。显然,JGroups是中间件,而Hazelcast和Terracotta是应用程序,它们可以嵌入自己的中间件实现以提供群集服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接