当部署一个大的Java网络应用程序(> 100 MB .war)时,我目前使用以下部署过程:
- 在开发机上展开应用程序.war文件。
- 从开发机器rsync:ed扩展的应用程序到现场环境。
- 在rsync之后重新启动现场环境中的应用程序服务器。尽管这一步骤并不是必需的,但我发现在部署时重启应用程序服务器可以避免由于频繁的类加载而导致“java.lang.OutOfMemoryError:PermGen space”。
该方法的优点:
- rsync减少了从开发机器到现场环境发送的数据量。上传整个.war文件需要超过十分钟,而rsync只需几秒钟。
该方法的缺点:
- rsync正在运行时应用程序上下文被重启,因为文件已更新。理想情况下,在rsync完成后应该发生重新启动,而不是在其仍在运行时。
- 应用程序服务器的重新启动会导致约两分钟的停机时间。
我希望找到具有以下特性的部署过程:
- 部署过程中最小化停机时间。
- 最小化数据上传所需的时间。
- 如果部署过程是应用程序服务器特定的,则应用程序服务器必须是开源的。
问题:
- 给出所述要求,最优部署过程是什么?