分布式缓存

我正在寻找一个Java分布式缓存解决方案。 我们希望function如下:

  • 分散式
  • 自动发现
  • 冗余
  • 非集中

我们已经分析了像TerraCotta这样的框架,它似乎是我们从缓存框架中想要的一切……然而,似乎需要一个中心缓存节点,它们成为我们的单点故障。

除推出我们自己的解决方案以外的任何想法?

我建议使用JBossCache或EhCache (带分布式缓存监听器 )。 我使用过两者,我喜欢两者,它们都符合你的要求。

尝试Hazelcast 。 它是一个开源的集群和高度可扩展的Java数据分发平台。 它满足您的所有要求。 此外,它非常易于使用。

Terracotta最近收购了Ehcache,并在一个简单的软件包中发布了Ehcache API与Terracotta集群商店的紧密集成,只需要额外的几行Ehcache配置即可从单个节点转移到集群,尽管您还必须运行Terracotta服务器处理。

带有Terracotta ES版本的Ehcache是​​开源的,可免费使用。 如果您需要支持,更多扩展,补偿,补丁支持等,则可以使用商业许可证。

Terracotta确实使用中央服务器arrays ,而不是单个中央服务器,因此没有单点故障! 您可以根据需要设置任意数量的热备份服务器,并且可以将这些备份服务器配置为在活动服务器关闭时接管。 使用Terracotta FX(商业产品),您还可以使用多个活动服务器。

试试Infinispan。 Infinispan缓存可用作分布式缓存,也可用作复制缓存。 单点故障不可能发生。 在分布式缓存模式下,它可以提供比堆大小更多的空间。 考虑群集中有4个节点,每个节点具有1GB堆大小,Infinispan用作复制缓存,则总大小群集具有1 Gb,但如果Infinispan用作分布式缓存并且每个数据项设置2个副本,则总大小将为2Gb。 http://www.jboss.org/infinispan

你看过Coherence了吗?

我们发现它非常有用。 它不是开源或便宜的。

http://www.oracle.com/technology/products/coherence/index.html

通常,当在单个节点上完成所有操作时会发生单点故障,并且如果该节点发生故障,则整个操作可能会中断。 此问题的解决方案是使用副本或分区副本等拓扑。 如果一旦节点发生故障,整个操作将转移到另一个节点,而不会丢失任何数据。

至于您正在寻找的function可以在单个产品中找到, NCache ,正如Umer所提到的那样。

我迟到了,但你试过TayzGrid,一个开源的java分布式缓存 。 也称为内存数据网格或键值存储。

它可以满足您的所有基本需求

- Distributed - Auto-Discovery - Redundancy - Non-Centralized 

它还管理高级故障转移方案,如裂脑和突然重启。 所有节点都是智能的,因此完全分布

您还可以选择要使用的拓扑(分区或复制)。 如果您想使用更高级的拓扑(副本分区),那么您可以购买许可证 。

Terracotta还提供分布式缓存。