什么是Java为网格/集群启用应用程序的最佳库?

时间:2008-12-21 00:10:20

标签: java grid load-balancing gridgain

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

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

了解其他人吗?

12 个答案:

答案 0 :(得分:32)

有几个:

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

GridGain和GigaSpaces比grid computing更集中于缓存和(imho)最适合计算网格而不是数据网格(参见this explanation of compute vs data grids)。我发现GigaSpaces是一个非常有趣的技术,它有几个许可选项,包括免费版和初创公司的免费完整版。

Coherence和Terracotta尝试将缓存视为Maps,这是一种相当自然的抽象。我已经使用了Coherence,它是一款出色的高性能产品,但并不便宜。兵马俑我不太熟悉。 Coherence的文档有时候有点缺乏,但它确实是一个强大的产品。

OSCache我主要用它来减少Java Web应用程序中的内存使用和碎片,因为它有一个相当简洁的JSP标记。如果你曾经看过编译过的JSP,你会看到他们做了很多String连接。此标记允许您有效地将一段JSP代码和HTML的结果缓存到单个字符串中,这在某些情况下可以极大地提高性能。

EHCache是​​一种简单的缓存解决方案,我也在Web应用程序中使用过。从来没有作为分布式缓存,但它可以做到这一点。我倾向于将其视为快速而肮脏的解决方案,但这可能是我的偏见。

memcached在PHP世界中特别有用(并被Facebook等网站使用)。它是一个非常简单易用的解决方案,其优势在于它不会在同一个流程中运行,如果这对您来说很重要,那么您可以与其他技术堆栈实现更好的互操作性选项。

答案 1 :(得分:21)

您也可以查看Hazelcast。 Hazelcast是队列,主题,映射,集合,列表,锁定和执行程序服务的开源事务,分布式/分区实现。它非常容易使用;只需将hazelcast.jar添加到您的类路径中并开始编码。几乎不需要配置。

如果您有兴趣以分布式方式执行Runnable,Callable任务,请查看http://code.google.com/docreader/#p=hazelcast

上的Distributed Executor Service文档。

Hazelcast在Apache许可下发布,也可以获得企业级支持。

答案 2 :(得分:6)

您考虑过Infinispan了吗?它是一个来自JBoss.org的开源数据网格平台。有关详细信息,我建议您阅读此(旧)blog post宣布该项目,以及更多有趣的博客文章,包括using Infinispan with Hibernatestandalone cache。最近,在Red Hat's Enterprise Data Grid。还有a quick "getting started" guideDZone RefCard,甚至a YouTube video:)

答案 3 :(得分:5)

我认为@ cletus的总结非常好。我确实想提一下,Terracotta提供的不仅仅是地图形式的分布式缓存。它集群Java堆和同步原语,将并发Java程序转变为分布式Java程序。您可以使用它进行缓存(包括使用分布式版本的开源缓存库)或其他一些东西。

对于工作分配,在Terracotta上面有一些额外的lib,特别是tim-pipes(用于消息)和tim-masterworker(用于Master-Worker样式分配)是Terracotta之上的很好的抽象。这个图书馆在Terracotta Forge:

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

答案 4 :(得分:4)

JPPF也很好。

答案 5 :(得分:2)

如果你想要更低一级,有JGroups,它为你提供了集群化java进程的基础知识。

答案 6 :(得分:2)

您可以添加到列表中的另一个是Appistry CloudIQ。它是一个分布式计算环境。它最多可作为free download台机器使用。它包括负载分配以及硬件故障时的工作自动故障转移等功能。

答案 7 :(得分:2)

并检查ProActive

答案 8 :(得分:1)

对于网格计算,您还可以考虑Ice GridDataSynapse GridServer。这些都为分配任务提供了非常有效的机制,并提供故障转移和冗余。

答案 9 :(得分:1)

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

虽然上面提到的一些lib可以帮助提供特定的集群功能,例如分布式缓存,但是更常规的启用工作负载管理的方法是使用J2EE容器。

通过设置群集容器实例,您可以使用HA功能和工作负载管理,群集在应用程序级别几乎是透明的。我说几乎是因为在编写要集群的应用程序时,你必须要小心如何管理状态,例如,如果你实现某种缓存,你需要在每台机器上复制缓存的状态。

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

希望有所帮助。

卡尔

答案 10 :(得分:1)

同时检查Fura

答案 11 :(得分:1)

答案非常晚 - 但部分取决于您的应用程序的配置方式。您可能希望远程运行可执行文件,而不是使用上述方法之一。

为缺乏链接道歉 - 但在我的回复之前,我不能发布多个链接。斜体产品应该很容易谷歌。

如果你想在参数化搜索中运行一个可执行文件 - 比如说你想为每个实例添加一系列选项的同一个可执行文件 - 那么传统的批处理方法效果很好。这是一种非常传统的高性能计算方法,仍然广泛使用 - 适用于企业级处理的基础设施是 Platform LSF DataSynapse GridServer PBS < / em>或成熟 Windows HPC Server 。您可能还想查看 Globus Condor 等开源产品。根据您的应用程序的大小,您还可以查看 gLite ,它用于大型科学项目,如LHC。

传统的HPC方法得益于将您的应用程序代码与构成计算基础架构的流程隔离,但可能会受到性能损失,而其他人可能会显示更快的吞吐量但容易出现内存泄漏和长时间系统的其他问题。