2012-09-21 112 views
2

在我们的项目中,我们决定在我们的应用程序中使用Ehcache作为Hibernate和查询缓存的二级缓存。它似乎运作良好。群集的独立/复制Ehcache

然后突然我们意识到我们的生产环境是聚集在一起的。看看ehcache文档,我发现最好的办法是进行分布式缓存,但之后需要使用Terracotta服务器,客户在此阶段不会为此付费。

根据文档,对于独立拓扑:

如果独立缓存正在使用其中存在运行相同应用程序的多个应用程序 节点,那么在它们之间存在弱 一致性。

我的两个问题是:

  1. 在“只读”模式下使用的Ehcache和继续使用它独立在集群环境中,什么是我们将采取的打击?因为如果只是说,对于这种情况,它会触及其他节点,它会从数据库中提取数据,因为缓存不会在那里被复制/配置,我想我们会拿它。唯一的事情是,它不应该导致异常。我想知道为我的场景使用独立拓扑的后果。

  2. 我们可以看看第三种拓扑复制缓存作为解决方案吗?

我是新来ehcache,因此这些基本问题。回覆非常感谢!

谢谢!

+0

这里同样存在问题,我也在调查Infinispan;请参阅https://labs.consol.de/java-caches/了解冰块比较和使用场景。 – lrkwz

回答

-2

听起来好像你并没有真正考虑过你在这方面的要求。

在我们的项目,我们决定使用的Ehcache在我们的应用程序设置为休眠和查询高速缓存的 二级缓存。这似乎是 运作良好。

然后突然我们意识到我们的生产环境是 聚集。

你怎么突然意识到你的应用程序需要在群集中运行?

我看到的最好的事情是去为分布式缓存,但 则涉及兵马俑服务器

如果您的应用程序集群,你需要缓存可能更改数据,您需要使用支持这个的缓存解决方案。正如你所说,如果你想在集群中使用EhCache,你需要使用Terracotta。

Hibernate文档列出了支持的缓存提供程序here

我已经使用Infinispan(分布式缓存的开源JBoss解决方案)成功实现了这个功能。有一个全面的指导here这将给你一切你需要启动和运行。

Infinispan支持多种操作模式,包括失效,复制和分布式。 2LC的默认值是同步失效。在这种模式下,当一个实体在集群中的某个节点上更新时,它将使缓存区域无效,并且所有其他节点都将被通知并执行相同的操作。

+0

我没有说我们突然意识到应用程序需要在群集中运行。我说,“我们意识到我们的生产环境是聚集在一起的”。这意味着,这是一个启示,因为这个应用程序对于团队来说是新的。现在,我们没有选择。我们要么单独使用ehcache,要么完全放弃。因此,我的问题围绕着这个问题展开 - 在具有两个带有“只读”Hibernate缓存策略的托管服务器的集群中使用独立拓扑。 –

+2

向下投票,因为没有附加价值,例如“这听起来像你没有真正考虑过你在这方面的要求。”和“你怎么突然意识到你的应用程序需要在群集中运行?” – Tinman

+0

Downvote,我同意@Tinman – Sohan