+-------------------------+-------------+------------------------+
| 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, поскольку их запросы одинаковы.