Понимание развертывания с нулевым временем простоя

scrollden⋰·⋰
Syntropy Russia
Published in
4 min readApr 20, 2022

Развертывание с нулевым временем простоя — это метод, используемый при развертывании программного обеспечения, который направлен на сокращение или устранение времени недоступности системы для пользователей во время обновления или развертывания программного обеспечения.

Развертывание с нулевым временем простоя может быть достигнуто путем тщательного планирования и выполнения.

В этой статье мы обсудим, почему важно внедрять систему с нулевым временем простоя, как реализовать ее в вашем приложении, а также потенциальные риски и преимущества ее внедрения.

Что такое развертывание с нулевым временем простоя?

С активно разрабатываемым проектом, который может запускать конвейер CI/CD несколько раз в день, ваш проект, возможно, придется часто развертывать в рабочей среде. Представьте, если бы ваше приложение отключалось для обслуживания каждый раз, когда вы его развертывали, то вашим пользователям пришлось бы ждать резервного копирования приложения, прежде чем они смогут его использовать, что неприемлемо. Именно здесь вступает в игру развертывание с нулевым временем простоя.

Почему это важно?

Использование развертывания с нулевым временем простоя имеет ряд преимуществ:

  • Увеличение времени безотказной работы системы
  • Сокращение времени простоя для пользователей
  • Снижение стоимости простоя
  • Повышение надежности
  • Последовательность в развертывании
  • Непрерывность в интеграции и развертывании

Каждый раз, когда ваше приложение не работает, это негативно сказывается на вашем бизнесе. Для примера, 4 октября Facebook испытал примерно 6-часовое отключение, которое можно оценить в 60 миллионов долларов потерянного дохода.

Какие существуют проблемы, связанные с развертыванием систем с нулевым временем простоя?

Существуют некоторые недостатки развертывания с нулевым временем простоя, которые следует учитывать:

  • Повышенная сложность и техническое обслуживание
  • Увеличение стоимости развертывания и инфраструктуры
  • Требования обратной совместимости
  • Проблемы совместимости данных

Как мы уже говорили ранее, успешное развертывание с нулевым временем простоя достигается путем тщательного планирования, поэтому далее рассмотрим несколько подходов, которые вы можете использовать для осуществления развертывания с нулевым временем простоя.

Стратегии развертывания с нулевым временем простоя

Как и в любой другой части процесса разработки программного обеспечения, эти проблемы можно преодолеть с помощью хорошо спланированных и реализованных стратегий развертывания.

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

Синее/зеленое развертывание

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

Процесс происходит следующим образом:

  • Старый экземпляр приложения поддерживается в рабочем состоянии, пока развертывается новое программное обеспечение.
  • Затем вы запускаете новый экземпляр приложения и ждете, пока он будет готов.
  • Как только новый экземпляр будет готов, вы можете переключить трафик на новую модель. В зависимости от вашей конфигурации это может быть достигнуто путем изменения DNS-записи старого экземпляра для указания на новый экземпляр или переключения правил балансировщика нагрузки для перенаправления трафика на новую модель.
  • Наконец, когда старый экземпляр больше не нужен, его можно отключить.

Вот краткая схема этого процесса:

Канареечные развертывания

Канареечные развертывания используются для тестирования нового программного обеспечения на ограниченном количестве пользователей перед его запуском в работу.

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

Таким образом, вместо того чтобы выпускать новую версию приложения для всех пользователей, вы можете выпустить новую версию для небольшого числа пользователей. Это даст вам возможность протестировать последнюю версию приложения, собрать отзывы, устранить любые неожиданные проблемы и только после этого предоставить доступ для всех пользователей.

Некоторые компании позволяют пользователям участвовать в тестировании новых бета-версий до их публичного запуска.

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

Вот краткая схема этого процесса:

Скользящие обновления

Скользящие обновления — это развертывание, используемое для обновления программного обеспечения на скользящей основе, что означает, что текущие работающие экземпляры заменяются новыми экземплярами в контролируемом порядке. Таким образом, старый экземпляр заменяется только тогда, когда готов новый экземпляр.

Важной частью скользящих обновлений является то, что вы должны иметь возможность вернуться к предыдущей версии приложения, если новую версию не удалось развернуть.

Это обычная стратегия развертывания для веб-приложений, которая широко используется в Kubernetes и микросервисах.

Для получения дополнительной информации о скользящих обновлениях в Kubernetes см. эту статью.

Вот краткая диаграмма этого процесса:

Заключение

Как видите, развертывание с нулевым временем простоя — это отличный способ повысить надежность вашего приложения. Несмотря на недостатки, преимущества развертывания с нулевым временем простоя являются жизненно важными для успеха вашего приложения и требуют некоторых усилий, необходимых для достижения этой цели.

Независимо от того, какую стратегию развертывания вы выберете, вам следует убедиться, что вы внедряете тестовую разработку (TDD) на ранних этапах, чтобы тестировать свой код по мере его разработки и быть уверенным, что вы не развертываете ошибочную версию своего кода.

При всем этом следует помнить, что простои неизбежны. Они часто вызваны человеческими ошибками, побочными ситуациями, неожиданными проблемами или непредвиденными событиями. Ваша цель — минимизировать время простоя и обеспечить постоянную доступность приложения для пользователей. Вам просто нужно убедиться, что вы учитесь на своих ошибках и разрабатываете процессы, которые позволят свести их к минимуму.

--

--