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

Завершено

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

PaaS перекладывает некоторые обязанности на поставщика облачных служб, и это также способствовало росту популярности облаков. Благодаря таким службам, как AWS Elastic Beanstalk и Служба приложений Azure, клиенты могут подготавливать виртуальные веб-серверы с популярными средами выполнения, например Java, Node.js и Microsoft .NET, а также запускать программное обеспечение на них за считаные минуты. В то время как виртуальные машины выполняют всю тяжелую работу, они в значительной степени являются абстрактными. PaaS позволяет клиентам сосредоточиться на приложениях для решения бизнес-задач и не тратить время на управление виртуальными машинами и обновление платформ.

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

Вы можете воспользоваться подходом IaaS, создав одну или несколько виртуальных машин для выполнения кода и установив необходимые платформы и библиотеки. Вы можете подготовить Elastic Beanstalk или экземпляр службы приложений и разместить там код. Или вы можете использовать среду выполнения функций, например AWS Lambda или Функции Azure, для выполнения кода в любое время независимо от места его размещения. AWS Lambda и Функции Azure — это примеры бессерверных вычислений (а именно бессерверных функций), как и Google Cloud Functions. Все три представляют следующий шаг в естественном развитии облачных вычислений от IaaS, где вы несете ответственность за все, до бессерверных вычислений, где вы занимаетесь действиями, которые необходимо совершить (код, который нужно выполнить) в облаке, и позволяете поставщику облачной службы управлять остальным.

Бессерверные функции, выполняемые средами выполнения функций в облаке, являются наиболее распространенной формой бессерверных вычислений, но не единственной. Amazon, Microsoft и Google предлагают бессерверные версии некоторых других служб PaaS, включая бессерверные базы данных. Некоторые поставщики предлагают поддержку для бессерверных рабочих процессов, которые позволяют определять бизнес-процессы в облаке и выполнять их в ответ на внешние события, такие как счета, отправляемые в облачное хранилище, таймеры, которые срабатывают через определенные интервалы, или поступающие сообщения электронной почты — часто без написания кода. Наконец, многие службы контейнеров, предлагаемые поставщиками облачных служб, включая службы Экземпляры контейнеров Azure и AWS Elastic Container Service, являются примерами бессерверных вычислений, так как позволяют запускать контейнеры в облаке, абстрагируясь от базовой инфраструктуры.

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

Бессерверные вычисления имеют три основных преимущества для организаций, использующих облачные вычисления:

Более низкие затраты на вычисления: клиенты обычно платят ежемесячные платежи за виртуальные машины IaaS и службы PaaS, такие как Elastic Beanstalk и приложение Azure Service. Счета выставляются, даже если службы бездействуют. Однако большинство служб бессерверных вычислений поддерживают плату за потребление, когда вы платите только за время выполнения кода. Представьте, что вы выделяете виртуальную машину стоимостью 100 долларов в месяц для выполнения кода, который осуществляет ночное резервное копирование критически важных данных и выполняется всего 30 минут каждую ночь. Вы платите 100 долларов в месяц за выполнение кода в течение 1/48 месяца, то есть менее одного дня. Если развернуть тот же код как бессерверную функцию, вы будете платить всего несколько долларов в месяц. При плате за потребление вы не оплачиваете время простоя.

Автоматическая масштабируемость: поставщики облачных служб предлагают механизмы масштабирования служб IaaS в таких продуктах, как AWS Auto Scaling и масштабируемые наборы виртуальных машин в Azure. Они также предоставляют возможности ручного и автоматического масштабирования для служб PaaS. Но даже если масштабирование выполняется автоматически, администратор облака должен включить автоматическое масштабирование и настроить его таким образом, чтобы поставщик облачных служб знал, как и когда должно выполняться масштабирование. Один из основных факторов, который следует учитывать администраторам, заключается в том, что, поскольку вы платите за отдельные экземпляры служб IaaS и PaaS, вам нужно настроить службу для достаточного, но не чрезмерного масштабирования. Бессерверные вычисления обеспечивают возможность прозрачного и автоматического увеличения горизонтального масштаба в соответствии с ростом спроса и уменьшения горизонтального масштаба при падении спроса. Администратор облака обычно не выполняет настройку, кроме включения этого параметра в службе. Если вы получаете 100 запросов за раз для выполнения бессерверной функции, поставщик облачных служб гарантирует, что запросы могут выполняться параллельно (или в основном параллельно). Это не влияет на затраты, так как при оплате за потребление вы платите за выполнение функции 100 раз независимо от того, является ли выполнение последовательным или параллельным.

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

