我们的新项目要求之一是:
高可用性 - 当应用程序的新版本(WAR 文件)出现时,我们希望部署新应用程序而不需要重新启动 tomcat。
经过短暂的研究,我们提出了 2 个首选的替代方案来解决这个问题:
1)HA Proxy + 2个tomcat,当需要部署新的war时,我们关闭一个tomcat节点,将所有流量引导到另一个节点,更新第一个节点,重新启动tomcat,打开新节点进行流量。(最终更新了 2 个节点)
2) Tomcat 7 并行部署 - 听起来与试图实现的目标完全一样。
以下是一些让我们害怕选择上述替代方案之一的问题:
1)因为两个 tomcat 实例都使用相同的数据库,并且因为我们使用 JPA 来实现持久性,并且因为 JPA 使用了一级缓存。两个实例如何彼此并行存在?缓存不同步。在部署时禁用缓存是一个好习惯吗?还有其他技术吗?
2)既然两个实例的并行存在造成了这样的大惊小怪,是否可以让旧战争中的所有会话\用户将用户重定向到新战争?从而解决缓存问题?
3)我们还需要考虑更多参数吗?是否有任何其他做法可以缓解此问题?