JGroups, Terracotta & Hazelcast

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

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

提前感谢您对这些好奇但难以捉摸的框架的任何见解!


答案 1

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

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

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

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


答案 2

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

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

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

在功能方面:

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

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

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

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


推荐