我有一个关于Tomcat集群的问题。我有一个java应用程序,我们在其中实现了内存缓存。因此,基本上当Tomcat启动时,它从数据库加载一些对象。这些对象像静态对象一样存储在tomcat内存中。因此,每当我们更新应用程序中的内容时,它都会写入数据库并更新内存中的对象。
我的问题是,如果我们在tomcat中实现具有2个或更多节点的集群,那么这些缓存的对象也会被共享吗?这有可能吗?我不这么认为。可以使用tomcat增量管理器或备份管理器提供的会话复制来共享HttpSession对象。但是内存中的东西也可以共享吗?
此外,正在运行的批处理作业会发生什么情况?它们是否也会多次运行,因为集群中将有多个tomcat实例,并且每个实例都会触发作业?这也将是一个失败。
有什么想法或想法吗?
发布于 2018-01-18 19:31:39
如果您将某些内容保存在内存中,那么它将不会被复制,除非您专门实现一些内容以将其发送到其他机器。每个jvm都使它们的内存彼此独立。
通常,如果您想要复制缓存,一个好的解决方案是使用ehcache (http://www.ehcache.org/)。
关于批处理作业,它取决于您使用的库,但通常情况下,如果您使用已建立的库(如http://www.quartz-scheduler.org/),它应该能够确保只有一个实例运行作业。也许您需要配置。
重要的是要进行测试,以确保您放置的任何解决方案实际上都能达到您期望的效果。
祝好运!
发布于 2018-01-19 10:01:07
每当迁移到集群或类集群拓扑时,您都需要修改应用程序解决方案设计/体系结构,以确保它支持多实例执行。
由给定Tomcat实例缓存在内存中的
https://stackoverflow.com/questions/48320143
复制相似问题