Последовательное обновление — это метод развертывания программного обеспечения, используемый для обновления или модернизации системы без простоев или перебоев в обслуживании. Он предполагает постепенное обновление различных компонентов или экземпляров системы при сохранении работоспособности всей системы. Последовательные обновления обычно используются в распределенных системах, таких как веб-серверы, базы данных и контейнерные приложения.
Во время чередующегося обновления новые версии программного обеспечения или конфигураций развертываются на подмножестве экземпляров или узлов системы, в то время как оставшиеся экземпляры продолжают обрабатывать входящие запросы. Такой подход гарантирует отсутствие единой точки отказа и система остается доступной на протяжении всего процесса обновления. После успешного развертывания и проверки новых экземпляров старые экземпляры постепенно заменяются, и процесс продолжается до тех пор, пока не будут обновлены все экземпляры.
Теперь давайте рассмотрим несколько методов, обычно используемых для выполнения чередующихся обновлений, а также примеры кода:
-
Техника балансировки нагрузки:
- Шаг 1. Настройте балансировщик нагрузки для распределения входящего трафика по нескольким экземплярам.
- Шаг 2. Разверните новые версии программного обеспечения на подмножестве экземпляров.
- Шаг 3. Обновите конфигурацию балансировщика нагрузки, чтобы направить часть трафика на новые экземпляры.
- Шаг 4. Проверьте новые экземпляры на предмет стабильности и производительности.
- Шаг 5. Постепенно увеличивайте трафик на новые экземпляры и уменьшайте его со старых экземпляров до тех пор, пока старые экземпляры не перестанут получать трафик.
Пример: если вы используете Amazon Web Services (AWS), для реализации этого метода вы можете использовать сервис Elastic Load Balancer (ELB) вместе с группами автоматического масштабирования.
-
Техника оркестровки контейнеров:
- Шаг 1. Для управления контейнерами используйте платформу оркестрации контейнеров, например Kubernetes, Docker Swarm или Apache Mesos.
- Шаг 2. Создайте новую версию образа контейнера с необходимыми изменениями.
- Шаг 3. Обновите конфигурацию оркестрации контейнера, чтобы развернуть новую версию на подмножестве узлов.
- Шаг 4. Проверьте новые контейнеры на предмет стабильности и производительности.
- Шаг 5. Постепенно увеличивайте количество экземпляров, на которых работает новая версия, и уменьшайте количество экземпляров, на которых работает старая версия.
Пример (Kubernetes). Используя объект развертывания Kubernetes, вы можете определить стратегию последовательного обновления, указав такие параметры, как максимальное количество модулей, недоступных во время обновления, и максимальное количество модулей, которые можно запланировать для обновления одновременно.
apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:v2 -
Техника сине-зеленого развертывания:
- Шаг 1. Настройте две идентичные среды: одна будет «синей» средой (текущая действующая версия), а другая — «зеленой» средой (новая версия).
- Шаг 2. Направьте весь входящий трафик в синюю среду.
- Шаг 3. Разверните и протестируйте новую версию в «зеленой» среде.
- Шаг 4. Как только зеленая среда станет стабильной и проверенной, переключите маршрутизацию трафика с синей среды на зеленую.
- Шаг 5. Следите за зеленой средой и откатывайтесь, если возникнут какие-либо проблемы.
Пример: если вы используете AWS, вы можете использовать Amazon Route 53 для управления маршрутизацией DNS и направления трафика между синей и зеленой средами.
Это всего лишь несколько примеров методов последовательного обновления. Выбор метода зависит от конкретного технологического стека и инфраструктуры, с которой вы работаете.