我需要开发一个Spring Web应用程序,它需要根据特定条件(位置)查询遗留系统。为了减少遗留系统的负载,我们希望每30秒为单个查询中的所有位置提取数据,并保留内存以服务客户端请求。客户定期刷新(每分钟)。 Web应用程序不会向数据库写入任何内容。
将应用程序部署到具有至少两个节点的tomcat集群。
在上面的场景中,实现内存数据存储的最佳方法是什么?我们只想在一个tomcat节点(比如primary)中执行查询,并将数据同步到另一个节点(比如secondary)。当主节点关闭时,辅助节点应该开始执行查询以服务客户端。
答案 0 :(得分:0)
In the above scenario what is the best way to implement in-memory data-store?
您可以使用任何分布式缓存,例如EHCACHE或Terracotta。使用正确的配置,缓存的数据将复制到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服务之一。