Вот что происходит во время развертывания Heroku (по состоянию на 20.10.2011 *) [1]:
- Героку получает твой толчок мерзавца
- Новая версия компилируется из последней версии вашего приложения и сохраняется
- [Это происходит примерно одновременно]
- Сетка dyno сигнализирует о прекращении [2] всех запущенных процессов для вашего приложения
- Сетка dyno сигнализирует о запуске новых процессов для вашего приложения
- Сетка dyno сигнализирует об отмене всех бездействующих процессов вашего приложения
- Маршрутизатор HTTP получает сигнал о начале маршрутизации HTTP-трафика к веб-динамиям, работающим с новым выпуском
Общий вывод заключается в том, что для минимизации возможных простоев вы должны минимизировать время загрузки вашего приложения.
Следуя осторожным методам миграции, можно нажать новый код, а затем выполнить миграцию во время работы приложения.
Вот пример для Rails: http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/
Чтобы минимизировать потерянные соединения во время перезапуска, используйте веб-сервер, который соответствующим образом реагирует на SIGTERM, начиная постепенное завершение работы (завершите существующие соединения, не устанавливайте новые). Более новые версии thin будут правильно обрабатывать SIGTERM.
- Эта тема является предметом большого обсуждения внутри страны и может
изменить в будущем.
- SIGTERM и 10 секунд спустя SIGKILL, если
все еще работает