Что такое функция как сервис (FaaS)?
![]()
Функция как сервис или FaaS (Function as a service) это относительно новомодный термин, которым определяется возможность бессерверного запуска кусков кода, что дает возможность разработчикам писать и обновлять эти куски кода на лету, которые будут запускаться в результате отклика на какое-нибудь событие, к примеру, когда пользователь нажмет на элемент в веб-приложении. Благодаря этому масштабировать код и внедрять микросервисы становится на порядок проще.

Что такое микросервисы?
Небольшая аналогия: представьте себе большое полотно от известного художника — в нашем случае это будет веб-приложением. А теперь представьте себе большое произведение искусства, которое составлено из кусочков мозаики — причем каждый кусочек можно достать, немного модернизировать и починить, что практически невозможно в случае цельного веб-приложения.
Такой подход к написанию приложения из набора модульных компонентов известен как микросервисная архитектура. Причем подобный подход довольно тепло воспринимается разработчиками, так как они могут создавать и модифицировать маленькие куски кода, которые относительно легко имплементировать в структуру приложения. Причем в монолитном приложении совершенно обратная ситуация, когда это приложение является огромной и экстремально сложной системой, где изменение одного из элементов может порушить его работу и процесс внесения изменения приближается по сложности к запуску шаттла. Таким образом, использование FaaS многократно снижает сложность внесения изменений и запуска нового кода, что дает возможность разработчикам сосредоточиться на самом коде, в то время как FaaS провайдер будет следить за нужным количеством вычислительных ресурсов и различных бэкэнд сервисов.
Какие плюсы такой технологии?
Увеличенная скорость разработки
С FaaS разработчики могут тратить больше времени на логику приложения и не думать о том, куда и как это приложение воткнуть, что как правило ведет к более высокой скорости написания и имплементации кода.
Bстроенная масштабируемость
Так как FaaS платформы сами по себе легко масштабируемы в автоматическом режиме, разработчикам не нужно думать о моментах, в которые производительность приложения может пострадать — например, в различные часы наибольшей нагрузки. Всю заботу о масштабируемости возьмет на себя облачный провайдер.
Оптимизация затрат
Знаете, какой самый большой страх пользователя облачных серверов? Что вы наберете кучу серверов, а необходимой нагрузки не будет, что повлечет за собой в пустую простаивающие мощности. Логично, что появилась такая модель как FaaS, которая позволяет заказчикам платить только за то время, когда вычислительные мощности действительно работают.
Какие минусы технологии FaaS?
Снижение степени контроля системы в общем
Учитывая, что всю заботу за железо, оркестрацию и прочее берет на себя провайдер, отладка кода и понимание цельной картинки может быть нетривиальной задачей — поэтому многие все еще предпочитают действовать по классической модели.
Процесс тестирования становится гораздо сложнее
Впихнуть невпихуемое, а именно микросервисное приложение (или целый комплект таких приложений) в локальное окружение для тестирование становится нетривиальной задачей, и часто начинают требоваться люди с нетривиальным опытом и экспертизой.
Как начать использовать FaaS?
Вам нужно начать переговоры с облачными провайдерами, которые предоставляют подобные сервисы — все просто. В первую очередь нужно будет понимать где будут располагаться ЦОДы провайдеры — так как в случае большого расстояния между ЦОДами могут начаться непрогнозируемые и странные проблемы. Список из таких провайдеров не велик, но всем хорошо знакомы эти имена: AWS (проект Lambda), Microsoft (Azure Functions) и Yandex Cloud Functions. Но в России выбор будет практически очевиден в пользу Яндекса, так как его сервера находятся ближе всего к нашей большой стране.
Компьютинг без серверов — что стоит за этим загадочным понятием?

