【问题标题】:Single Java Cache for multiple Application Server用于多个应用程序服务器的单个 Java 缓存
【发布时间】:2015-05-30 03:24:41
【问题描述】:

我们在反向代理后面有多个应用程序服务器。我们希望在另一台主机上有一个所有应用服务器都可以轻松使用的缓存,因此缓存必须具有某种网络支持。此外,设置应该很容易,可能支持 docker,但这不是必须的。缓存持续时间约为 1d。 API 应该尽可能简单和标准化(JCache?)。 在稍后阶段,我们希望对缓存进行预填充。

我有哪些选择?

背景:第一步,我们希望减少后端系统的负载,后端系统主要提供 SOAP 服务。所以我们要缓存 SOAP 响应 (JAX-WS)。第一阶段的缓存命中率可能约为 25%。 稍后我们也希望对 JPA 使用相同的缓存(我们已经为每个 Application Servcer 启用了内存缓存并使用了缓存协调策略)。 要使用更多的缓存,我们需要一些排序缓存类别。

【问题讨论】:

  • 你试过memcached吗?它只是在特定端口上运行缓存服务器,您可以从所有应用程序服务器调用它。它也有一个不错的 java api。
  • 他们使用 spymemcached 作为客户端,这有点锁定。我们希望对客户端开放。但这将是一个可行的选择。
  • 是的,在示例中他们使用该客户端,但在项目中我们没有使用该客户端。这是一个开源解决方案,协议是开源的,您不必使用任何已经制作的客户端。我指的是链接中的架构。根据我的经验,即使在拥有数百万用户的网站中,它在工作环境中也能很好地工作。

标签: java web-services caching soap jcache


【解决方案1】:

一般来说:问题是广泛的,实际上您是在寻求产品推荐。请查看 stackoverflow 问题指南。

关于您的问题:

没有任何目的的“单一缓存”。此外,软件和系统架构可以有许多变体,也可以使用单个缓存产品。最佳解决方案不取决于应用程序,而是取决于您要缓存的数据访问类型。我想到的一些问题:

您的使用模式主要是读还是读/写? 访问、点、范围或全扫描的类型是什么?您对数据执行什么类型的操作?对象数量和典型对象大小是多少?有热点吗?你有多少应用服务器?应用服务器有内存限制吗?在后端生成数据的成本是多少(延迟和资源成本)?

一般建议:如果您只有几个应用程序服务器,我会从应用程序服务器中的本地缓存开始,而忽略后端可能存在来自不同应用程序服务器的冗余请求这一事实。这样您就可以保留现有的系统架构。放置一个或多个单独的缓存服务器需要大量的计划和大量的考虑,以用于暂存、部署和操作您的应用程序。

一秒钟的一般建议:第一阶段的缓存命中率可能约为 25% 具有此命中率的缓存将毫无用处。您可能根本没有从缓存中获得任何性能提升。无论如何,可能有理由这样做,例如改进快闪人群的应用。这需要一些更详细的阐述。仔细检查你的数字!

我期待更详细的问题:)

【讨论】:

  • 谢谢你的答案。为每个实例使用本地缓存可能是最好的第一次尝试。乍一看,25% 是毫无用处的,但在第二阶段,我们希望每晚预填充该缓存并达到可能接近 90%+ 的命中率。 25% 至少帮助高级用户一遍又一遍地查询大量相同(昂贵)的数据。我们现在要进行 JCache 实现,可能是 Infinispan,它为我们提供了许多有关基础架构的选项。第二,这将有助于降低多年来增长的代码复杂性,因为一些对象已经缓存在不同位置的哈希图中。
【解决方案2】:

使用Ehcache 的缓存服务器怎么样? 它提供 RESTful 接口,可以在专用服务器上运行。

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多