Смомента выпуска AWS Lambda в 2014 году вычисления без сервера стали крупным явлением в области «облачного» развертывания приложений, в первую очередь благодаря снижению затрат. Однако за всеобщим энтузиазмом в отношении платформ без сервера легко упустить одно обстоятельство: хотя большинство современных решений без сервера выполняются в «облаке», можно работать без сервера и локально.

Давайте выясним, почему иногда полезно запускать функции без сервера локально (https://www2.deloitte.com/content/dam/Deloitte/tr/Documents/technology-media-telecommunications/Serverless%20Computing.pdf) и как это можно сделать.

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

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

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

Вычисления без сервера в «облаке»

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

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

«Облачные» среды FaaS преобладали на рынке вычислений без сервера, поэтому многие ИТ-специалисты рассматривают «облако» как ключевой компонент при построении архитектур без сервера. Однако функции без сервера можно запускать по требованию с использованием локальной инфраструктуры, а не «облачной» службы.

Такой подход нельзя отнести к FaaS, поскольку вы не будете запускать функции без сервера как размещенную службу в «облаке». Но вам не обязательно размещать свои функции на чужой инфраструктуре для вычислений без сервера. Можно разместить код приложения на локальном сервере, работающем в вашем центре обработки данных, а затем запускать его по требованию в ответ на внешние события или триггеры. Это и есть локальные вычисления без сервера.

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

Меня могут спросить: «Если разместить функции без сервера на серверах, которые моя компания обслуживает самостоятельно, то в чем смысл локальных вычислений без сервера? В чем выгода, если мне все равно придется настраивать серверы для размещения функций без сервера?»

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

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

Локальные платформы без сервера

На сегодня существует две категории готовых для производственной деятельности платформ для локальных вычислений без сервера. К первой относятся платформы, в которых Kubernetes используется в качестве основы для развертывания функций без сервера в локальной среде. Во многих случаях эти платформы работают и в «облаке». Примерами могут служить OpenFaaS (https://www.openfaas.com/) и Kubeless (https://github.com/kubeless/kubeless).

Ко второй категории относятся автономные платформы без сервера, которые не зависят от другой инфраструктуры. Apache OpenWhisk (https://openwhisk.apache.org/) — самый известный инструмент этой категории. Разработанный компанией IBM, OpenWhisk предоставляет основу для «облачной» FaaS (https://www.ibm.com/cloud/functions), но OpenWhisk — инструмент с открытым кодом, который можно развернуть и с использованием локальной инфраструктуры.

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