15

试图围绕这 3 个项目展开思考,它们似乎都处理了尝试集群时出现的略有不同的问题。但是他们的所有文档都是为已经“知道”的开发人员编写的,对于像我这样的新手来说很难理解。

  • 他们每个人都试图解决的具体问题是什么,这些问题彼此有何不同?
  • 它们各自的集群与集群应用服务器(如 JBoss 或 GlassFish 的内置集群功能)有何不同?
  • 这些框架解决的问题是否不同,足以保证它们在同一个项目中的使用?或者他们是彼此的竞争对手,因此对相同/相似的问题有不同的解决方案?

提前感谢您对这些奇怪但难以捉摸的框架的任何洞察!

4

2 回答 2

13

jgroups 更多的是关于任务分配和集群管理,而 hazelcast/terracotta 更多的是分布式缓存(数据网格)——当你比较所有功能时,它们之间肯定有重叠——你需要弄清楚哪些功能更重要,也许更容易实现.

hazelcast 允许通过基于 tcp 的寻址或多播进行集群。它支持地图、多地图、列表、队列、主题——对于基于磁盘的备份,您必须实现加载/存储接口。

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

简而言之,如果您正在寻找分布式数据缓存/网格,hazelcast 或 ehcache 将是查看的工具 - 如果您正在寻找使用库的任务分配而不关心现有的数据网格缓存,则 JGroups 可以工作为你。

于 2012-07-10T02:56:56.693 回答
3

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

JGroups 是一种使能技术,因为它的核心实现了可靠的单播、多播和广播等组通信原语,它们是更复杂的分布式协议(如原子广播)的构建块;它属于组通信工具包(GCTs)的类别。

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

在能力方面:

  • JGroups提供了一组原语来启用组成员身份,这是任何集群场景中的一个关键概念,其中必须根据生命周期和角色管理一组加入/离开参与者/节点;它允许基于协议内核设计创建一组丰富的协议,方法是在基础 API(如所说的组成员资格)上堆叠微协议,这些协议依赖于 TCP 和 UDP* 上的消息的可靠分发。开箱即用,JGroups 不提供任何复合服务:此类服务可以构建在提供的基本功能之上。*

  • Hazelcast提供了一组丰富的分布式数据结构,可以通过隐式复制因子进行完全复制或分片;分布式列表、映射、队列和锁是使用 Java 集合接口实现的基本数据结构的示例,显然分布和复制隐含需要由其引擎提供的组成员服务,特别是由具有 Cloud Discovery SPI模块的集群管理器提供. Hazelcast 可以通过IP Multicast、IP Multicast with TCP 和第3 方云服务(例如Zookeeper)实现Group Membership 管理。Hazelcast 可能会使用 JGroups 服务进行节点发现和集群管理(也称为组成员服务)。

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

考虑到这两种技术之间的关系,JGroups 实际上是复合服务(即语义丰富的 API)的支持服务(即构建块), 例如 Hazelcast 和 Terracotta,它们为 3rd 提供端到端或即用型服务派对应用程序,在幕后管理所有可靠的分发方面。当然,JGroups 是一个中间件,Hazelcast 和 Terracotta 是可以嵌入自己的集群服务中间件实现的应用程序。

于 2018-11-25T14:30:37.713 回答