+-------------------------+-------------+------------------------+ | Deployment Strategy | Instance | Blue/Green, Rolling | +=========================+=============+========================+ | Testing Strategy | User | Canary, A/B, Shadow | +-------------------------+-------------+------------------------+
Стратегия развертывания
1. Синий/зеленый узор
- Наличие двух идентичных сред: V1 и V2, где работают и V1, и V2, но только V1 имеет весь трафик, пока V2 находится в стадии тестирования.
- Версия 2 выпускается вместе с версией 1, и после тестирования трафик направляется в версию 2.
- Балансировщик нагрузки будет направлять трафик между двумя средами
- Нулевое время простоя и мгновенный откат
- Стоимость поддержки двух сред высока, и сеанс использования может быть потерян во время маршрутизации изменений между версиями.
Применить сине-зеленую стратегию развертывания довольно легко с платформой Google App Engine, где она была встроена с функцией Разделение трафика. Если вы не очень хорошо знакомы с App Engine, у меня есть демо-статья Развертывание Flutter WebApp в App Engine.
Во-первых, вам нужно как минимум две версии приложения в App Engine.
Нажмите кнопку «Разделить трафик», чтобы перейти на страницу конфигурации:
Теперь наблюдайте, как трафик расходится с версией 1 или 2 вашего веб-приложения.
С другой стороны, если вы используете Google Kubernetes Engine, настроить Blue/Green также просто:
- Сначала разверните текущую версию приложения в кластере Kubernetes.
kubectl apply -f bluegreen/old-version.yaml
- Протестируйте развернутое приложение
- Разверните новую версию вместе с текущей версией
kubectl apply -f bluegreen/new-version.yaml
- Переключите трафик с app:old на app:new на уровне балансировщика нагрузки.
- Очистите развертывание и ресурсы
kubectl delete -f bluegreen/ --ignore-not-found
2. Схема непрерывного обновления
- Медленно заменяя текущий запущенный экземпляр V1 новой версией, пока V1 не будет полностью перемещен после того, как V2 пройдет проверку работоспособности.
- В любой момент времени всегда работает экземпляр N+1, потому что фактическое развертывание происходит в течение определенного периода времени.
- Поскольку версии 1 и 2 сосуществуют, пользователи могут быть перенаправлены на обе версии, поэтому наличие обратной совместимости с версией 2 очень важно.
- Единая полная среда в любой момент времени.
- Нулевое время простоя и низкий риск, поскольку Kubernetes гарантирует, что по крайней мере два модуля будут обслуживать трафик в любой момент времени, а один модуль будет заменяться за раз.
- Это стратегия развертывания по умолчанию в Kubernetes.
Стратегия тестирования
3. Канарейка
- V2 выпускается вместе с производственной версией V1, но только для небольшой группы пользователей, после чего следует полное развертывание.
- Используйте балансировщик нагрузки, чтобы разделить процент трафика с Prod на Canary.
- Возможность тестировать рабочий трафик в реальном времени с нулевым временем простоя и быстрым откатом
Подобно стратегии развертывания Blue/Green, если вы используете Google App Engine, вы можете попробовать эту стратегию тестирования, используя функцию «Разделить трафик». Вместо того, чтобы переключать весь трафик сразу, вы можете отклонить небольшой процент от V1 к V2.
4. Шаблон А/В
- И версии 1, и версии 2 выпускаются для пользователей.
- Помогите предприятиям принимать решения с помощью коллективных данных. Когда есть несколько вариантов реализации одного набора функций, полезно решить, какой из них более эффективен.
- Комплексная метрика проверки
5. Теневой узор
- И версии 1, и версии 2 выпускаются для пользователей.
- V2 будет получать реальный трафик, но функции скрыты от пользователей
- Это не повлияет на пользователей версии 2, поскольку их запросы одинаковы.