Чем бессерверные вычисления отличаются от виртуальных машин

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

Содержание статьи:

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

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

Термин «бессерверные вычисления» не стоит воспринимать буквально: все вычисления по-прежнему выполняют серверы, просто речь идет о подходе к предоставлению сервисов в виде функций — Function as a Service (FaaS). Функции предполагают разделение кода на строительные блоки, которые запускаются в ответ на настроенные события и выполняют задачу, которая прописана в коде. При этом пользователь не видит серверов при создании таких функций, и в этом смысле инфраструктура считается бессерверной.

Бессерверные вычисления как сервис появились на рынке в 2014 году, когда Amazon выпустил AWS Lambda. Американские облачные провайдеры проводили исследования, которые показали, что к 2022 году почти половина респондентов используют в работе бессерверные вычисления. Но это в Америке, Канаде, Европе.

В России глубокого анализа бессерверных вычислений в открытом доступе нет. Но есть исследование облачной зрелости российского рынка в целом. Результаты этого исследования говорят, что только 16% респондентов внедрили бессерверные сервисы.

<p>По исследованию облачной зрелости российского рынка в 2022 году только 1 из 6 компаний использует бессерверные сервисы в своей работе </p>

По исследованию облачной зрелости российского рынка в 2022 году только 1 из 6 компаний использует бессерверные сервисы в своей работе

Цифры из исследования облачной зрелости и комментарии в интернете создают впечатление, что в России пока не верят в этот инструмент и сомневаются в его работоспособности.

Чем бессерверные вычисления отличаются от виртуальных машин

Чем бессерверные вычисления отличаются от виртуальных машин

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

Стандартные сценарии для бессерверных вычислений:

  • асинхронная отправка push, sms или email-сообщений;
  • импорт и экспорт данных;

  • роботы чат-ботов и виртуальных помощников.

Оплата за виртуальную машину начисляется за время владения: если арендовать машину на 24 часа и использовать ее только 30 минут, оплата будет все равно за сутки. Стоимость самой слабой виртуальной машины начинается от 618 руб.

Тарификация бессерверной функции складывается из места, которое она занимает, и времени выполнения кода с учетом производительности. Средний вес функции — несколько десятков килобайт, среднее время выполнения — несколько секунд. Сколько будет длиться время выполнения, зависит от установленных пользователем ограничений и сложности функции: обычно это 1—10 секунд. До 2 млн вызовов функции в месяц будет стоить несколько копеек.

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

Виртуальную машину надо администрировать: мониторить нагрузку и объем оставшегося свободного места на диске, следить за безопасностью. С бессерверными вычислениями все эти вопросы становятся ответственностью провайдера.

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

3 сценария эффективного использования бессерверных вычислений

Отправка сообщений о событиях в облаке

Информация о том, что происходит в облаке, хранится в WAF, Web Application Firewall. Эти события должны попадать в центр безопасности, чтобы их можно было проанализировать на вторжение. Для этого можно взять данные из системного топика в облаке, настроить триггер на событие в топике и отправлять сообщение из бессерверной функции в syslog-сервер, в котором будет храниться информация.

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

Если событий за месяц не накопится 2 миллиона — такая инсталляция будет стоить несколько рублей.

<p>Если сервис мониторинга зафиксировал аварийное событие, то сигнал поступит в сервис уведомлений и админ получит сообщение на почту. Сигнал в сервисе уведомлений — триггер для запуска бессерверной функции, чтобы сообщение о событии ушло еще в мессенджер </p>

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

Чат-бот или виртуальный помощник

Когда человек пишет чат-боту в Telegram, с сервера социальной сети в облако отправляется уведомление о том, что пришло сообщение. Это событие становится триггером для бессерверной функции: она берет преднастроенный ответ и отправляет его обратно в чат.

Если сообщений за месяц не накопится 2 миллиона — такая инсталляция будет стоить несколько рублей.

<p>Когда человек пишет чат-боту, сервер социальной сети получает сигнал и через вебхук и API отправляет его в облако. Эта цепочка запускает бессерверную функцию: ответное сообщение отправляется через сервер в чат </p>

Когда человек пишет чат-боту, сервер социальной сети получает сигнал и через вебхук и API отправляет его в облако. Эта цепочка запускает бессерверную функцию: ответное сообщение отправляется через сервер в чат

Операции с файлами в хранилище

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

Если операций за месяц не накопится 2 миллиона — такая инсталляция будет стоить несколько рублей.

<p>Загрузка файла в объектное хранилище — триггер для срабатывания бессерверной функции, чтобы провести настроенную операцию с файлом</p>

Загрузка файла в объектное хранилище — триггер для срабатывания бессерверной функции, чтобы провести настроенную операцию с файлом

Мнения: правда и заблуждения о бессерверных вычислениях

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

Нет механизмов защиты от астрономических счетов

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

Нет контроля над вычислительными ресурсами

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

Риск попасть в зависимость от поставщика

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

Проблема «холодного запуска»

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

Грамотных людей и так мало, а грамотных в бессерверных функциях вообще нет

Правда. Но можно обратиться к провайдеру за гайдом или готовым сценарием.

Поддержка определенных языков программирования

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

Хранение данных в общем облаке

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

Расскажите, как используете бессерверные вычисления? Если не используете, что останавливает?

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

66