Что такое бессерверное? Объяснение бессерверных вычислений

Разработчики тратят бесчисленные часы на решение бизнес-задач с помощью кода. Затем настала очередь оперативной группы тратить бесчисленные часы, во-первых, выясняя, как получить код, который разработчики пишут и запускать на любых доступных компьютерах, а во-вторых, чтобы убедиться, что эти компьютеры работают без сбоев. Вторая часть действительно нескончаемая задача. Почему бы не оставить эту часть кому-нибудь другому?

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

Что такое бессерверные вычисления?

Бессерверные вычисления - это модель выполнения для облака, в которой поставщик облачных услуг динамически выделяет - а затем взимает с пользователя плату - только вычислительные ресурсы и хранилище, необходимые для выполнения определенного фрагмента кода. Естественно, серверы все еще задействованы, но их обеспечение и обслуживание полностью берет на себя провайдер. Крис Маннс, сторонник бессерверной архитектуры Amazon, сказал на конференции 2017 года, что с точки зрения команды, пишущей и развертывающей код, «нет серверов, которыми можно было бы управлять или предоставлять вообще. Это не включает ничего, что было бы «голым металлом», ничего виртуального, ничего, что было бы контейнером - все, что связано с управлением хостом, исправлением хоста или работой с чем-либо на уровне операционной системы, не является тем, что вы должны делать в бессерверный мир ». 

Как объясняет разработчик Майк Робертс, этот термин когда-то использовался для так называемых сценариев back-end-as-a-service , когда мобильное приложение подключается к внутреннему серверу, полностью размещенному в облаке. Но сегодня, когда люди говорят о бессерверных вычислениях или бессерверной архитектуре, они имеют в виду предложения « функция как услуга» , в которых заказчик пишет код, который затрагивает только бизнес-логику, и загружает его поставщику. Этот провайдер берет на себя всю подготовку оборудования, управление виртуальными машинами и контейнерами и даже такие задачи, как многопоточность, которые часто встроены в код приложения.

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

Преимущества и недостатки бессерверных вычислений

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

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

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

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

Бессерверные поставщики: AWS Lambda, Azure Functions и Google Cloud Functions.

Современный век бессерверных вычислений начался с запуска AWS Lambda, платформы, основанной на облачном сервисе Amazon, в 2014 году. Microsoft последовала его примеру с Azure Functions в 2016 году. Google Cloud Functions, которая находилась в стадии бета-тестирования с 2017 года, наконец достигла статуса производства в июле 2018 г. Эти три службы имеют немного разные ограничения, преимущества, поддерживаемые языки и способы работы. Рохит Акиваткар имеет хорошее и подробное изложение различий между этими тремя. Также в разработке находится IBM Cloud Functions, основанная на платформе Apache OpenWhisk с открытым исходным кодом.

Среди всех платформ бессерверных вычислений AWS Lambda является самой заметной и, очевидно, имела больше всего времени для развития и развития. освещает обновления и новые функции, добавленные в AWS Lambda за последний год.

Бессерверные стеки

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

Хотя вы можете комбинировать и сопоставлять различные конкретные предложения в каждой из этих категорий, существуют ограничения в зависимости от того, какого поставщика вы используете, с некоторым совпадением. Например, для языков вы можете использовать Node.js, Java, Go, C # и Python на AWS Lambda, но только JavaScript, C # и F # работают с функциями Azure. Что касается триггеров, у AWS Lambda самый длинный список, но многие из них относятся к платформе AWS, например Amazon Simple Email Service и AWS CodeCommit; Между тем, облачные функции Google могут запускаться общими HTTP-запросами. Пол Яворски подробно рассматривает стеки для каждого из трех крупных предложений.

Бессерверные фреймворки

Стоит немного задержаться на рамочной части уравнения, поскольку это во многом определит то, как вы в конечном итоге создадите свое приложение. У Amazon есть собственное собственное предложение, модель бессерверных приложений с открытым исходным кодом (SAM), но есть и другие, большинство из которых кроссплатформенные, а также с открытым исходным кодом. Один из самых популярных, в общем, называется бессерверным, и подчеркивает, что он обеспечивает одинаковый опыт для каждой поддерживаемой платформы, то есть AWS Lambda, Azure Functions, Google Cloud Functions и IBM OpenWhisk. Еще одно популярное предложение - Apex, которое может помочь вывести некоторые языки, которые в противном случае недоступны для определенных поставщиков.

Бессерверные базы данных

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

Некоторые из этих баз данных сами называются бессерверными. Это означает, что они ведут себя так же, как и другие бессерверные функции, которые мы обсуждали в этой статье, за тем очевидным исключением, что данные хранятся неограниченное время. Но большая часть накладных расходов на управление, связанных с подготовкой и обслуживанием базы данных, отбрасывается. Как выразился разработчик Джереми Дейли: «Все, что вам нужно сделать, это настроить кластер, после чего все обслуживание, исправление, резервное копирование, репликация и масштабирование выполняются автоматически». Как и в случае предложений «функция как услуга», вы платите только за фактически используемое вычислительное время, а ресурсы увеличиваются и уменьшаются по мере необходимости для удовлетворения спроса.

Каждый из трех крупных бессерверных провайдеров предлагает свои собственные бессерверные базы данных: у Amazon есть Aurora Serverless и DynamoDB, у Microsoft есть Azure Cosmos DB, а у Google есть Cloud Firestore. Однако это не единственные доступные базы данных. Неманья Новкович имеет информацию о других предложениях.

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

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

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

Бессерверный офлайн

Перспектива начать работу с бессерверными вычислениями может показаться вам немного пугающей, так как кажется, что вам нужно зарегистрироваться у поставщика, чтобы поиграть и посмотреть, как это работает. Но не бойтесь: есть способы запускать бессерверный код в автономном режиме на вашем собственном локальном оборудовании. Например, AWS SAM предоставляет локальную функцию, которая позволяет тестировать Lambda-код в автономном режиме. А если вы используете платформу бессерверных приложений, попробуйте serverless-offline, плагин, который позволяет запускать код локально. Удачных экспериментов!