С развитием облачных сервисов компьютинг становится все более похожим на коммунальную услугу, а потребителей перестает интересовать физическая серверная инфраструктура, которая выполняет вычисления.
Тема «компьютинг без серверов» (так можно перевести serverless computing) находится в левой части гартнеровской кривой технологических трендов 2017 года. Заметим, что из разумной предосторожности Gartner использует более скромный термин Serverless PaaS. Важное обстоятельство — позиция Serverless PaaS, отмеченная кружком зеленого цвета, предполагает перемещение serverless computing на стабильную правую сторону в ближайшие несколько лет.
По мнению аналитиков Gartner, хотя технология находится в зародыше, ее развитие и адаптация к практическому использованию потребует весьма ограниченного периода времени.
![]()
Название Serverless предложил в 2012 году Кен Фромм в статье «Why The Future Of Software And Apps Is Serverless» [1] .
Разобщенность мнений по поводу serverless computing отражает приведенная ниже картинка.
Выступающий: «Компьютинг без серверов – это круто!»
Скептический слушатель: «Почему бы им не назвать это дело просто удаленным вызовом процедуры?»

Такие суждения отражают повышенный интерес к serverless computing, сопровождающийся, как обычно в таких ситуациях, и излишне оптимистическими, и излишне пессимистическими оценками. От себя добавим, как говорится в известной притче про судью, его жену и двух женщин, делящих ребенка: «И ты женщина тоже права», а именно, есть третье мнение и оно тоже верное, serverless computing — круто, но не очень, и уж конечно это не удаленный вызов процедур.
Новый подход к предоставлению сервисов PaaS в виде функций
Говоря о serverless computing, нужно понимать, что на самом деле без физических виртуальных серверов не обойтись ни при каких условиях, значит речь идет не об отказе от «железа», а о новом подходе к предоставлению сервисов PaaS в виде функций. Этот сервис назвали FaaS (Function as a Service).

