这是在服务器集群上运行应用程序的能力,目的是分配负载并提供额外的冗余。对于使用网格/集群启用应用程序的Java,最佳的Java库是什么?
我见过GridGain的演示文稿,我对它印象非常深刻。
知道其他人吗?
这是在服务器集群上运行应用程序的能力,目的是分配负载并提供额外的冗余。对于使用网格/集群启用应用程序的Java,最佳的Java库是什么?
我见过GridGain的演示文稿,我对它印象非常深刻。
知道其他人吗?
有几种:
现在我没有使用所有这些,但我已经使用或调查了大部分。
GridGai n和GigaSpaces比缓存更集中于grid computing,而(imho)最适合计算网格而不是数据网格(请参阅this explanation of compute vs data grids)。我发现GigaSpaces是一个非常有趣的技术,它有几个许可选项,包括免费版和免费的初创公司完整版。
连贯性和兵马俑尝试将缓存视为Maps,这是一个相当自然的抽象。我已经使用了很多Coherence,这是一款优秀的高性能产品,但并不便宜。兵马俑我不太熟悉。 Coherence的文档有时候有点缺乏,但它确实是一个强大的产品。
OSCache我主要用于减少Java Web应用程序中的内存使用和碎片,因为它具有相当整洁的JSP标记。如果你看过编译过的JSP,你会看到他们做了很多字符串连接。此标记可让您有效地将一段JSP代码和HTML的结果缓存到单个字符串中,这在某些情况下可极大地提高性能。
EHCache是一个简单的缓存解决方案,我也用在Web应用程序中。尽管不是分布式缓存,但它可以做到这一点。我倾向于将其视为一种快速而肮脏的解决方案,但这也许是我的偏见。
memcached在PHP世界中尤为普遍(并被Facebook等网站所使用)。这是一个非常简单和轻松的解决方案,它的优点是它不会在同一个进程中运行,如果这对您很重要,那么您将拥有更好的与其他技术堆栈的互操作性选项。
我觉得@ cletus的总结很不错。我确实想提到Terracotta提供的不仅仅是地图形式的分布式缓存。它将Java堆和同步原语集中在一起,将并发Java程序变成分布式Java程序。你可以使用缓存(包括使用分布式版本的开源缓存库)或其他一些东西。
对于工作分配,在Terracotta上面还有一些额外的库,特别是tim-pipes(用于消息)和tim-masterworker(用于大师工作者风格分布)在Terracotta上是很好的抽象。这个库是在秦始皇锻造:
这家新近添加的页面相比可以增加一点额外的信息,以其他一些潜在的数据技术:
如果你想走低一点,有JGroups,它为您提供了群集java进程的基础知识。
您可能还想查看Hazelcast。 Hazelcast是队列,主题,地图,集合,列表,锁定和执行器服务的开源事务,分布式/分区实现。与之合作非常容易;只需将hazelcast.jar添加到您的类路径中并开始编码即可。几乎不需要配置。
如果您有兴趣以分布式的方式执行你的Runnable,可调用任务,那么请在http://code.google.com/docreader/#p=hazelcast
Hazelcast退房分布式执行人服务文档在Apache许可和企业级支持发布也可用。
JPPF也不错。
另一个你可以添加到列表中的是Appistry CloudIQ。它是一个分布式计算环境。它可以作为free download多达5台机器使用。它包括负载分配以及在硬件故障情况下自动故障切换等功能。
对于网格计算,您也可以考虑Ice Grid或DataSynapse GridServer。这些都为分配任务提供了非常有效的机制,并提供故障转移和冗余。
我认为你的问题已被解释为不同的方式,你问一个库,你可以用它来“集群启用”你的应用程序。
虽然上面提到的一些库可以帮助提供特定的集群功能,例如分布式缓存,但更常规的工作负载管理方式是通过使用J2EE容器。
通过设置群集容器实例,可以使用HA功能和工作负载管理,群集在应用程序级别几乎是透明的。我之所以说,几乎是因为编写将要进行群集的应用程序时,必须小心如何管理状态,例如,如果您实施某种缓存,则需要在每台计算机上复制缓存的状态。
一个好的开始地点是下载glassfish并尝试设置一个聚集的glassfish实例。
希望有所帮助。
卡尔
还要检查Fura
而且还要检查ProActive
一个很晚的答案 - 但它一定程度上取决于你的应用程序的配置方式。您可能想要远程运行可执行文件,而不是使用上述方法之一。
道歉缺乏链接 - 但直到我的代表我不能超过一个。以斜体表示的产品应该易于Google使用。
如果你想在参数搜索中运行一个可执行文件 - 比如说你想用每个实例的选项范围来启动相同的可执行文件,那么传统的批处理方式很好。这是一个非常传统的高性能计算的办法,仍然是广泛使用 - 在企业规模处理这个合适的基础设施是平台LSF,DataSynapse公司GridServer,PBS或它的成熟的Windows HPC服务器。您可能还想看看开源产品,如Globus和Condor。根据您的应用程序的规模有多大,您也可以查看gLite,它用于LHC等大型科学项目。
传统的HPC方法受益于让您的应用程序代码与包含计算基础架构的进程相隔离,但性能可能会受到影响,而其他应用程序可能会显示更快的吞吐量,但对于长时间正常运行的系统容易出现内存泄漏和其他问题。
你考虑过Infinispan吗?它是一个来自JBoss.org的开源数据网格平台。欲了解更多详情,我建议你阅读这个(旧)blog post宣布该项目,以及更多有趣的博客文章,包括using Infinispan with Hibernate和standalone cache。最近,在Red Hat's Enterprise Data Grid。还有a quick "getting started" guide和DZone RefCard,即使是a YouTube video :)
对不起,我的答案是分布式缓存框架的全面概述,而不是关于如何为Java应用程序启用/设置集群的信息:-) – Karl 2009-02-23 19:09:40