分布式缓存

14

我正在寻找一种Java分布式缓存解决方案。我们希望拥有以下功能:

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

我们已经分析了像TerraCotta这样的框架,它似乎是我们从缓存框架中想要的所有东西... 但是,似乎需要一个中央缓存节点来成为我们的单点故障。

除了推出我们自己的解决方案之外,还有什么想法吗?


Terracotta没有单点故障 - 您可以使用尽可能多的热备份,以在活动服务器死机时接管。使用Terracotta FX,您甚至可以拥有多个活动实例以实现更大规模。 - Alex Miller
8个回答

16

试试Hazelcast。它是一个针对Java的开源集群和高度可伸缩的数据分发平台,可以满足您所有需求。此外,它非常易于使用。


在网络分区的情况下,Hazelcast是否更偏向于CAP理论(https://en.wikipedia.org/wiki/CAP_theorem)中的一致性而不是可用性? - Derek Mahar
@DerekMahar Hazelcast 3.12+ 可以根据您的需求配置为 AP 或 CP。https://hazelcast.com/blog/hazelcast-imdg-3-12-introduces-cp-subsystem/ - Abhijit Sarkar

8

4

Terracotta最近收购了Ehcache,并在一个简单的包中提供了Ehcache API与Terracotta集群存储的紧密集成,只需要少数额外的Ehcache配置即可从单个节点转换为集群,但您还必须运行Terracotta服务器进程。

使用Terracotta ES版的Ehcache是开源且免费的。如果您需要支持、更多扩展、赔偿、补丁支持等,则可获得商业许可证。

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


1
TerraCotta的问题在于,为了没有单点故障,你至少需要4台机器(或JVM):
  • 2台用于您的应用程序
  • 2台用于TerraCotta
我宁愿为我的应用程序使用4个JVM,但采用内部JVM缓存集群。
- Claude Houle

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

嗯...了解到这个很好。 - Asha Koshti

2

1
我来晚了,但是你尝试过 TayzGrid 吗?它是一个开源的 Java 分布式缓存,也被称为内存数据网格或键值存储。它可以满足你的基本需求。
- Distributed
- Auto-Discovery
- Redundancy
- Non-Centralized

它还管理高级故障转移场景,如脑裂和突然重启。所有节点均智能化,因此完全分布式。
您还可以选择要使用的拓扑结构(分区或复制)。如果您想使用更高级的拓扑结构(分区或副本),则可以购买许可证

1

通常单点故障会在所有操作都在一个节点上进行时发生,如果该节点崩溃,则整个操作可能会崩溃。解决此问题的方法是使用拓扑结构,如副本或分区副本。如果一个节点崩溃,整个操作将转移到另一个节点,而不会丢失任何数据。

就您正在寻找的功能而言,可以在单个产品NCache中找到,正如Umer所提到的那样。


0

商业版才是吧? - cletus
我认为如果你使用Terracotta ES版(参见http://www.terracotta.org/web/display/enterprise/Products),情况可能不会如此。 - Aaron Digulla

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