Возможен ли теневой запуск в AWS Lambda? - PullRequest
1 голос
/ 30 января 2020

Что такое теневой запуск?

Теневой запуск означает, что вы запускаете новую версию, но она еще не получает живой трафик c. Трафик c старой версии копируется в новую 1: 1, поэтому вы можете сравнивать производительность и результаты новой функции со старой без влияния на работающую систему.

Пробный подход

Я уже пытался создать нечто подобное с помощью функции «Прокси», которая asyn c вызывает новую функцию и выводит результаты, а syn c вызывает старую функцию, возвращающую ее результаты.

Проблема заключается в побочных эффектах: если обе функции что-то делают, например, в DynamoDB, в БД может быть недопустимое состояние из-за запуска тени.

Цель

Я хочу проверить новые версии кода конкретной лямбда-функции.

Пример использования по назначению

У меня есть функция, которая вычисляет Fibbonacci recursive и сохраняет результат с меткой времени в DynamoDB в моей действующей системе.

Эта функция вызывается через AWS Шаговые функции как одна в цепочке из многих.

Как должно быть более эффективно вычислять ее итеративная Я реализую функцию с этим новым алгоритмом.

Теперь я хочу проверить предположение, что новая функция более производительна, чем старая. Поэтому я использую теневую развертку AWS лямбда, чтобы получить реально действующий трафик c в качестве тестовых данных.

Проблема

С текущим набором инструментов, который я обнаружил, можно выполнить функцию только дважды и тем самым создать две записи в DynamoDB, которые я считаю нежелательным побочным эффектом, поскольку мои данные в DynamoDB находятся в непреднамеренном недопустимом состоянии.

Если я высмеиваю внешние службы в новой функции, она всегда может быть более производительной чем старый, поскольку дорогостоящие во времени внешние службы не имеют доступа, и поэтому мой результат будет неверным.

Вопрос

Возможно ли создать теневую версию новой версии AWS лямбды? функционировать без этих побочных эффектов?

Ответы [ 3 ]

2 голосов
/ 11 февраля 2020

Я думаю, вы могли бы использовать лямбда-псевдонимы и конфигурацию маршрутизации, чтобы отправить часть трафика c во вторую версию функции. По сути, источник события теперь сопоставляется с псевдонимом ARN функции, затем вы можете настроить веса traffi c для маршрутизации большинства% из него через текущую версию, а другие% - с новой версией, например.

Некоторая информация и примеры в документации:

https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html

0 голосов
/ 14 февраля 2020

Вы упомянули, что используете CloudFront, поэтому хорошим вариантом может быть использование функции Lambda@Edge в запросе CloudFront.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html#lambda -examples-ab-testing

По сути, вы можете выполнять некоторый код каждый раз, когда получаете запрос CloudFront. Ссылка, которую я отправил, посвящена A / B-тестированию. Это означает, что вы решили отправить запрос в экземпляр A или B. Но ничто не мешает вам отправить запрос в A и B.

Это было бы совершенно прозрачно пользователю. Можно развернуть обе версии, выполнить обе версии (или в некоторой пропорции), и взаимодействие с пользователем будет таким же.

0 голосов
/ 12 февраля 2020

Вы можете использовать одну лямбду для отправки события в AWS SNS, который распределяет события в разные очереди SQS. Тогда ваша старая и новая версии обрабатывают разные очереди SQS, но эти события абсолютно одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...