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

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

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

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

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

  • бессерверные вычисления лишают пользователя необходимости поддерживать полную среду операционной системы для запуска бессерверного кода (отсюда и термин «бессерверный»). Все, что им требуется, только загрузить код, настроить условия, которые инициируют его запуск, и затем остальная работа будет выполняться бессерверной системой;
  • применяя облачные бессерверные среды, пользователь платит только за время, когда его код реально работает. Это более выгодно, чем традиционная модель ценообразования для облачных виртуальных машин (ВМ), где он должен постоянно платить за то, чтобы поддерживать виртуальные серверы в рабочем состоянии, даже если они какое-то время простаивают;
  • serverless-код запускается очень быстро, что позволяет легко развернуть большее количество экземпляров, если требуется масштабировать определенные задачи. Таким образом, Serverless отлично подходит для ситуаций, где приоритетами являются высокая производительность или масштабируемость.

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

Ограничения Serverless

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

1. Serverless поддерживает только определенные языки программирования

Большинство бессерверных фреймворков позволяют развертывать функции, написанные только на определенных языках. Правда они поддерживают большинство основных языков. Некоторые из них, например AWS Lambda и Azure Functions, также предоставляют т. н. «декораторы» (wrapper function), которые позволяют запускать функции, написанные на неподдерживаемых языках. Однако это влияет на производительность, к тому же для включения функций требуется дополнительная настройка системы.

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

2. Бессерверные фреймворки каждого производителя обладают собственной спецификой

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

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

3. «Холодные» бессерверные функции снижают производительность

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

4. Вы не можете сделать бессерверное приложение целиком бессерверным

Еще один недостаток бессерверной модели заключается в том, что в большинстве случаев она не позволяет полностью развернуть приложение. Запускать все в бессерверной среде — нецелесообразно или экономически невыгодно, поэтому эта модель предполагает способ запускать в ней определенные части приложения, которым постоянно требуется высокая производительность и значительные вычислительные ресурсы. Serverless не похожа на контейнеры или виртуальные машины, которые предлагают целостные способы развертывания приложения на целевой платформе. Это скорее расширение, которое работает вместе с контейнерами или виртуальными машинами. Можно сказать, что бессерверное решение — это способ дополнить другие типы архитектур приложений. Таким образом, Serverless — не универсальная архитектура, что ограничивает варианты ее применения.

Serverless — не технологическая новинка

Нужно также добавить, что Serverless — относительно старая идея. Концепция, позволяющая пользователям платить только за время, в течение которого выполняется код, существует с тех пор, как она была представлена в виде PaaS-проекта Zimki, бета-версия которого вышла в 2006 г. Пару лет спустя такое же решение предложил Google App Engine. Несмотря на это, говорить о Serverless как о переломном моменте в истории технологий стали только после дебюта AWS Lambda в 2014 г. На самом деле эта технология имеет более глубокие корни и она уж наверняка намного старше многих других технологий, которые мы называем облачными, таких как контейнеры и Kubernetes.

Выводы

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