Java 满足所有这些标准的分布式数据层缓存系统?

Java 满足所有这些标准的分布式数据层缓存系统?,java,caching,nosql,distributed,distributed-computing,Java,Caching,Nosql,Distributed,Distributed Computing,我需要选择一个分布式数据层缓存系统来满足这些条件 必须有 缓存应该在单独的进程中运行,并且可以通过TCP/UDP调用。我们不愿意在web应用程序当前运行的同一JVM内存空间中运行缓存 缓存应该分布在多个缓存服务器上,以消除任何单点故障 序列化在大多数情况下应该是透明的,不应该要求开发人员为要缓存的每个类实现方法或接口 适用于所有类型缓存的单一API。开发人员不需要学习多个API来读/写不同的对象树 最终是一致的。始终保持一致性是一个代价高昂的建议,需要n阶段提交到集群中的所有节点。我们不想要这么

我需要选择一个分布式数据层缓存系统来满足这些条件

必须有

  • 缓存应该在单独的进程中运行,并且可以通过TCP/UDP调用。我们不愿意在web应用程序当前运行的同一JVM内存空间中运行缓存
  • 缓存应该分布在多个缓存服务器上,以消除任何单点故障
  • 序列化在大多数情况下应该是透明的,不应该要求开发人员为要缓存的每个类实现方法或接口
  • 适用于所有类型缓存的单一API。开发人员不需要学习多个API来读/写不同的对象树
  • 最终是一致的。始终保持一致性是一个代价高昂的建议,需要n阶段提交到集群中的所有节点。我们不想要这么复杂的系统
  • 容错性能下降。如果整个缓存系统崩溃,应用程序仍然可以运行,尽管在这些情况下性能会受到影响,这是可以理解的
  • 基于LRU和FIFO等配置的自动缓存逐出
  • 开源和免费。拥有源代码肯定会有所帮助,因为我们使用Solr和Active MQ的经验已经证明了这一点。我们愿意像购买Solr一样购买商业支持,但软件产品本身必须是免费的
  • 动态集群成员资格。添加或删除任何节点时,整个分布式缓存集群都不需要重新启动
  • 高可靠性。缓存解决方案在面对服务器和网络问题时应该是可靠的,并且可以处理由服务器或网络故障、写竞争等引起的数据一致性问题
  • 高性能的。想象一下,缓存最终比Oracle还要慢
  • 如果缓存服务器是基于Java的,则需要额外标记,因为这是开发团队最熟悉的
  • 高速缓存数据的高可用性。这意味着跨多个节点复制缓存数据,这样丢失单个节点并不意味着丢失该节点上的所有缓存数据。我们计划存储JavaHTTP会话对象,以便也可以进行会话故障切换
  • 很高兴拥有

  • 基于Web的控制台,用于监视和管理所有缓存服务器节点,或者至少是一个API,通过它我们可以创建警报和通知

  • 除了web控制台之外,您还应该能够使用最专业的strength缓存来实现这一点

    我会先从陶土、艾哈奇或黑兹卡斯特开始

    下面是一些最好的缓存列表


    < P>如果是针对Web解决方案,为什么不考虑在Web片段级别上缓存,并使用ValeN--来处理缓存?


    原因很简单,缓存很难,特别是对于重要数据。

    截至2014年1月1日,我认为以下两种方法最有希望


  • 彼得,我们已经与Terracotta/EhCache进行了定价讨论。我们收到的报价意味着我们负担不起。让我看一看Hazelcast。由于这两个产品都是开源的,您的报价中有多少是出于兴趣。;)我不知道这场谈话。但是我听我的开发经理说这是每个虚拟机4 k。上面的需求列表与Jive软件公司Bruce Ritchie的需求完全匹配。所以我复制粘贴了很多这些点,有趣的是,Jive最终使用伏地魔来满足他们的缓存需求。他们基本上修改了伏地魔作为他们的缓存。问题是我们是一家咨询公司。客户要求我们尽量使用现成的软件。所以我们没有时间和金钱去做Jive所做的事情。下面是对分布式键值存储的分析。虽然从技术上讲不是缓存,但它们可以作为缓存使用。根据我对Varnish的理解,它位于web服务器前面。现在,我使用的产品是基于web的数字资产管理解决方案,其中大多数静态内容已经通过Akamai缓存,但我们仍然存在可扩展性问题。这是因为我们有大量的异步后台工作,它们多次调用db来完成任何事情。因此,虽然web加速器可能有帮助,但通用缓存解决方案确实是我们所需要的,这样我们就可以在整个产品范围内应用它。