Автоматизируйте балансировщик нагрузки AWS, чтобы избежать проблем с резкими скачками трафика
Скорее всего, вы уже использовали AWS Load Balancer. Если у вас небольшой или постоянный трафик, вы можете поверить, что это работает как по волшебству, не сталкиваясь с реальностью, что, как и в любой другой системе, за ней стоят машины, которые могут выйти из строя.
С другой стороны, если вы столкнулись со сценарием, когда ваш трафик может увеличиться в 10 раз почти мгновенно, вы, вероятно, столкнулись с ужасной ошибкой 500, исходящей от самого балансировщика нагрузки.
Это именно то, с чем мы сталкивались при создании приложения для сброса кроссовок в прошлом.
Каждый раз, когда у нас случалось «событие сброса», трафик сервера увеличивался в 100 раз менее чем за минуту, что приводило к тому, что балансировщику нагрузки AWS требовалось время для масштабирования. Во время масштабирования большинство пользователей не могли использовать приложение.
Так что решение казалось очевидным, давайте предварительно прогреем наш балансировщик нагрузки и покончим с этим!
К сожалению, AWS не предоставляет автоматизированного способа сделать это, и вы вынуждены поднимать билет каждый раз, когда вам нужно разогреться для определенного мероприятия.
Этого не годится, все остальное уже было автоматизировано, а наличие повторяющегося ручного шага сделало бы его слишком легким для человеческой ошибки.
Нам нужно было это как-то автоматизировать, и схему нашего решения можно увидеть здесь:
- За 30 минут до отметки времени каждого события асинхронный процесс начинает отправлять события в SQS.
- Каждое отдельное сообщение SQS запускает одну функцию Lambda.
- Каждая лямбда генерирует заранее определенный объем трафика
- Последовательность Фибоначчи использовалась в качестве ориентира для увеличения количества сообщений, которые должен создавать сервер (наконец-то хороший повод использовать рекурсивную функцию Фибоначчи для чего-то полезного!).
- Поскольку эти сообщения создаются параллельно, AWS выделяет одну функцию Lambda для обработки каждого отдельного сообщения SQS.
- Балансировщик нагрузки начинает получать добавочный трафик, что вынуждает его развертывать дополнительные узлы за кулисами, что приводит к увеличению пропускной способности.
Это решение сработало невероятно хорошо. Это было не только очень дешево (мы использовали самую дешевую лямбда-конфигурацию с 1 миллионом бесплатных вызовов), но и позволяло все делать на автопилоте!
Пример Python того, как лямбда-код будет выглядеть в Python:
Развертывание можно автоматизировать с помощью serverless.js, скрипта yaml:
В нашем случае всплески трафика было очень легко предсказать. Мы знали, что это всегда будет происходить вокруг временной метки события.
Для сценариев, где есть шаблон, но его трудно преобразовать в конкретный график, то, что я видел, успешно делается, это обучать модель машинного обучения на ваших данных временных рядов, а затем использовать ее для прогнозирования, когда вы должны разогреться. поднимите свой балансировщик нагрузки.
Дальнейшее чтение:
Использование Redis для создания серверной части приложения «NIKE Sneakers Drop App в реальном времени
Давайте узнаем, как создать серверную часть, способную эффективно обслуживать миллионы пользователей luis-sena. среда.com»
Как это все звучит? Есть что-нибудь, что вы хотели бы, чтобы я расширил? Дайте мне знать ваши мысли в разделе комментариев ниже (и нажмите аплодисменты, если это было полезно)!
Оставайтесь с нами для следующего поста. Следите, чтобы не пропустить!