Компания Oracle объявила (https://blogs.oracle.com/developers/meet-the-new-application... об открытии кода платформы Fn (http://fnproject.io/) с реализацией бессерверной модели разработки приложений (serverless (https://en.wikipedia.org/wiki/Serverless_computing)). Fn предоставляет дополнительный уровень абстракции для облачных систем, позволяющий выполнять функции как сервисы (Functions as a service (https://en.wikipedia.org/wiki/Function_as_a_service), FaaS). Код написан на языке Go и поставляется (https://github.com/fnproject/fn) под лицензией Apache 2.0. Разработка выполнена командой проекта IronFunctions (https://www.iron.io/) и основана на его кодовой базе (https://github.com/iron-io/functions).
Суть метода FaaS заключается (https://github.com/fnproject/fn/blob/master/docs/serverless.md) в том, что разработчик реализует логику на уровне отдельных функций, не заботясь о создании и управлении инфраструктурой для запуска приложений, без привязки к конкретным серверным приложениям и необходимым для их работы облачным окружениям. Достаточно определить требуемые функции и загрузить их, после чего платформа Fn сама развернёт, организует управление и обеспечит масштабирование окружений, необходимых для выполнения подготовленных функций.
Разработка ведётся без создания монолитных приложений, на уровне подготовки набора небольших отдельных функций, каждая их которых обеспечивает обработку определённого события и рассчитана на обособленную работу без привязки к окружению (stateless, результат не зависит от прошлого состояния и содержимого ФС). Для операторов облачных систем применение FaaS выгодно более эффективным потреблением ресурсов - функции запускаются только при возникновении необходимости и сразу после обработки события завершают свою работу, т.е. в отличие от микросервисов не требуют постоянного наличия запущенных окружений, потребляющих ресурсы на холостом ходу.
Для высоконагруженных систем предусмотрена поддержка асинхронного (https://github.com/fnproject/fn/blob/master/docs/async.md) режима работы и "горячих (https://github.com/fnproject/fn/blob/master/docs/hot-functio... постоянно запущенных функций, не требующих создания нового контейнера для каждого запроса. Масштабирование обеспечивается продвинутой системой балансировки нагрузки, осуществляющей маршрутизацию трафика до функций, которые динамически запускаются на узлах с доступными ресурсами.
В отличие от существующих коммерческих FaaS-платформ, таких как Amazon AWS Lambda, Google Cloud Functions и Microsoft Azure Functions, решение от Oracle позиционируется как избавленное от привязки к вендору. Пользователь может выбирать любых поставщиков облачных решений для запуска инфраструктуры Fn, комбинировать разные облачные системы или запустить платформу на собственном оборудовании. В том числе Fn можно запустить поверх популярных платформ оркестровки контейнеров Kubernetes, Docker Swarm и Mesosphere, внутри окружений PaaS, таких как CloudFoundry и OpenShift, или просто на локальной системе разработчика. Из зависимостей для работы Fn требуется только Docker.
Разработчикам предоставляется инструментарий командной строки и графический интерфейс (https://github.com/fnproject/ui) для разработки, тестировния и развёртывания функций. Fn позволяет создавать функции на любом языке программирования благодаря простому интерфейсу взаимодействия, поддерживающему обмен данными через (https://github.com/fnproject/fn/blob/master/docs/function-fo... переменные окружения, STDIN, HTTP или JSON. Для упрощения разработки предоставляется инструментарий FDK (Function Developer Kit) для языков Java (https://github.com/fnproject/fdk-java), Ruby (https://github.com/fnproject/fdk-ruby) и Go (https://github.com/fnproject/fdk-go), а также коллекция примеров (https://github.com/fnproject/fn/tree/master/examples/tutorial) для языков go, JavaScript/node.js, java, php, python, ruby и rust. Платформой также поддерживается формат функций AWS Lambda и прямой импорт функций из сервиса AWS Lambda. Возможно создание собственных дополнений и модулей интеграции. Компонент Fn Flow позволяет определять правила оркестровки функций непосредственно в их коде.
URL: https://blogs.oracle.com/developers/announcing-fn
Новость: http://www.opennet.ru/opennews/art.shtml?num=47314