Под FaaS понимают такую категорию облачных сервисов, которая предоставляет платформу для разработки и выполнения приложений без какого-либо обременения, связанного с поддерживающей инфраструктурой. Пользователь не видит серверов, в этом смысле инфраструктуру можно считать бессерверной (serverless). Эта позиция напоминает малыша, который, закрывая глаза ладошками, думает, что он невидим. Российский рынок мобильных приложений для бизнеса и госсектора: крупнейшие игроки, тенденции и перспективы. Обзор TAdviser
Впервые сервисы FaaS были реализованы в 2014 году в проекте Open-Source Microservice Hosting Platform [2] . Вскоре появились сервисы Amazon AWS Lambda, в 2016 году — Google Cloud Functions, Microsoft Azure Functions, IBM/Apache’s OpenWhisk и в 2017 — Oracle Cloud Fn.
Hook.io представляет собой платформу с открытым кодом, поддерживающую хостинг микросервисов (microservice) и веб-перехватов (webhook hosting).
Микросервисы — это современный этап в развитии хорошо известной сервис-ориентированной архитектуры (SOA). Микросервисы представляют собой набор слабосвязанных компонентов, которые взаимодействуют по сети друг с другом для выполнения цели. Webhook — метод разработки веб-приложений с механизмом оповещения о событиях, происходящих на веб-страницах.
Serverless computing – разновидность облачных сервисов
В англоязычной википедии термин serverless computing совершенно справедливо отнесен к категории misnomer. Это удивительное по точности слово, к сожалению, не имеет адекватного перевода на русский. Приблизительно его можно интерпретировать как «ошибочное название», но скорее оно означает «распространенное заблуждение, с которым приходится мириться». В качестве примера подобных misnomer можно привести веб-сервисы, не имеющие отношения к Web, или «коммутационные фабрики», вообще ни как не связанные с фабриками.
Впрочем, остается удивляться тому, что очень хороший и великолепно соответствующий термин есть. Это utility computing, но по непонятной причине он постоянно остается невостребованным, хотя известен давным-давно. Еще в 1961 году Джон Маккарти, автор термина «искусственный интеллект» и изобретатель языка программирования LISP, сказал:
![]()
Джон Маккарти
Если бы Маккарти сказал только это, он уже был бы достоин памяти потомков, но он больше известен тем, что увлекся искусственным интеллектом и нагородил, как мы теперь понимаем, немало чепухи. Так в 1966 году в качестве задания студентам на лето он предложил создать такого робота, который бы смог собрать цветной телевизор из соответствующего комплекта деталей. Задание на лето — не меньше и не больше. Таково было его понимание сложности проблемы ИИ, отсюда безмерный оптимизм. В конечном счете телевизор был водружен туда, куда было задумано, но, увы, студенты собрали его вручную.
С остальными коммунальными услугами все проще. В них очевидно, что и как передается потребителю. А какова разумная форма предоставления услуг компьютинга? Самая банальная форма – IaaS. Вам предоставляется в пользование стандартная серверная инфраструктура или СХД.
Впрочем, исторически первой «двугорбой аббревиатурой» стала SaaS, выросшая из услуг, предлагаемых провайдерами ASP (Application Service Provider). Затем были DaaS, DBaaS, PaaS … — одним словом XaaS, то есть «все что угодно как сервисы». Все это – не что иное, как поиск форм для представления тех услуг, о которых Джон Маккарти писал полвека назад.
Форма предоставления ПО как сервисов – Software as a Service (SaaS) за годы своего существования серьезно изменилась. Она имеет три лица – контейнеры (CaaS), приложения (PaaS), к ним прибавляются функции (FaaS). Можно было бы на этом остановиться, но маркетологам по душе serverless computing. То есть FaaS есть ни что иное, как очередной шаг в сторону Utility computing.
В своих нынешних реализациях у платформ FaaS обнаруживается целый ряд ограничений: сложность организации параллельных вычислений, значительная задержка. Тем не менее FaaS можно рассматривать как очередной шаг по направлению к полноценной системе Utility computing и выразить уверенность, что через какое-то время будет сделан следующий шаг в том же направлении.
![]()
Эволюционные шаги в развитии IaaS и SaaS по направлению Utility computing
Качественное отличие FaaS от PaaS заключается в том, что предметом сервиса является не какое-то монолитное завершенное веб-приложение, а слабосвязанная распределенная по облаку система компонентов, позволяющая создавать архитектуры, работа которых подчинена событиям (event-based architecture). Такая система не привязана к каким-то физическим серверам и не ограничена по масштабированию (auto-scalable).
Содержательное введение в FaaS можно найти в материале «Serverless Architectures» Мартина Фаулера, известного популяризатора компьютерных знаний [3] .
Разработчикам будет полезна GitHub-страница компании nuclio «Serverless for Real-Time Events and Data Processing» [4] .
Примечания
- ↑Why The Future Of Software And Apps Is Serverless
- ↑Open-Source Microservice Hosting Platform
- ↑Serverless Architectures
- ↑Serverless for Real-Time Events and Data Processing
Функция как услуга: простыми словами о FaaS
Бессерверные вычисления позволяют разработчикам создавать и запускать приложения без необходимости управлять облачной инфраструктурой. Конечно, в бессерверных технологиях все еще применяются серверы, просто они абстрагированы от разработки приложений. Используя бессерверную модель, разработчики передают рутинную работу по подготовке, обслуживанию и масштабированию серверной инфраструктуры облачному провайдеру, а сами могут сосредоточиться на коде и развертывании.
Функция как услуга (FaaS) и бессерверная технология часто употребляются как взаимозаменяемые, но на самом деле эти два понятия синонимичны лишь условно. Бессерверные вычисления относятся к любой области, в которой сервер полностью абстрагирован от конечного пользователя. А FaaS — это подмножество бессерверных вычислений, ориентированное на триггеры, управляемые событиями, когда код запускается в ответ на события или запросы. Если управляемого событиями запроса нет, сервер отключается, высвобождая ресурсы для других запросов. После развертывания FaaS реагирует на спрос и автоматически масштабируется по мере необходимости. Как правило, если бессерверная функция простаивает, она ничего не стоит, что во многих ситуациях позволяет сэкономить деньги.
IaaS, PaaS и FaaS – в чем разница?
Инфраструктура как услуга (IaaS), платформа как услуга (PaaS) и функция как услуга (FaaS) — все они являются продуктами облачных вычислений. Разница между ними заключается в уровне абстракции между пользователем и инфраструктурой, который они обеспечивают.
IaaS предлагает самый низкий уровень абстракции. Благодаря IaaS пользователи имеют полный контроль над своей инфраструктурой, а также программным обеспечением и инструментами, связанными с их технологиями. При этом им не нужно управлять физической инфраструктурой (включая серверы без ПО или центры обработки данных). IaaS дает разработчикам возможность выбирать желаемые уровни абстракции. Они могут управлять всем самостоятельно или же добавить такие функции, как балансировщик нагрузки или даже управляемые сервисы, чтобы упростить обслуживание своего приложения (к примеру, некоторые провайдеры предлагают управляемые Kubernetes или базы данных).
PaaS добавляет еще один уровень абстракции для конечного пользователя. Благодаря PaaS разработчикам больше не нужно управлять операционной системой, средой выполнения или другими инфраструктурными компонентами приложения, но они по-прежнему будут иметь тонкий контроль над базовыми конфигурациями приложений и инфраструктуры. PaaS предоставляет полностью управляемое инфраструктурное решение для тех разработчиков, которые хотят быстро запускать приложения. Используя PaaS, вы можете сосредоточиться на разработке а управление сервисами и системное администрирование передать провайдеру.
Среди этих трех понятий FaaS предлагает наибольший уровень абстракции и наиболее специфичную функциональность. С помощью FaaS разработчики получают доступ к платформе, которая выполняет логику приложения по запросу, а все ресурсы приложения и другие компоненты инфраструктуры управляются провайдером.
FaaS и PaaS
При поверхностном знакомстве FaaS и PaaS кажутся очень похожими, однако между ними есть ключевые различия, которые следует учитывать, чтобы сделать правильный выбор.
- Конфигурация. Благодаря простоте использования и полностью управляемым решениям FaaS чрезвычайно быстро настраивается. PaaS предлагает больший уровень абстракции, чем другие модели облачных вычислений, однако она все же требует базовой настройки. Это может быть как преимуществом, так и недостатком – зависит от желаемого уровня контроля.
- Операции. Технологии FaaS запускают и отключают целые приложения по отдельным запросам. Эта особенность FaaS может повлиять на задержку, стоимость и способность обрабатывать сложные запросы. Хотя PaaS имеет возможность автоматически масштабироваться по мере необходимости, в ней, как правило, всегда есть запущенные ресурсы.
- Масштабируемость. Как вы уже знаете, PaaS масштабируется по мере необходимости, но продумывание и настройка все еще зависят от разработчика. В свою очередь FaaS не требует никакого планирования. Он легко и быстро самостоятельно масштабируется по мере необходимости.
- Ценообразование. Существуют разные модели ценообразования для PaaS, они всегда зависят от провайдера. Однако PaaS часто обходится дороже, чем FaaS, если у вас низкая рабочая нагрузка. FaaS позволяет разработчикам платить только за вызов функции, экономя время, если триггеров событий мало. PaaS лучше подойдет для постоянных или высоких рабочих нагрузок с точки зрения цены.
Как работает FaaS
Раньше приложения обычно писались на основе монолитной архитектуры. Это значит, что приложение было структурировано так, что все его части запускались одновременно при помощи одной операции выполнения. Со временем разработчики стали все чаще прибегать к использованию микросервисов. Микросервисы — это набор модулей, которые можно развертывать независимо друг от друга. С ними можно работать индивидуально, а потому их легче тестировать и поддерживать.
Функция — это, по сути, микросервис, который может выполнять только одно действие в ответ на событие. Используя FaaS, провайдер запускает сервер вместе с функцией, выполняет функцию, а затем выключает сервер. Бессерверные приложения активны только тогда, когда используется функция, что позволяет использовать те же вычислительные ресурсы в другом месте, когда сервер выключен.
Разработчики, использующие FaaS, имеют доступ к платформе, которая позволяет им выполнять код для своих приложений. Простота — сильная сторона FaaS. Чтобы использовать FaaS по максимуму, разработчик должен сделать так, чтобы каждая функция выполняла только одно действие. Область действия функции должна быть ограниченной. Используя слишком много библиотек или запрашивая одну функцию на вызов другой, вы скоро замедлите работу приложения и увеличите затраты.
Преимущества FaaS
Архитектура FaaS имеет много преимуществ. Вот несколько основных причин, по которым вы можете выбрать FaaS для своего приложения:
- Возможность сосредоточиться исключительно на написании кода и разработке вашего приложения.
- Экономия средств: вы оплачиваете только то, что используете
- Возможность автоматического масштабирования без планирования мощностей или текущего обслуживания.
- Более быстрый выход на рынок благодаря простоте разработки и тестирования.
Варианты использования FaaS
FaaS можно использовать по-разному: от веб-приложений, обработки данных и онлайн-чатов до серверных функций и многого другого. Прежде чем обратиться к провайдеру FaaS, обратите внимание на следующее:
- Рабочие нагрузки. Выбирайте FaaS для простых и повторяющихся функций без постоянных рабочих нагрузок или больших объемов запросов. Обычно цена FaaS зависит именно от выполнения функций, потому при интенсивном использовании FaaS затраты потенциально могут быть выше, чем с PaaS. Если ваша рабочая нагрузка относительно невелика, FaaS — отличный выбор, который упростит выделение ресурсов и сэкономит деньги.
- Контроль. FaaS — одно из самых абстрактных облачных предложений. Подумайте, какой уровень контроля необходим вашим конфигурациям и инфраструктуре. Если вам подходит простота использования, но нужен немного больший контроль, чем предлагает FaaS, попробуйте PaaS. Разработчикам, которые хотят получить полный контроль над своей производственной средой, дизайном и поведением инфраструктуры, рекомендуем рассмотреть решение IaaS.
- Блокировка вендора. Миграция приложений, созданных с помощью определенных провайдеров, может быть сложной задачей. Использование облачных решений с открытым исходным кодом упрощает перенос вычислительных операций от одного провайдера к другому.
Как работают и где применяются бессерверные вычисления (Function-as-a-Service)
Serverless-вычисления и работающие на их основе решения Function-as-a-Service помогают разработчикам развивать продукты, ориентируясь на бизнес-фичи. Мы поэкспериментировали с этими технологиями и пришли к выводу, что для боевого применения существующие решения сыроваты. Пойдём по порядку.
Термин «бессерверные вычисления» отчасти вводит в заблуждение – конечно, в основе продукта сервера остаются, но разработчикам не приходится о них заботиться. По сути своей Serverless продолжает те же идеи виртуализации, что и более ранние aaS-технологии: позволить команде сосредоточиться на коде и развитии функций. Если IaaS – это абстракция оборудования, контейнеры – абстракция приложений, то FaaS – это абстракция бизнес-логики сервиса.
Идея в том, чтобы не паковать в контейнер сервер приложения, базу данных, средства балансировки нагрузки. Разработчики могут изолировать функцию в коде, загрузить её на облачной платформе и запускать её в тот момент, когда она нужна. Выделение инстансов, развёртывание кода и распределение ресурсов, запуск веб-интерфейсов, мониторинг работоспособности, обеспечение безопасности – всё это происходит автоматически.
FaaS обеспечивает максимальную гибкость в управлении производительностью – во время простоя функция вообще не потребляет ресурсы, а если потребуется, платформа быстро выделяет мощности, которых будет достаточно практически с любой нагрузкой. Обслуживает приложение одного пользователя или сразу сто тысяч – производительность системы с FaaS-архитектурой фактически не страдает, а у продукта с традиционной архитектурой обязательно начались бы проблемы.
Команда не беспокоится о бэкенде и процессах деплоя, В идеальных условиях реализация новой фичи сводится к загрузке одной функции на сервер. В результате разработка двигается быстрее, Time-to-Market ползёт вниз. А в компании в целом внедрение FaaS помогает развить платформенный подход – для Serverless-вычислений нужен либо пул облачных ресурсов от провайдера, либо Kubernetes-кластер.
Как это работает на практике
На рынке есть уже целый набор Serverless-платформ. Мы внимательно изучили два решения: Lambda от Amazon и KNative. Первое представляет собой проприетарный сервис для работы с облаком Amazon, второе работает поверх Kubernetes.
Amazon Lambda – вполне рабочий вариант со всеми возможностями, о которых мы говорили выше. Платформа выполняет все рутинные операции с продуктом, разворачивает приложения, мониторит работоспособность и производительность групп инстансов, обеспечивает отказоустойчивость и масштабирование.
Главное «но» – это проприетарный продукт, а значит вы ограничены амазоновским облаком и вынуждены использовать другие продукты их экосистемы. Если захотите сменить платформу, скорее всего, вам придётся сильно перестраивать продукт, поскольку в новой инфраструктуре правила могут сильно отличаться.
KNative – для нас решение более интересное, поскольку оно работает поверх Kubernetes.
В отличие от Lambda, в этом случае используется собственная платформа, приходится глубже погрузиться в архитектуру процесса. Выглядит она так:

