Как справиться с выпуском канареек на AWS эластичных бобов?
Ранее я видел, что один экземпляр EC2, на котором запущен HAProxy, сконфигурирован с помощью функции json file/lambda, которая, в свою очередь, контролировала трафик с помощью липких сессий в двух отдельных приложениях гибких стеблей. Таким образом, у нас есть два уровня распределения нагрузки.
Однако у этого есть несколько проблем, одна из которых заключается в следующем: тестирование нескольких выпусков становится дорогим, требует все больше и больше приложений EB.
Под канарским выпуском я имею в виду возможность выпустить только процент трафика, чтобы выяснить любые ошибки, которые ускользнули от разработчиков, процесса проверки и процесса QA, не затрагивая весь трафик.
Как лучше всего справиться с такой настройкой с помощью ресурсов AWS, а не разорить банк?:)
3 ответа
Я нашел эту статью Medium, в которой объясняется использование пассивной группы автоматического масштабирования, где вы развертываете канареечную версию в ней и следите за статистикой. Как только вы удовлетворены результатом, вы можете изменить желаемое количество для канареечной группы автоматического масштабирования на 0 и выполнить последовательное обновление до активной группы автоматического масштабирования.
Вот ссылка на статью: https://engineering.klarna.com/simple-canary-releases-in-aws-how-and-why-bf051a47fb3f
Чтобы добиться канареечного тестирования с помощью эластичного бобового стебля, нужно:
- Создайте вторую среду beanstalk, в которой вы развертываете канареечный выпуск
- Используйте политику взвешенной маршрутизации Route53, чтобы отправлять процент DNS-запросов в вашу канареечную среду.
- Если вас устраивает производительность канарейки, вы можете направить 100% трафика в среду канарейки и т. Д.
При использовании DNS-маршрутизации следует иметь в виду, что взвешенная маршрутизация не является точной наукой, поскольку клиенты кэшируют DNS на основе TTL, установленного в Route53. В экстремальном сценарии, когда у вас будет, например, только один клиент, вызывающий вашу среду beanstalk (например, один веб-сервер), а TTL установлен на 5 минут, может случиться так, что переключение между средами будет происходить только каждые 5 минут.
Поэтому для взвешенной маршрутизации рекомендуется использовать довольно низкое значение TTL. Кроме того, наличие большого количества клиентов (например, мобильных телефонов) лучше работает в сочетании с маршрутизацией DNS.
В качестве альтернативы можно было бы создать отдельный LB перед двумя средами beanstalk, который уравновешивает запросы между средами beanstalk. Однако я не уверен на 100%, может ли LB сидеть перед другими (beanstalk) LB. Я подозреваю, что ответ отрицательный, но я еще не пробовал.
Изменение группы автомасштабирования в эластичном beanstalk невозможно, так как LB управляется beanstalk, и beanstalk может решить отменить изменения, которые вы сделали вручную на LB. Кроме того, beanstalk не позволяет выполнять развертывание в подмножестве экземпляров, сохраняя старую версию в другом подмножестве.
Надеюсь это поможет.
Разделение трафика изначально поддерживается Elastic Beanstalk.
Обязательно выберите предустановку конфигурации «высокая доступность» при создании среды приложения (нажав «настроить дополнительные параметры»), так как это настроит балансировщик нагрузки для вашей среды:
Затем отредактируйте раздел «Последовательные обновления и развертывания» вашей среды и выберите «Разделение трафика» в качестве стратегии развертывания.