Бессерверные вычисления также имеют свои недостатки. Ниже перечислены некоторые ограничения, которые следует учитывать:

  • Некоторые среды выполнения функций накладывают ограничение на количество времени, в течение которого может выполняться функция.

  • Некоторые среды выполнения функций не гарантируют, что функция будет выполняться немедленно, если вы не готовы платить за это дополнительно. С помощью Функций Azure с оплатой за потребление, например, функция может не выполняться до 10 минут после активации. Это может быть приемлемо для ночного резервного копирования. Возможно, вам не важно, произойдет это в 01:00 или в 1:10. Но это может иметь решающее значение, если время является критическим фактором, например, для функций, которые должны выполняться в реальном времени (или почти в реальном времени).

  • Бессерверные функции обычно не имеют состояния, то есть не могут хранить данные в себе, и данные не сохраняются между вызовами функции. Они могут использовать внешние облачные службы хранилища, такие как Amazon S3 и Служба хранилища Azure, для сохранения данных между вызовами, но это усложняет код функции.

Некоторые поставщики облачных служб предлагают поддержку функций с отслеживанием состояния (Azure называет их "устойчивые функции"), но функции, сохраняющие состояние, являются относительно недавним дополнением к бессерверным вычислениям и не поддерживаются везде.

Бессерверные функции

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

На рис. 11 перечислены языки программирования, поддерживаемые бессерверными функциями в Azure, AWS и GCP на момент написания этой статьи:

Язык Функции Azure AWS Lambda Google Cloud Functions
C# x x
F# x
Go x x
Java x x
JavaScript (Node.js) x x x
PowerShell x x
Python x x x
Ruby x
TypeScript x

Рис. 11. Языки программирования, поддерживаемые популярными средами выполнения бессерверных функций.

Когда вы создаете функцию и предоставляете код, который она будет выполнять, вы также определяете внешнее событие, которое вызывает выполнение этой функции. Популярные облачные платформы поддерживают триггеры различных типов, включая таймеры, события, происходящие в других облачных службах (например, документ, отправляемый в облачное хранилище), и HTTP-вызовы. Достаточно отправить код выставления счетов в среду выполнения функции и настроить ее на выполнение раз в день, раз в неделю или раз в месяц. Так же просто активировать функцию каждый раз при отправке счета в облачное хранилище (например, Amazon S3 или Служба хранилища Azure) или каждый раз, когда в конечную точку REST, связанную с функцией, поступает вызов.

Бессерверные функции часто используются для выполнения изолированных задач, таких как ночное резервное копирование и выставление счетов. Они также используются для подключения других облачных служб и создания мощных решений с помощью облачных служб в качестве составных элементов. На рисунке 12 представлено такое решение, которое используется, чтобы объединить несколько служб Azure для мониторинга белых медведей в Арктике. Функция Azure играет ключевую роль в архитектуре, принимая выходные данные из Azure Stream Analytics (активированные вызовом HTTP), получая фотографию из хранилища BLOB-объектов Azure и отправляя фотографию в модель, обученную с помощью службы пользовательского визуального распознавания Azure, которая использует искусственный интеллект (ИИ), чтобы определить, содержит ли фотография белого медведя. Функция является связующим звеном для Stream Analytics, хранилища BLOB-объектов и службы пользовательского визуального распознавания.

Рис. 12. Использование функции Azure для подключения к другим службам Azure.

Рис. 12. Использование функции Azure для подключения других служб Azure.

Бессерверные рабочие процессы

Некоторые службы бессерверных вычислений позволяют клиентам автоматизировать бизнес-процессы без написания кода. Например, Azure Logic Apps предоставляет более 100 встроенных соединителей для взаимодействия с источниками данных от баз данных Oracle до служб социальных медиа, таких как X. Они предоставляют триггеры для определения того, когда рабочие процессы должны выполняться, например, когда файл отправляется в Box.com или что-то чирикается с указанным хэштегом. Они также предоставляют сотни предустановленных действий, которые определяют, что происходит при срабатывании триггера, и могут быть объединены в цепочку для формирования сложных рабочих процессов, а также условий, позволяющих выполнять действия условно. И их можно бесконечно расширять, так как одно из действий, которые поддерживает Azure Logic Apps, вызывает функцию Azure. Если рабочий процесс включает в себя пользовательскую логику, которая не инкапсулирована в действии, можно предоставить код, реализующий эту логику, и включить его в рабочий процесс так, как если бы он был предопределенным действием.

