【问题标题】:Java web application short lived cachingJava Web 应用程序的短暂缓存
【发布时间】:2015-03-15 15:12:55
【问题描述】:

我需要开发一个 Spring Web 应用程序,该应用程序需要根据某些条件(位置)查询遗留系统。为了减少遗留系统的负载,我们希望在单个查询中每 30 秒提取一次所有位置的数据,并保留在内存中以服务客户端请求。客户端会定期(每分钟)刷新。 Web 应用程序不会向数据库写入任何内容。

应用程序部署到至少有两个节点的 tomcat 集群。

在上述场景中,实现内存数据存储的最佳方式是什么?我们只想在一个 tomcat 节点(比如主节点)中执行查询,并将数据同步到另一个节点(比如辅助节点)。当主节点宕机时,从节点应该开始执行查询服务客户端。

【问题讨论】:

    标签: performance spring-mvc tomcat distributed-caching


    【解决方案1】:
    In the above scenario what is the best way to implement in-memory data-store?
    

    您可以使用任何分布式缓存,例如EHCACHETerracotta。通过正确的配置,缓存的数据将被复制到 Tomcat 集群中的所有服务器上。

    We want to execute the query in only one tomcat node.
    

    由于您使用的是 Tomcat 集群,因此集群服务器很可能已经在某种负载平衡器之后,并且您的应用程序很可能以 http://www.domain.com 的身份访问。这意味着,对www.domain.com 上的 URL 的每个请求都将由负载平衡器自动路由到其中一个集群服务器。

    一个简单的策略是使用 HTTP 调用刷新缓存,例如,curl http://www.domain.com/cache/refresh。由于此调用将通过负载均衡器,因此无论何时调用,它都会自动路由到 Tomcat 集群中的其中一台服务器。

    现在,只需配置一个 cronjob 以您所需的频率访问缓存刷新 URL。可以在您的一台服务器上配置 cronjob,或使用众多可用的基于 Web 的 cron 服务之一。

    【讨论】:

    • 谢谢曼尼什。听起来像是一个简单而完美的解决方案。让我试试。顺便说一句,我们正在使用 Hazelcast 进行缓存。
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 2018-02-11
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多