在最短的停机时间内部署 Java Web 应用程序的最佳实践?
部署大型 Java webapp(>100 MB .war)时,我当前使用以下部署过程:
- 应用程序 .war 文件在开发计算机上本地展开。
- 扩展的应用程序是从开发计算机到实时环境的 rsync:ed。
- 实时环境中的应用程序服务器在 rsync 后重新启动。此步骤不是严格需要的,但是我发现在部署时重新启动应用程序服务器可以避免“java.lang.OutOfMemoryError:PermGen空间”,因为频繁的类加载。
这种方法的好处:
- rsync 可最大程度地减少从开发计算机发送到实时环境的数据量。上传整个 .war 文件需要十分多钟,而上传一个 rsync 则需要几秒钟。
这种方法的坏处:
- 当 rsync 运行时,应用程序上下文将重新启动,因为文件已更新。理想情况下,重新启动应该在 rsync 完成后进行,而不是在它仍在运行时。
- 应用服务器重启会导致大约两分钟的停机时间。
我想查找具有以下属性的部署过程:
- 部署过程中的停机时间最短。
- 上传数据所花费的时间最少。
- 如果部署过程特定于应用服务器,则应用服务器必须是开源的。
问题:
- 根据规定的要求,最佳部署过程是什么?