28

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

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

知道其他人吗?

4

12 回答 12

33

有几种:

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

GridGain 和 GigaSpaces 更侧重于网格计算而不是缓存,并且(恕我直言)最适合计算网格而不是数据网格(请参阅计算与数据网格的解释)。我发现 GigaSpaces 是一项非常有趣的技术,它有多种许可选项,包括免费版和面向初创公司的免费完整版。

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

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

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

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

于 2008-12-21T00:22:42.380 回答
20

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

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

Hazelcast是在 Apache 许可下发布的,并且还提供企业级支持。

于 2008-12-21T22:06:28.100 回答
6

你考虑过Infinispan吗?它是一个开源数据网格平台,来自 JBoss.org。有关更多详细信息,我建议您阅读宣布该项目的这篇(旧)博客文章,以及更多有趣的博客文章,包括一篇关于将 Infinispan 与 Hibernate 结合使用和作为独立缓存的文章。甚至最近,在Red Hat 的 Enterprise Data Grid上。有一个快速的“入门”指南,还有一个DZone RefCard,甚至还有一个 YouTube 视频:)

于 2011-06-06T13:43:28.200 回答
5

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

对于工作分发,在 Terracotta 之上编写了一些额外的库,特别是 tim-pipes(用于消息)和 tim-masterworker(用于 Master-Worker 风格的分发)是 Terracotta 之上的伟大抽象。这个图书馆位于兵马俑锻造厂:

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

于 2008-12-21T02:08:58.470 回答
4

JPPF也不错。

于 2008-12-25T22:48:16.140 回答
2

如果你想稍微低一点,可以使用JGroups,它为你提供了集群 Java 进程的基础知识。

于 2008-12-21T13:50:51.877 回答
2

您可以添加到列表中的另一个是Appistry CloudIQ。它是一个分布式计算环境。最多可免费下载5 台机器。它包括负载分配以及在硬件故障的情况下自动故障转移,以及其他功能。

于 2009-01-05T13:47:57.883 回答
2

并检查ProActive

于 2009-09-14T12:35:06.153 回答
1

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

于 2009-01-07T13:53:25.373 回答
1

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

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

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

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

希望有帮助。

卡尔

于 2009-02-23T19:14:31.660 回答
1

还要检查Fura

于 2009-09-14T12:25:39.870 回答
1

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

对缺少链接表示歉意——但在我的代表起来之前,我不能发布多个链接。斜体的产品应该很容易被谷歌搜索。

如果你想在参数搜索中运行一个可执行文件——比如你想为每个实例使用一系列选项来启动同一个可执行文件——那么传统的批处理方法效果很好。这是一种非常传统的高性能计算方法,仍在广泛使用——适合在企业规模处理此问题的基础架构是Platform LSFDataSynapse GridServerPBS或随着它的成熟Windows HPC Server。您可能还想看看GlobusCondor等开源产品。根据您的应用程序有多大,您可能还会查看gLite,它用于大型科学项目,如 LHC。

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

于 2010-11-18T11:23:29.577 回答