Является ли наилучшей практикой при непрерывном развертывании немедленное развертывание на всех производственных серверах или только на подмножестве?

Мы используем CD в нашем проекте, и поскольку приложение используется во всем мире, мы используем более одного центра обработки данных (по одному на регион). В каждом центре обработки данных размещается изолированный экземпляр приложения (каждое региональное развертывание использует свою собственную БД, сервер приложений и т. Д.). Данные не передаются между центрами обработки данных.

Есть два разных подхода, которые мы можем использовать:

  1. Разверните на сервере интеграции (I), где выполняются все тесты, затем разверните в первом центре обработки данных A, а затем (после завершения развертывания в A) в центре обработки данных B.

  2. Область A имеет меньшую пользовательскую базу и для предотвращения перебоев в работе A и B, вызванных программной ошибкой, которая не была обнаружена на сервере интеграции (I), альтернативой является развертывание на сервере интеграции, а затем "выпекание" кода в область A в течение 24 часов и развертывание приложения в центре обработки данных B только после того, как оно было испытано в производстве в течение 24 часов. Эта альтернатива идет вразрез с лучшими практиками CI, так как в этом случае нет "непрерывного" развертывания?

2 ответа

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

Между непрерывной интеграцией и непрерывным развертыванием существует большая разница. CI предназначен для ситуации, когда несколько пользователей работают с одной и той же кодовой базой, и интеграционные тесты запускаются многократно для нескольких проверок, чтобы сбои интеграции обрабатывались быстро и программно. Непрерывное развертывание - это методика, которая заключает в себе быстрое развертывание и программное принятие ваших приемочных тестов, так что вы развертываете как можно быстрее (вместо обычных задержек, которые существуют в большинстве ИТ-организаций). Вопрос, который вы задаете, представляет собой смесь для обоих

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

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

Другие вопросы по тегам