Можно ли настроить Heroku для полноценного развертывания? - PullRequest
14 голосов
/ 08 сентября 2011

Наша команда в последнее время очень заинтересована в непрерывном развертывании, но мы столкнулись с небольшим препятствием в том, как на самом деле развернуть код на Heroku - кажется неизбежным, что должно быть некоторое количество простоя нажать код для Heroku.

В традиционной среде развертывание кода, вероятно, будет выглядеть примерно так:

  1. Нажмите код где-нибудь в промежуточный каталог (старый код все еще активен)
  2. Запуск миграций для базы данных (чаще всего миграция выполняется безопаснее, и те, кто нарушит код, могут быть защищены от этого)
  3. Извлечь половину (или некоторый процент серверов) из балансировщика нагрузки.
  4. Развертывание кода на этих серверах.
  5. Если возможно, запустите какой-нибудь автоматический тест дыма / проверьте серверы, чтобы они были «горячими»
  6. Переключение, какие серверы входят и выключаются балансировщиком нагрузки
  7. Сполосните и повторите.

С Heroku у меня очень мало контроля над двумя критическими шагами:

  • Сначала я не могу запустить миграцию базы данных. Один из способов, который я решил обойти, состоит в том, чтобы разделить миграции баз данных по отдельности, и сначала перенести их на heroku - что, хотя и болезненно, решило бы проблему - но только усугубило ...
  • Время раскрутки Dyno может занять довольно много времени - очевидно, это больше вина Rails, чем Heroku, но ключевая проблема заключается в том, что я не могу сделать что-то вроде перемешивания балансировки нагрузки выше, чтобы гарантировать, что мой приложение готово и загружено до того, как вновь развернутый сервер снова помещен в балансировщик нагрузки. Вместо этого у меня почти нет выбора, кроме как дать пользователям экран загрузки на 10-15 секунд и надеяться на лучшее (и делаю это ДВАЖДЫ, если я использую стратегию развертывания базы данных сверху)

В настоящее время мы используем экран обслуживания, но это не будет масштабируемым решением, если мы перейдем к полному непрерывному развертыванию (у нас, вероятно, будет 10-20 развертываний в день и 10-20 * 30 секунд обслуживания). экран начинает складываться)

Кто-нибудь сталкивался с подобными проблемами? Как вы к ним обратились? Какие-нибудь отличные примеры / истории успеха для true непрерывного развертывания на heroku?

Ответы [ 2 ]

10 голосов
/ 27 августа 2012

Что касается времени раскрутки динамов, у Heroku есть бета-функция, предназначенная для решения этой проблемы:

https://devcenter.heroku.com/articles/labs-preboot/

Она в основном сначала загружает ваши новые динамо, ждет некоторое время, переключает трафики только тогда убивает старых.Мое приложение показало заметное улучшение производительности во время развертывания.Вы можете прочитать его здесь:

http://ylan.segal -family.com / blog / 2012/08/27 / развернуть к герою с почти нулевым временем простоя /

7 голосов
/ 10 сентября 2011

На Heroku мы перезапустим SIGTERM для ваших динамометров.Через некоторое время, если процесс (ы) не остановится, они будут убиты.Это должно дать вам достаточно времени для беспроблемного перезапуска, когда вы не выполняете миграцию.

Вы всегда можете отправить код в промежуточное приложение, которое указывает на вашу производственную БД, и запускать миграции оттуда.Педро написал хороший пост в блоге о запуске миграции без простоя, который тоже должен помочь: http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/

Надеюсь, это поможет некоторым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...