什么是最好的Java库来网格/集群启用你的应用程序?

这是在一个服务器集群上运行你的应用程序的能力,意图分配负载,并提供额外的冗余。

我曾经看过一个GridGain的演示文稿,我对它印象非常深刻。

知道其他人吗?

有几个:

  • 兵马俑 ( 开源,基于Mozilla公共许可证 );
  • Oracle Coherence (以前称为Tangosol Coherence;商业版;基于JSR 107 ,从未正式通过);
  • GigaSpaces (商业;基于JavaSpaces API , Jini的一部分);
  • GridGain ,你提到的(开源: LGPL );
  • memcached与Java客户端库 (开源: BSD许可 ;
  • EHCache (开源: Apache软件许可 ;
  • OSCache (开源: 修改的Apache许可证 ;和
  • 毫无疑问,其他几个。

现在我还没有使用所有这些,但我已经使用或调查了大多数。

GridGain和GigaSpaces比caching更适合网格计算 ,而(imho)最适合计算网格而不是数据网格(请参阅计算与数据网格的解释 )。 我发现GigaSpaces是一个非常有趣的技术,它有几个许可选项,包括免费版和免费的初创公司完整版。

连贯性和兵马俑尝试将caching视为地图 ,这是一个相当自然的抽象。 我已经使用了很多Coherence,这是一个优秀的高性能产品,但并不便宜。 兵马俑我不太熟悉。 Coherence的文档有时候有点缺乏,但它确实是一个强大的产品。

OSCache我主要用于减lessJava Web应用程序中的内存使用和碎片,因为它具有相当整洁的JSP标记。 如果你看过编译过的JSP,你会看到他们做了很多的string连接。 这个标签允许你有效地将一段JSP代码和HTML的结果caching到一个string中,这在某些情况下可以极大地提高性能。

EHCache是​​一个简单的caching解决scheme,我也用在Web应用程序中。 虽然不是分布式caching,但它可以做到这一点。 我倾向于认为这是一个快速和肮脏的解决scheme,但这也许是我的偏见。

memcached在PHP世界是特别高级的(并被诸如Facebook之类的网站所使用)。 这是一个非常简单和轻松的解决scheme,它的优点是不会在同一个进程中运行,如果这对您很重要,那么您将拥有更好的与其他技术堆栈的互操作性选项。

你可能也想看看Hazelcast。 Hazelcast是一个开源的交易,分布式/分区的队列,主题,地图,集,列表,锁和执行器服务的实现。 这是非常容易的工作; 只需将hazelcast.jar添加到您的类path中并开始编码即可。 几乎不需要configuration。

如果您有兴趣以分布式方式执行Runnable,Callable任务,请参阅http://code.google.com/docreader/#p=hazelcast上的“分布式执行程序服务”文档;

Hazelcast是在Apache许可证下发布的,也可以提供企业级的支持。

你有没有考虑过Infinispan ? 它是一个来自JBoss.org的开源数据网格平台。 有关更多详细信息,我build议您阅读此(旧) 博客文章宣布该项目,以及更多有趣的博客文章,其中包括使用Infinispan与Hibernate和作为独立的caching 。 最近,在红帽企业数据网格上 。 有一个快速的“入门”指南 ,还有一个DZone RefCard ,甚至是一个YouTubevideo 🙂

我认为@ cletus的总结是相当不错的。 我确实想提一下,Terracotta提供的不仅仅是地graphics式的分布式caching。 它聚集Java堆和同步原语,将并发Java程序变成分布式Java程序。 你可以使用caching(包括使用分布式版本的开源caching库)或其他一些东西。

对于工作分配来说,在兵马俑顶部还有一些额外的库,尤其是Tim-pipe(用于消息)和Tim-masterworker(用于主人风格的分布)在Terracotta上是很好的抽象。 这个图书馆是在兵马俑:

与其他一些潜在的数据技术相比,这个最近添加的页面可能会添加一些附加信息:

JPPF也不错。

如果你想进一步降低级别,那就是JGroups ,它为你提供了Java进程集群的基础知识。

并检查ProActive

另一个可以添加到列表中的是Appistry CloudIQ 。 这是一个分布式计算环境。 它可以免费下载多达5台机器。 它包括负载分配以及硬件故障情况下的自动故障切换等function。

对于网格计算,您也可以考虑Ice Grid或DataSynapse GridServer 。 这些都提供了非常有效的分配任务的机制,并提供故障切换和冗余。

我想你的问题已经以不同的方式被解释了,你问一个你可以用来“集群启用”你的应用程序的库。

虽然上面提到的一些库可以帮助提供特定的集群function,例如分布式caching,但更常规的工作负载pipe理方式是通过使用J2EE容器。

通过设置群集容器实例,可以使用HAfunction和工作负载pipe理,群集在应用程序级别几乎是透明的。 我之所以这样说,几乎是因为在编写将要进行群集的应用程序时,必须小心如何pipe理状态,例如,如果您实现了某种caching,则需要在每台计算机上复制caching的状态。

一个好的起点是下载glassfish并尝试设置一个聚集的glassfish实例。

希望有所帮助。

卡尔

另外检查Fura

一个非常晚的答案 – 但它部分取决于你的应用程序的configuration方式。 您可能想要远程运行可执行文件,而不是使用上述方法之一。

道歉缺乏链接 – 但直到我的代表,我不能超过一个。 斜体的产品应该很容易Google。

如果你想在参数search中运行一个可执行文件 – 比方说你想用每个实例的选项范围来启动相同的可执行文件,那么传统的批处理方式就能很好地工作。 这是一个非常传统的高性能计算方法,仍然被广泛使用 – 在企业范围内处理这个问题的合适基础架构是Platform LSFDataSynapse GridServerPBS或随着Windows HPC Server的成熟。 您可能也想看看像GlobusCondor这样的开源产品。 根据你的应用程序的大小,你也可以看看gLite ,这是用于像LHC这样的大型科学项目。

传统HPC方法受益于将应用程序代码与构成计算基础架构的进程隔离开来,但性能可能会受到影响,而其他应用程序可能会显示更快的吞吐量,但对于长时间正常运行的系统容易出现内存泄漏和其他问题。