Серверлесс архитектура: руководство по применению и преимуществам
Что такое серверлесс архитектура?
Serverless architecture (бессерверные вычисления, serverless computing или функция как услуга, FaaS) — это относительно новый подход к запуску приложений в облачном окружении. Ее важность заключается в способности повысить эффективность программирования, ускорить развертывание и снизить расходы.
Важно понимать, что термин бессерверность не означает отсутствие серверов, а скорее отсутствие необходимости управлять ими напрямую.
Серверы становятся невидимыми для программиста, что позволяет сосредоточиться на написании качественного кода для интерфейсов и бизнес-логики. Облачная платформа автоматически берет на себя задачи по выделению и масштабированию ресурсов.
Определение серверлесс архитектуры
Serverless архитектура — это модель выполнения облачных вычислений, при которой поставщик облачных услуг управляет динамическим распределением машинных ресурсов.
Четыре основные черты serverless вычислений:
Абстракция — отсутствует необходимость управления сервером, на котором запускается программа.
Экономичность — бизнес платит только за фактически потребленные ресурсы.
Эластичность — провайдер автоматически предоставляет необходимое количество вычислительных ресурсов в зависимости от нагрузки на продукт.
Ограниченность жизненного цикла — приложения запускаются в контейнерах и автоматически останавливаются после выполнения задачи.
Пример: serverless architecture Joot
На изображении показана структура, которую Joot использует для обработки изображений. Все пользователи Joot управляются с помощью Amazon Cognito. AWS Amplify используется в качестве библиотеки для веб-приложений. AWS Lambda координирует аутентификацию.
Процесс выглядит следующим образом: клиент заходит в систему и загружает изображение, которое сохраняется непосредственно в Amazon S3. Триггеры, настроенные в корзине для хранения изображений, извлекают это изображение, изменяют его размер, выполняют необходимые обработки, извлекают метаданные и сохраняют их в Amazon DynamoDB.
Основные принципы работы серверлесс
Рассмотрим подробнее, как работает сервелесс модель.
-
Разработчик создает программу с serverless functions, определяющей реакцию на определенное действие пользователя. Обычно поставщики облачных услуг предлагают готовые продукты FaaS, чтобы упростить кодирование для разработчиков и использовать готовые серверные элементы.
-
Определено событие, которое решает время и свойства запуска function. Событиями могут выступать HTTP-запросы, очереди сообщений, потоковые данные. Например, когда клиент инициирует HTTP-запрос, приложению может потребоваться получить и доставить определенные данные.
-
После того как приложение развернуто и доступно пользователю, событие инициируется действием.
-
Далее событие передается поставщику облака, и поставщик динамически распределяет ресурсы, необходимые для реагирования на действие, в соответствии с предопределенной функцией.
-
Пользователь получает данные или любой другой результат, определенный функцией.
Важно отметить, что при отсутствии запроса пользователя ресурсы не выделяются, и никаких данных не сохраняется в промежуточном состоянии. Это гарантирует доступ клиенту только к самым актуальным и недавно обновленным данным, позволяя программе работать в режиме реального времени и экономя затраты на хранение.
Преимущества серверлесс архитектуры
С позиции преимуществ serverless architecture развивает возможности инфраструктуры контейнеров и микросервисов, что позволяет программировать в мультиязычная режиме и не привязываться к одной платформе. При этом разработка системы становится проще, а исправление ошибок — легче.
Масштабируемость и гибкость
Сервелесс приложения обладают высокой масштабируемостью и способны обрабатывать практически неограниченное количество одновременных пользователей. Например, приложение Netflix использует serverless архитектуру для достижения оптимальной производительности независимо от количества пользователей на платформе. Это позволяет избежать затрат на поддержание высокой пропускной способности в периоды низкой активности, когда на платформе находится всего несколько человек.
Снижение затрат
Обновление и передача данных в режиме реального времени позволяют гарантировать, что пользователи получают только самые актуальные данные, без задержек и дополнительных затрат за время простоя. Программа реагирует на функциональные запросы и извлекает информацию на серверной стороне только при наличии действия со стороны клиента или при инициировании события.
Упрощение управления инфраструктурой
Провайдер берет на себя интеграцию с другими сервисами, мониторинг, журнал логов, поддержку рабочего управления и размещение базы данных в Data Platform вместо использования виртуальных машин. Это помогает быстрее запустить продукт.
Когда стоит использовать серверлесс архитектуру?
Возможность использования бессерверного провайдера стоит рассмотреть, если в продукте необходимо разместить небольшое количество functions. Когда приложение более сложное, серверлесс структура все равно может оказаться полезной, но со временем будет разумнее перенести небольшие его части на serverless functions.
Сценарии и примеры использования
Правильная реализация serverless architecture упрощает компаниям процесс создания и развертывания программных продуктов. Продукт остается экономически выгодным, обеспечивает гибкость и масштабируемость для адаптации к потребностям ПО.
Как это работает на практике: реальные примеры.
Бессерверные фреймворки применяются, например, в спортивных технологиях. Statcast MBL позволяет пользователям искать информацию, учитывая несколько переменных: скорость подачи мяча, тип поля, сезон, определенное событие, имя игрока. Программа также дает точную статистику бейсбольной игры в режиме реального времени и информацию о перемещениях игроков по всему континенту.
Coca-Cola использует торговые автоматы на базе serverless functions. Облачные решения внедрили через интеллектуальные торговые автоматы Freestyle, которые дают возможность клиентам онлайн заказывать и оплачивать напитки. Ожидаемое использование автоматов в какой-то момент выросло с 30 до 80 млн реальных транзакций. Использование бессерверности для обработки сильно возросшего количества пользователей позволило значительно сократить расходы: с $13 000 до $4500 на автомат.
В каких случаях серверлесс архитектура не подходит?
Серверлесс архитектура не подходит, если:
-
Приложение пользуется высоким предсказуемым спросом. Наверняка будет более рентабельным решением запустить несколько контейнерных сервисов и добавить несколько экземпляров.
-
Долгосрочные задачи. Если продукт использует какие-то операции, выполнение которых займет больше 10 минут, то сервелесс functions могут стать не самым разумным выбором.
-
Высокий уровень контроля. Абстрагирование базовой инфраструктуры выглядит привлекательно, но оно ограничивает контроль над контекстом обработки. То есть сервелесс architecture менее подходит для случаев, требовательных к памяти или вычислительным ресурсам.
-
Нет уверенности в требованиях. Со временем сервелесс программы могут разрастаться, в этом случае лучшим решением будет начать с создания монолита.
Инструменты и технологии для серверлесс архитектуры
Serverless Framework
Serverless Framework — инструмент с открытым исходным кодом для упрощения разработки, развертывания и управления программным продуктом.
Инструмент работает с облачными платформами (AWS, Azure, IBM Cloud, Node.js) и интегрируется с CI/CD-системами (Jenkins или Travis), а также обладает большой базой плагинов и позволяет создавать свои.
AWS Lambda и FaaS
AWS Lambda (Amazon Web Services) — этот инструмент стал первым в мире бессерверным инструментом облачных вычислений, который можно легко интегрировать с другими functions AWS Step.
Пакет LambCI можно загрузить в AWS Lambda, чтобы перевести CI в сервелесс среду. Он срабатывает, когда новый код или существующие запросы отправляют на GitHub. С помощью LambCI разработчики могут легко запускать и поддерживать актуальность данных в виде стека Cloud Formation илисоздавать самостоятельно различные ресурсы.
LambCI может запускать тысячу одновременных сборок, что повышает продуктивность по сравнению с такими инструментами, как Travis. Из недостатков можно отметить отсутствие root-доступа и ограниченность поддержки Linux.
OpenFaaS — серверный фреймворк с открытым исходным кодом, использует создание functions на различных языках: Python, Go, Java, Javascript (js). Умеет масштабировать функции и обеспечивает устойчивость к отказам, интегрируется с Kubernetes и Docker Swarm.
Использование Terraform для управления инфраструктурой
Terraform — инструмент управления serverless framework как кодом. Terraform позволяет определять модули с использованием файлов в формате HCL, в которых указываются не шаги для достижения инфраструктуры, а желаемое ее состояние.
Terraform поддерживает многие популярные облачные провайдеры и позволяет определять модули, которые могут быть использованы повторно для создания и управления компонентами.
Современное программирование требует оперативного внедрения новых functions, сервелесс помогает быстро разрабатывать и тестировать новые фичи.