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

27

集群技术是一种能够将应用程序分布在多台服务器上,实现负载均衡和提供冗余的能力。

我曾经看过GridGain的演示,对它印象深刻。

您知道其他的类似技术吗?

12个回答

33

有几个:

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

GridGain和GigaSpaces更加关注网格计算而不是缓存,(依我之见)最适合于计算网格而不是数据网格(请参见此处对计算网格与数据网格的解释)。我发现GigaSpaces是一项非常有趣的技术,它有几种许可选项,包括免费版本和面向初创企业的免费完整版本。

Coherence和Terracotta试图将缓存视为映射,这是一个相当自然的抽象。我经常使用Coherence,它是一个出色的高性能产品,但价格不菲。我对Terracotta不太熟悉。我有时会觉得Coherence的文档有点不足,但它确实是一个强大的产品。

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

EHCache是一个简单的缓存解决方案,我也在Web应用程序中使用过它。虽然它可以作为分布式缓存,但我从未这样使用过。我倾向于将其视为一个快速而粗略的解决方案,但这可能是我的偏见。

memcached在PHP世界中特别流行(并被Facebook等网站使用)。这是一个非常轻便和简单的解决方案,它的优点是它不在同一进程中运行,并且如果对你很重要,你将拥有与其他技术堆栈更好的互操作性选项。


抱歉使用降低分数的方式,但是您的回答更像是分布式缓存框架的综合概述,而不是有关如何启用/设置Java应用程序集群的信息 :-) - Karl
你能否对这些进行查询(而不使用完整的ORM框架)? - mainstringargs
我不确定我理解这个问题。ORM和缓存有一些共同点,但主要是不同的目标。 - cletus
你在列表中漏掉了Infinispan。 :-) 我会在另一个答案中详细评论Infinispan。 - Manik Surtani
GridGain现在采用双重许可模式 - 商业许可证或GPLv3。未经付费,您不能在商业上使用它。请参见此处 - Chris

20

您可能也想要查看Hazelcast。Hazelcast是一个开源的事务性、分布式/分区队列、主题、映射、集合、列表、锁和执行器服务实现。它非常易于使用;只需将hazelcast.jar添加到您的类路径中并开始编码即可。几乎不需要任何配置。

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

Hazelcast是根据Apache许可证发布的,同时提供企业级支持。


6

5
我认为@cletus的总结相当不错。我想提一下,Terracotta提供的不仅仅是一个分布式缓存映射表,它还可以将Java堆和同步原语集群化,将并发的Java程序转换为分布式Java程序。您可以使用它进行缓存(包括使用开源缓存库的分布式版本)或其他一些操作。
对于工作分配,有一些额外的库建立在Terracotta之上,特别是tim-pipes(用于消息)和tim-masterworker(用于Master-Worker风格的分发),它们是Terracotta的很好的抽象。该库位于Terracotta Forge上。 这个最近添加的页面可能会提供比其他一些潜在的数据技术更多的附加信息:

4

JPPF也很不错。


2
如果你想更深入了解,可以使用JGroups,它为你提供了Java进程集群的基础。

2

您可以将Appistry CloudIQ添加到列表中。它是一个分布式计算环境,可作为免费下载提供给不超过5台机器使用。除其他功能外,它还包括负载分配和在硬件故障的情况下自动故障转移。


2

1

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


1
一个非常晚的答案——但这部分取决于你的应用程序配置方式。你可能想远程运行可执行文件,而不是使用上述方法之一。
抱歉没有提供链接——但在我的声望提升之前,我不能发布多个链接。斜体字中的产品应该很容易通过 Google 搜索到。
如果你想在参数搜索中运行可执行文件——比如说你想为每个实例使用一系列选项启动相同的可执行文件——那么传统的批处理方法效果很好。这是一种非常传统的高性能计算方法,仍然被广泛使用——适合处理此类企业级规模的基础架构有平台LSF、DataSynapse GridServer、PBS或随着Windows HPC服务器成熟。你还可以看看像Globus和Condor这样的开源产品。根据你的应用规模,你还可以考虑像gLite这样的产品,它被用于像LHC这样的大型科学项目。

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


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