Бессерверные вычисления
Serverless Computing
Бессерверные вычисления (англ. serverless computing) — стратегия организации платформенных облачных услуг, при которой облако автоматически и динамически управляет выделением вычислительных ресурсов в зависимости от пользовательской нагрузки. Основная задача такой стратегии — реализация шаблона «функция как услуга», при котором для выполнения каждого запроса (вызова функции) создается отдельный контейнер или виртуальная машина, уничтожающиеся после выполнения.
Содержание |
Главным достоинством бессерверных вычислений является предоставляемая ими возможность развертывания управляемой событиями архитектуры.
В бессерверных вычислениях такие функции, как масштабирование, планирование производительности и обслуживание операций, выполняются автоматически. Обычно этим занимаются провайдеры публичных облаков. Поэтому теоретически разработчики могут посвятить себя только написанию или интеграции кода для решения проблем бизнеса.
Наименование связано с тем, что пользователям в этой стратегии не нужно иметь дело с выделением и настройкой «серверов» (как инфраструктурных единиц — виртуальных машин, контейнеров, так и программных серверов — серверов баз данных, серверов приложений, экземпляров сред выполнения): все настройки и планирование вычислительных ресурсов, необходимые для запуска кода по требованию или по событию, скрыты от пользователей и управляются облаком. Бессерверный код может быть частью приложений, построенных на традиционной архитектуре, например, на микросервисах.
Amazon Web Services считается лидером в этой области. Менее популярны Microsoft Azure и Google Cloud Platform.
Стратегия реализована в основных платформах FaaS: AWS Lambda, Google Cloud Functions, Apache OpenWhisk и основанном на ней сервисе IBM Cloud, Azure Functions в облаке Microsoft, сервисе Fn от Oracle. Кроме того, в конце 2010-х годов стратегия получила распространение в реализациях облачных [СУБД], таковы, например, Microsoft Azure Data Lake (работает в Microsoft Azure и динамически выделяет и высвобождает вычислительные ресурсы, работая с данными в сервисе постоянного хранения), Snowflake (работающая с данными в S3 и создающая вычислительные экземпляры по мере нагрузки), FaunaDB.
Преимущества бессерверных вычислений
Бессерверные вычисления относятся к архитектуре, в которой приложения (или части приложений) выполняются по запросу в специализированных средах. Обычно они располагаются в облаке, хотя бессерверные вычисления также могут работать в локальной среде[1].
Основные потенциальные преимущества бессерверных вычислений заключаются в следующем:
- бессерверные вычисления лишают пользователя необходимости поддерживать полную среду операционной системы для запуска бессерверного кода (отсюда и термин «бессерверный»). Все, что им требуется, только загрузить код, настроить условия, которые инициируют его запуск, и затем остальная работа будет выполняться бессерверной системой;
- применяя облачные бессерверные среды, пользователь платит только за время, когда его код реально работает. Это более выгодно, чем традиционная модель ценообразования для облачных виртуальных машин (ВМ), где он должен постоянно платить за то, чтобы поддерживать виртуальные серверы в рабочем состоянии, даже если они какое-то время простаивают;
- serverless-код запускается очень быстро, что позволяет легко развернуть большее количество экземпляров, если требуется масштабировать определенные задачи. Таким образом, Serverless отлично подходит для ситуаций, где приоритетами являются высокаяпроизводительность или масштабируемость.
В теории преимущества бессерверной системы сводятся к тому, чтобы сделать развертывание приложений более быстрым, гибким, экономичным и масштабируемым.
Ограничения Serverless
К сожалению, Serverless так и не удалось в полной мере раскрыть свой потенциал. Не подлежит сомнениям, что бессерверные модели выполнения могут сделать код более масштабируемым, что упрощает управление ими для пользователя. В некоторых случаях они повышают эффективность затрат. Однако эти преимущества нивелируются рядом ограничений, что снижает значимость этой технологии.
1. Serverless поддерживает только определенные языки программирования
Большинство бессерверных фреймворков позволяют развертывать функции, написанные только на определенных языках. Правда они поддерживают большинство основных языков. Некоторые из них, например AWS Lambda и Azure Functions, также предоставляют т. н. «декораторы» (wrapper function), которые позволяют запускать функции, написанные на неподдерживаемых языках. Однако это влияет на производительность, к тому же для включения функций требуется дополнительная настройка системы.Гид по NGFW. 10 наиболее заметных продуктов, доступных на российском рынке
Отсутствие универсальной прямой поддержки serverless-функций, написанных на любом языке, накладывает существенные ограничения на варианты использования бессерверных вычислений. В итоге при выборе бессерверного варианта развертывания разработчик зависит от наличия кода на требуемом для него языке, но последний может не входить в число поддерживаемых. Еще более усложняет ситуацию тот факт, что бессерверные платформы поддерживают различные наборы языков, что в некоторых случаях затрудняет миграцию между ними.
2. Бессерверные фреймворки каждого производителя обладают собственной спецификой
В подавляющем большинстве бессерверные платформы являются проприетарными, то есть обладают собственной спецификой, которая зависит от производителя. Такая ситуация сложилась, поскольку разработчики уделяли мало внимания созданию стандартов для написания, развертывания и управления функциями, особенно по сравнению с другими облачными технологиями, такими как контейнеры (которые выиграли от разработки и широкого внедрения сильных стандартов, продвигаемых сообществом разработчиков).
Из-за этого конкретные способы создания, развертывания, обновления и мониторинга бессерверных функций для разных платформы — разные. Это ограничение вдобавок с дополнительными затратами на время обучения бессерверным функциям еще на порядок усложняет миграцию на Serverless. Таким образом, если бессерверные вычисления и обладают маневренностью и гибкостью, то пока что лишь в теории.
3. «Холодные» бессерверные функции снижают производительность
Фундаментальным ограничением бессерверных архитектур является то, что запуск «холодных» функций, то есть тех, которые не запускались на протяжении длительного времени, занимает дополнительное время. Время холодного старта может составлять всего несколько секунд, но в высокопроизводительных средах, когда счет идет на миллисекунды — это вечность. Надежного способа обойти эту проблему не существует. Один из них состоит в том, чтобы периодически запускать функции — это гарантирует, что они останутся «теплыми», но вместе с тем это приводит к ненужным затратам и сводит на нет одно из основных преимуществ бессерверной системы — взимать плату только тогда, когда есть действительная необходимость в запуске рабочего кода. Конечно, время запуска функции можно оптимизировать, но этого явно недостаточно. Другими словами, проблемы, связанные с холодным запуском, означают, что высокая производительность, которую предлагают бессерверные вычисления, достижима только при определенных условиях.
4. Вы не можете сделать бессерверное приложение целиком бессерверным
Еще один недостаток бессерверной модели заключается в том, что в большинстве случаев она не позволяет полностью развернуть приложение. Запускать все в бессерверной среде — нецелесообразно или экономически невыгодно, поэтому эта модель предполагает способ запускать в ней определенные части приложения, которым постоянно требуется высокая производительность и значительные вычислительные ресурсы. Serverless не похожа на контейнеры или виртуальные машины, которые предлагают целостные способы развертывания приложения на целевой платформе. Это скорее расширение, которое работает вместе с контейнерами или виртуальными машинами. Можно сказать, что бессерверное решение — это способ дополнить другие типы архитектур приложений. Таким образом, Serverless — не универсальная архитектура, что ограничивает варианты ее применения.