缓存实现

时间:2012-04-27 18:11:27

标签: java caching ehcache distributed-caching

我现在已经研究了一个星期,但我想对我的特殊情况有所了解......

2台物理服务器:

  • 服务器A - 公共WAR,admin WAR

  • 服务器B - 公共战争

要求:

  • 两个WAR都需要查看相同的数据。

  • admin WAR修改/添加数据到缓存。

  • public WARs修改缓存的其他部分/向其添加数据。

  • 整个缓存需要驻留在每个物理服务器的内存中(如果我在服务器A上添加一些管理员WAR或公共WAR,它需要显示在服务器B的公共WAR上),以便在发生故障时,我们不是在等待填充的一半缓存

  • 1,500个活跃用户/服务器,绝大多数流量被读取,写得很少

其他硬件是不可能的。

这种情况是否有良好的第三方缓存解决方案?似乎大多数分布式缓存系统希望将一半的数据留在服务器A上,一半留在服务器B上,这不符合我们的故障转移性能需求。

感谢您的任何想法!

6 个答案:

答案 0 :(得分:1)

http://www.gigaspaces.com/有一个解决方案,它允许您创建在复制模式下充当缓存的“空间”,因此每个节点都将具有精确的数据副本。

他们也有故障转移或热备的解决方案。

编辑: Gigaspace不仅仅是一个共享缓存,但您可以只使用缓存解决方案。它被称为内存数据网格。他们戏剧性地改变了他们的网页,所以我找不到确切的页面。但如果你搜索文档,你会发现它。

你可以从这里开始 http://www.gigaspaces.com/datagrid

但技术不是免费的。

答案 1 :(得分:1)

您应该查看Redis

答案 2 :(得分:0)

看看the replicated options for EhCache

听起来你一直在搜索“分布式缓存”的信息,这些信息与“复制缓存”有着不同的定义。分布式缓存是在许多机器中分布的更大的缓存系统,因此群集中任何一台机器的丢失不会导致整个缓存,而只是一部分。在这种情况下,缓存的总大小可以达到(计算机的数量乘以每台计算机的内存)。

在复制的缓存中,缓存的数据会在每台计算机上进行复制,从而限制总缓存大小为max(任何一台计算机的内存)。

答案 3 :(得分:0)

  

似乎大多数分布式缓存系统都希望留下一半的数据   在服务器A上,一半在服务器B上,这不符合我们的故障转移   表现需求。

不,你可以轻松调整它。否则,您需要粘性视图(您必须确切地知道,哪个缓存存储您的数据)。您可以选择市场上的任何解决方案EhCache,GigaSpace,GridGain等。我建议使用JBoss Cache,imho最简单,最完全是您需要的

答案 4 :(得分:0)

这个领域有很多解决方案。

所有这些都可以配置为分布式缓存。当在JBoss AS中留下嵌入式缓存时,AFAIK Infinispan运行得最好,最后我检查它很难集成到其他应用服务器中。如果你有钱我会推荐来自Terracotta的BigMemory。它是EhCache的商业衍生产品,并提供了许多其他令人难以置信的功能。

答案 5 :(得分:0)

我们使用Apache Commons JCS并对此非常满意。它声称是almost twice as fast as EHCache。对于您所描述的情况,您可能会配置Lateral TCP Cache