На рисунке 13 показан такой рабочий процесс в конструкторе Azure Logic Apps1. Когда приходит сообщение электронной почты, приложение логики начинает действовать и проверяет ключевую фразу в строке темы сообщения электронной почты и наличие вложений. Если удовлетворяются оба условия, приложение логики вызывает функцию Azure для удаления любого HTML-кода из текста сообщения электронной почты. Затем оно помещает обработанное электронное письмо и все вложения в хранилище BLOB-объектов Azure и отправляет сообщение электронной почты со ссылками на соответствующие документы в хранилище BLOB-объектов, уведомляя заинтересованных лиц о том, что информация доступна и ожидает просмотра. В этом примере объединяются две бессерверных парадигмы — приложение логики, которое выполняет действия без кода (во всяком случае, без написанного вами кода), и функция Azure, содержащая код, предоставленный для настройки рабочего процесса. Это свидетельствует об изменениях, которые происходят в облачных вычислениях, — раньше вы сами создавали и настраивали виртуальные машины, а теперь вам доступны высокоуровневые абстракции, которые позволяют организациям сосредоточиться на решении бизнес-задач, а не управлении виртуальными машинами, а также установке и обслуживании сред выполнения.

Рис. 13. Определение рабочего процесса в Azure Logic Apps.

Рис. 13. Определение рабочего процесса в Azure Logic Apps.

Amazon предлагает аналогичную службу в виде AWS Step Functions. С помощью Step Functions можно создавать визуальные рабочие процессы, сочетающие другие службы, такие как AWS Lambda и AWS ECS. Рабочие процессы состоят из ряда шагов, а выходные данные одного этапа служат входными данными для следующего. Как и Azure Logic Apps, AWS Step Functions предоставляют примитивы для ветвления и параллельного выполнения, что позволяет не писать код для тех же действий. Фактически бизнес-процесс становится диаграммой конечного автомата, которую легко понять, легко объяснить другим пользователям и легко изменить.

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

На ранних этапах облачных вычислений размещение базы данных в облаке означало подготовку виртуальной машины и установку продукта базы данных, например MySQL, PostgreSQL или SQL Server. PaaS изменил это, предлагая базы данных как службу. Например, для базы данных SQL Azure или службы реляционной базы данных Amazon (RDS) вы просто предоставляете экземпляр, и в течение нескольких минут у вас есть база данных, размещенная в облаке и готовая для обслуживания клиентов. Кроме того, поставщик облачных служб постоянно обновляет платформу баз данных, применяя обновления и исправления программного обеспечения.

Одна из последних инноваций в облачных вычислениях — бессерверные базы данных, которые предлагают оптимизированную модель сочетания цены и производительности, идеально подходящую для отдельных баз данных с неравномерным использованием. Например, Azure предлагает бессерверную версию базы данных SQL Azure. С помощью основной версии базы данных SQL Azure вы выбираете уровень сочетания цены и производительности, основанный на максимальной нагрузке, которая ожидается для базы данных. Если нагрузка имеет пики или является прерывистой, часто приходится платить так, как если бы база данных постоянно находилась под высокой нагрузкой.

Бессерверная версия Базы данных SQL Azure решает эту проблему, масштабируя базу данных по мере необходимости в зависимости от нагрузки, а стоимость складывается из расходов на вычисления и расходов на хранение. Как и в случае бессерверных функций, использующих модель потребления, вы платите только за то, что используете. Amazon предлагает аналогичную службу в виде AWS Aurora Serverless, которая является бессерверной версией службы базы данных Amazon Aurora, а Google предлагает своим клиентам бессерверную службу базы данных NoSQL, известную как Google Cloud Firestore.

Ссылки

  1. Майкрософт (2019). Автоматизация обработки сообщений электронной почты и вложений с помощью Azure Logic Apps. https://learn.microsoft.com/azure/logic-apps/tutorial-process-email-attachments-workflow.

Проверьте свои знания

1.

Какой из приведенных ниже сценариев НЕ требует использования бессерверных вычислений?