首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat内存缓存-群集上的复制

Tomcat内存缓存-群集上的复制
EN

Stack Overflow用户
提问于 2018-01-18 19:23:10
回答 2查看 758关注 0票数 1

我有一个关于Tomcat集群的问题。我有一个java应用程序,我们在其中实现了内存缓存。因此,基本上当Tomcat启动时,它从数据库加载一些对象。这些对象像静态对象一样存储在tomcat内存中。因此,每当我们更新应用程序中的内容时,它都会写入数据库并更新内存中的对象。

我的问题是,如果我们在tomcat中实现具有2个或更多节点的集群,那么这些缓存的对象也会被共享吗?这有可能吗?我不这么认为。可以使用tomcat增量管理器或备份管理器提供的会话复制来共享HttpSession对象。但是内存中的东西也可以共享吗?

此外,正在运行的批处理作业会发生什么情况?它们是否也会多次运行,因为集群中将有多个tomcat实例,并且每个实例都会触发作业?这也将是一个失败。

有什么想法或想法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-01-18 19:31:39

如果您将某些内容保存在内存中,那么它将不会被复制,除非您专门实现一些内容以将其发送到其他机器。每个jvm都使它们的内存彼此独立。

通常,如果您想要复制缓存,一个好的解决方案是使用ehcache (http://www.ehcache.org/)。

关于批处理作业,它取决于您使用的库,但通常情况下,如果您使用已建立的库(如http://www.quartz-scheduler.org/),它应该能够确保只有一个实例运行作业。也许您需要配置。

重要的是要进行测试,以确保您放置的任何解决方案实际上都能达到您期望的效果。

祝好运!

票数 0
EN

Stack Overflow用户

发布于 2018-01-19 10:01:07

每当迁移到集群或类集群拓扑时,您都需要修改应用程序解决方案设计/体系结构,以确保它支持多实例执行。

由给定Tomcat实例缓存在内存中的

  1. 数据将不会在集群中的实例之间共享。你需要把这样的数据从Tomcat实例移到一个共享的缓存实例-- Redis现在似乎是一个流行的选择。
  2. 作业执行可能需要修改和定制,以由配置驱动。创建一个您的应用程序可以读取的布尔标志,并在需要时启动批处理。在集群中选择需要在其上运行作业的节点,并在此处将标志设置为true。在所有其他节点中将其设置为false。Quartz不会确保/控制/管理在集群中运行的作业的多个实例。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48320143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档