FaaS (Function-as-a-Service)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 18:17, 31 октября 2016.

Function as a service (с англ. «функция как услуга») — архитектурный шаблон, предполагающий возможность вызова серверного кода без необходимости управления серверами и серверным приложением. Это одна из ключевых компонент бессерверных (англ. serverless) архитектур. Одной из первых широко известных реализаций стал представленный в 2014 году сервис AWS Lambda. Аналогичные предложения есть у Google (Cloud Functions), IBM (OpenWhisk) и Microsoft (Azure Functions). Cloud Functions и Azure Functions выпущены в 2016 году. OpenWhisk, на что показывает название, — это OpenSource / локальная система, показывающая схожие возможности. FaaS-возможности также продемонстрированы на таких частных платформах, как Бессхемные триггеры Uber.

Идея «функции как услуги» такова: серверная часть разбивается на набор не фиксирующих состояние (англ. stateless) функций для обработки событий (которыми могут быть приходящие HTTP-запросы, появление новых сообщений в очереди, наступление указанного в планировщике времени и т. п.). Состояние в данном случае понимается в контексте развёртывания (англ. deployment), то есть результат выполнения функции не должен зависеть от состояния памяти сервера (за вычетом переданных параметров вызова) и содержимого локальной файловой системы. При таких ограничениях горизонтальное масштабирование выполняется провайдером, который может использовать любое доступное ему в данный момент вычислительное устройство, обеспечивающее требуемый уровень производительности. Так же, как правило, время выполнения функции принудительно ограничивается несколькими минутами.[1]

Сравнение с платформой как услугой хостинга приложений

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

В FaaS-системе ожидается, что функции запускаются в течение миллисекунд, чтобы обеспечить обработку индивидуальных запросов. В PaaS-системах, напротив, существует, обычно поток приложения, что продолжает работать долго и обрабатывает множество запросов. Это отличие в основном видно в ценах, где FaaS-услуги оплачивают за время выполнения функции, в то время как PaaS-услуги — за время работы потока, где работает серверное приложение.[2]

Бессерверные вычисления

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

Как ни странно, термин на самом деле не подразумевает действие кода без серверов. Бессерверные вычисления называются так потому, что предприятие или человек, владеющий системой, не обязан покупать, арендовать или вводить в эксплуатацию сервера или виртуальные машины, чтобы запускать на них серверный код.

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

Бессерверный код можно как вызвать конкретными событиями (таких как регистрация пользователей через Amazon Cognito), так и настроить для работы в поддержку API-платформы управления, чтобы представить её как конечную точку REST API.[3]

История

AWS Lambda, представленная Amazon в ноябре 2014 года, стала первым провайдером, где предполагалось бессерверное предложение. Изначально её запустили на Node.js, как единственной рабочей среде, но на 2016 год она официально поддерживает Python, Java и другие языки, например, Haskell тоже может быть инициатором процесса на Node.js.

Google выпустил альфа-версию собственной бессерверной платформы, под названием Google Cloud Functions, и поддерживает Node.js.

В 2016 году подоспел Microsoft, с Azure Functions, недоделанной технологией, которую хотят применить в публичном облаке Azure и в любой другой облачной среде, что публичной, что частной.

Преимущества

Стоимость

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

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

Модель программирования

В серверных вычислениях блоки кода подвергаются внешним и простым функциям — так, в AWS Lambda это функции, которые принимают и создают JSON, хотя могут обращаться к другим API, а JSON может быть автоматически сериализован из или десериализован в структуры данных на выбор программиста. Это значит, что обычно программисту не нужно волноваться о многопоточности или непосредственной обработки HTTP-запросов в коде, что упрощает задачу разработки серверного ПО.

Недостатки

Производительность

Не часто используемый бессерверный код может пострадать от большей задержки отклика, чем код, непрерывно работающий на выделенном сервере, виртуальной машине или контейнере. А всё потому, что, в отличие от автомасштабируемости, облачный провайдер обычно «тормозит» бессерверный код полностью, пока тот простаивает. То есть когда рабочая среда действует — например, рабочая среда Java, если мы говорим о коде на Java, — требуется внушительное количество времени для запуска, откуда берётся задержка при обработке запроса, и следующий запрос будет обращён к данному участку кода. Впрочем, не весь код восприимчив к задержкам: например, операции пакетной обработки, запущенные через cron, едва ли подвергнутся подобным малым, нечастым задержкам.

Ограниченные ресурсы

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

Мониторинг и отладка

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

Источники

  1. Википедия [Электронный ресурс]: Functions as a service — материал из Википедии — свободной энциклопедии: Версия 79094304, сохранённая в 14:23 UTC 20 июня 2016 / Авторы Википедии // Википедия, свободная энциклопедия. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, 2016. — Режим доступа: https://ru.wikipedia.org/w/index.php?title=Functions_as_a_service&oldid=79094304.
  2. Wikipedia [Электронный ресурс]: Function as a Service — материал из Википедии — свободной энциклопедии: Версия 746910544, сохранённая в 08:42 UTC 30 октября 2016 / Авторы Википедии // Википедия, свободная энциклопедия. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, 2016. — Режим доступа: https://en.wikipedia.org/w/index.php?title=Function_as_a_Service&oldid=746910544.
  3. Wikipedia [Электронный ресурс]: Serverless computing — материал из Википедии — свободной энциклопедии: Версия 733025254, сохранённая в 21:23 UTC 4 August 2016 / Авторы Википедии // Википедия, свободная энциклопедия. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, 2016. — Режим доступа: https://en.wikipedia.org/w/index.php?title=Serverless_computing&oldid=733025254.

Ссылки