При развертывании большого Java webapp ( > 100 МБ .war) в настоящее время я использую следующий процесс развертывания:
- Файл приложения .war расширяется локально на машине разработки.
- Расширенное приложение - rsync: ed от машины разработки до живой среды.
- Сервер приложений в живой среде перезапускается после rsync. Этот шаг не является абсолютно необходимым, но я обнаружил, что перезапуск сервера приложений при развертывании позволяет избежать "java.lang.OutOfMemoryError: PermGen space" из-за частых загрузок классов.
Хорошие вещи об этом подходе:
- rsync минимизирует количество данных, отправленных с машины разработки в живую среду. Загрузка всего файла .war занимает более десяти минут, тогда как rsync занимает пару секунд.
Плохие вещи об этом подходе:
- Во время запуска rsync контекст приложения перезапускается с момента обновления файлов. В идеале перезапуск должен происходить после завершения rsync, а не при его запуске.
- Перезапуск сервера приложений вызывает примерно две минуты простоя.
Я хотел бы найти процесс развертывания со следующими свойствами:
- Минимальный простой в процессе развертывания.
- Минимальное время, затраченное на загрузку данных.
- Если процесс развертывания специфичен для сервера приложений, сервер приложений должен быть открытым.
Вопрос:
- С учетом заявленных требований, каков оптимальный процесс развертывания?