От нуля до масштабирования с помощью AWS Serverless

В последние годы облачные приложения, разработанные с учётом нативной облачной среды, стали стандартом для многих компаний построения масштабируемых приложений. Среди множества достижений в области облачных технологий, серверные архитектуры выделяются как трансформационный подход. Простота в использовании и эффективность — два наиболее желаемых свойства для современной разработки приложений, и серверные архитектуры предлагают их. Это сделало серверные архитектуры игровым изменением как для провайдеров облачных услуг, так и для потребителей.

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

Серверные

Серверные не означает отсутствие серверов. Просто это означает, что основная инфраструктура для этих услуг управляется облачными провайдерами. Это позволяет архитекторам и разработчикам проектировать и создавать приложения, не заботясь о управлении инфраструктурой. Это аналогично использованию приложения для заказа такси, например, Uber: когда вам нужен транспорт, вам не нужно беспокоиться о владении или обслуживании автомобиля. Всем этим занимается Uber, а вы просто сосредотачиваетесь на том, чтобы добраться туда, куда вам нужно, оплатив поездку.

Серверные архитектуры предлагают множество преимуществ, делающих их подходящими и привлекательными для многих сценариев использования. Вот некоторые из основных преимуществ:

Автоматическое масштабирование

Одно из самых больших преимуществ серверного архитектурного подхода заключается в том, что он по своей сути поддерживает масштабирование. Облачные поставщики берут на себя основную работу, чтобы предложить практически бесконечное, готовое к использованию масштабирование. Например, если приложение, построенное с использованием технологий Serverless, внезапно становится популярным, инструменты или услуги автоматически масштабируются для удовлетворения потребностей приложения. Нам не нужно просыпаться посреди ночи, чтобы добавлять серверы или другие ресурсы.

Фокус на Инновациях

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

Эффективность затрат

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

Быстрое время до рынка

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

Сниженное операционное обслуживание

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

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

Создание веб-сервисов API с помощью AWS Serverless

Теперь, когда мы обсудили преимущества безсерверной архитектуры, давайте углубимся в некоторые практические примеры. В этом разделе мы создадим простое бэкенд-веб-приложение, используя ресурсы AWS Serverless.

Дизайн вышеуказанного бэкенд-приложения содержит три уровня для предоставления API для веб-приложения. После развертывания на AWS конечная точка шлюза доступна для использования API. Когда пользователи вызывают API, запросы направляются через шлюз API к соответствующим функциям Lambda. Для каждого запроса API функция Lambda запускается, и она обращается к DynamoDB для хранения и извлечения данных. Этот дизайн является упрощенным, экономически эффективным решением, которое автоматически масштабируется по мере роста спроса, что делает его идеальным выбором для создания API с минимальными накладными расходами. Компоненты в этом дизайне хорошо интегрируются друг с другом, обеспечивая гибкость.

В этой архитектуре есть два основных компонента — вычисления и хранилище.

Безсерверные вычисления

Безсерверные вычисления изменили способ создания и развертывания облачных приложений и сервисов. Они обещают реальную модель оплаты по мере использования с гранулярностью на уровне миллисекунд, не тратя ресурсы впустую. Из-за своей простоты и экономических преимуществ этот подход стал популярным, и многие облачные провайдеры поддерживают эти возможности.

Самый простой способ использовать безсерверные вычисления — это предоставить код, который будет выполняться платформой по запросу. Этот подход привел к появлению Функция как услуга (FaaS) платформ, сосредоточенных на том, чтобы позволить небольшим кусочкам кода, представленным в виде функций, выполняться в течение ограниченного времени. Функции запускаются событиями, такими как HTTP-запросы, изменения в хранилище, сообщения или уведомления. Поскольку эти функции вызываются и останавливаются, когда выполнение кода завершено, они не сохраняют никакое постоянное состояние. Чтобы поддерживать состояние или сохранять данные, они используют такие сервисы, как DynamoDB, которые предоставляют возможности надежного хранения.

AWS Lambda способна масштабироваться в зависимости от спроса. Например, AWS Lambda обработала более 1,3 триллиона вызовов в день Prime Day 2024. Такие возможности имеют решающее значение для обработки внезапных всплесков трафика.

Безсерверное хранилище

В экосистеме безсерверных вычислений безсерверное хранилище относится к облачным решениям для хранения данных, которые автоматически масштабируются без необходимости управления инфраструктурой со стороны потребителей. Эти сервисы предлагают множество возможностей, включая масштабируемость по запросу, высокую доступность и оплату по мере использования. Например, DynamoDB — это полностью управляемая, безсерверная NoSQL база данных, предназначенная для работы с моделями данных ключ-значение и документами. Она специально разработана для приложений, требующих стабильной производительности на любом масштабе, обеспечивая задержку в миллисекундах с одной цифрой. Она также предоставляет возможности бесшовной интеграции с многими другими сервисами.

Крупные облачные провайдеры предлагают множество безсерверных вариантов хранения для конкретных нужд, таких как S3, ElastiCache, Aurora и многие другие.

Другие случаи использования

В предыдущем разделе мы обсудили, как использовать безсерверную архитектуру для создания бэкенд API для веб-приложения. Существует несколько других случаев использования, которые могут извлечь выгоду из безсерверной архитектуры. Некоторые из этих случаев использования включают:

Обработка данных

Давайте рассмотрим еще один пример того, как безсерверная архитектура может быть использована для уведомления служб на основе изменений данных в хранилище данных. Например, на платформе электронной коммерции, предположим, при создании заказа необходимо уведомить несколько служб. В экосистеме AWS заказ может быть сохранен в DynamoDB при его создании. Чтобы уведомить другие службы, можно инициировать несколько событий на основе этого события хранения.

Используя DynamoDB Streams, функция Lambda может быть вызвана, когда происходит это событие. Эта функция Lambda затем может отправить событие изменения в SNS (Служба простых уведомлений). SNS действует как служба уведомлений, чтобы уведомлять несколько других служб, которые заинтересованы в этих событиях.

Обработка файлов в реальном времени

Во многих приложениях пользователи загружают изображения, которые необходимо хранить, обрабатывать для изменения размера, конвертировать в разные форматы и анализировать. Мы можем достичь этой функциональности, используя безсерверную архитектуру AWS следующим образом. Когда изображение загружается, оно отправляется в корзину S3, настроенную для вызова события, чтобы вызвать функцию Lambda. Функция Lambda может обработать изображение, сохранить метаданные в DynamoDB и сохранить измененные изображения в другой корзине S3. Эта масштабируемая архитектура может использоваться для обработки миллионов изображений без необходимости управлять какой-либо инфраструктурой или вручную вмешиваться.

Вызовы

Безсерверные архитектуры предлагают множество преимуществ, но они также приносят определенные вызовы, которые необходимо решить.

Холодный старт

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

Мониторинг и отладка

Так как может быть большое количество вызовов, мониторинг и отладка могут стать сложными. Бывает вызовить и исправить проблемы в приложениях, которые используются часто. Настоятельно рекомендуется настроить инструменты, такие как AWS Cloudwatch для метрик, журналов и оповещений, чтобы решить эти проблемы.

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

Заключение

Архитектура безсерверной вычислительной – это важный шаг в развитии приложений, ориентированных на облачные вычисления и хранение. Она широко используется во многих типах приложений, включая событийно-ориентированные рабочие процессы, обработку данных, обработку файлов и аналитику больших данных. Благодаря масштабируемости, гибкости и высокой доступности архитектура безсерверной вычислительной стала надежным выбором для компаний всех размеров.

Source:
https://dzone.com/articles/from-zero-to-scale-with-aws-serverless