- Event source – сущность FaaS-платформы, которая взаимодействует с внешними источниками событий. Триггером может быть HTTP-запрос, сообщение от брокера сообщений, событие самой платформы
- Broker – «корзина», которая принимает и хранит информацию о событиях от Event Source. Брокер может представлять собой модуль Kafka, работать в оперативной памяти и т.п.
- Trigger – подписанный на Broker компонент, который достаёт сообщения из «корзины» и передаёт их на исполнение в Service.
- Service – рабочая функция, изолированная бизнес-логика.
С точки зрения разработчика процесс выглядит практически так же, как с уже привычными контейнеризированными приложениями, меняется только объект: (1) написать функцию, (2) упаковать её в Docker-образ, (3) загрузить.
Главный недостаток KNative – нет средств логирования и мониторинга, а для FaaS-решений это критически важно. Если ваш продукт разбит на функции, без эффективного мониторинга и логирования быстро установить источник сбоя невозможно, поскольку придётся смотреть на каждую функцию отдельно.
Преимущества FaaS
Лучше всего подход показывает себя, когда не требуется мгновенный ответ пользователю и когда нагрузка может колебаться от 0 до 100%:
- Задачи, которые выполняются по расписанию. Операции экспорта/импорта в системах финансовой отчётности, учётных системах, решениях для создания резервных копий.
- Асинхронная отправка уведомлений пользователю (push, email, СМС).
- Машинное обучение, Интернет вещей, системы ИИ – все эти отрасли точно оценят такие возможности. Serverless позволяет выполнять вычисления ближе к эндпойнту, т.е. к пользователю. А значит, у продукта уменьшается задержка, сокращается нагрузка на передачу данных.
Какие можно выделить недостатки Serverless:
- Такая архитектура плохо подходит для долгосрочных процессов. Если функция используется в приложении практически постоянно, то и потребление ресурсов будет таким же, как у традиционных продуктов.
- Лучшие платформы на данный момент привязывают компанию к тому или иному облачному провайдеру – будь то AWS, Microsoft Azure или Google Cloud. Решениям для Kubernetes ещё предстоит подрасти до этого уровня.
- FaaS – это не «волшебная таблетка», с которой разработчики могут забыть об инфраструктуре и просто отправлять на прод фичи. Всё равно нужно продумывать архитектуру, проектировать функции и их взаимодействие с помощью DDD. Иначе продукт превращается в массу сильно связанных между собой функций, в которых будет сложно разобраться. Разработчики не смогут деплоить такие функции и менять по отдельности. В худшем случае при обработке пользовательских запросов пользователя придётся поднимать все функции.
Наш вывод – до эпохи Serverless ещё несколько лет
…При условии, что разработчики будут развивать это направление, в частности – развивать open source платформы до уровня того же Amazon Lambda.
Мотивацией таких проектов может быть сокращение затрат на ресурсы, улучшение управления большими энергозатратными продуктами. Но на данный момент разработчикам может быть проще работать «по старинке». Владение Serverless и умение использовать эти инструменты – это хороший багаж, до боевого применения компаниям стоит подождать пару лет.
- faas
- serverless
- бессерверные вычисления
- бессерверные технологии
- Управление продуктом
- DevOps
- Serverless