服务器集群的缓存方法

时间:2012-05-18 22:21:19

标签: java caching jboss memcached distributed-caching

我在JBoss AS 5.1集群上部署了一个Java应用程序,需要缓存很多(> 3 GB)数据。 现在服务器集群只有2个节点(单独的机器)。 以下是具体要求:

  • 两个节点都不应该要求将数据加载到缓存中(即复制或缓存应该驻留在单独的服务器上)
  • 数据永远不会过期。

    上述两个要求对于应用程序来说都非常重要。如果能够记住这两点,我会感激不尽。 我还应该添加第三个要求:

  • 易用性

    该应用程序最初使用的是Hashmap。我尝试用JBoss Cache 3.2.1替换hashmap以获得其复制和线程安全功能。但我对JBoss Cache的性能并不满意。此外,当我在缓存中加载数据时,几乎完全使用了8千兆字节的RAM(其大部分由缓存条目使用)。

    我想听听那些自己处理过这种缓存场景的人的经历。感谢您提前的时间。

  • 3 个答案:

    答案 0 :(得分:2)

    您可以尝试使用GigaSpaces XAP datagrid是一个复制缓存。它的性能非常高。

    http://www.gigaspaces.com/datagrid

    答案 1 :(得分:0)

    如果您想要一个提供Java HashMap接口的缓存,并且可以轻松支持千兆字节的缓存数据,并且没有过期,那么请查看Oracle Coherence。这将使用Coherence“分布式缓存”选项(这是默认配置)。有关详细信息,请参阅:http://coherence.oracle.com/

    • 弹性。只需添加节点。自动发现。自动负载平衡。没有数据丢失。没有中断。每次添加节点时,您都​​可以获得更多的数据容量和更高的吞吐量。
    • 同时使用RAM和闪存。透明。每个Coherence节点轻松处理10s甚至100s千兆字节(例如每个物理服务器最多TB或更多)。
    • 自动高可用性(HA)。杀死一个进程,没有数据丢失。杀死服务器,没有数据丢失。
    • 数据中心连续可用性(CA)。杀死数据中心,不会丢失任何数据。

    为了充分披露,我在Oracle工作。本文中表达的观点和观点是我自己的,不一定反映我的雇主的意见或观点。

    答案 2 :(得分:-2)

    我已经解决了'之前的这个问题(工作代码,不能告诉你)......但是,我可以告诉你这个:

    • 大容量,HashMaps中的开销中使用了大量内存。
    • 您可以通过智能使用数组替换java.util。*类来节省大量内存。
    • 每次进行内存分配时,您还必须在GC中扫描/收集内存,因此节省内存也可以提高性能。

    尽可能使用数组......

    编辑:显然哈希地图的概念已经被遗忘了......哈希地图的Java实现是否让人们相信这是唯一的方法?一组结构化数组,带有散列函数和二进制排序....所有基本结构...... http://en.wikipedia.org/wiki/Hash_table

    要添加密钥的一个数组。用于存储值的并行数组,以及用于快速查找键数组的基于int的哈希表...

    计算机科学 - 可能是第二年; - )

    再次编辑:我曾经在这里核心我在JDOM项目中描述的概念:https://github.com/hunterhacker/jdom/blob/master/core/src/java/org/jdom2/StringBin.java