Компания Google представила стабильный релиз платформы Knative 1.0, предназначенной для создания инфраструктуры бессерверных вычислений, развёртываемой поверх системы контейнерной изоляции на базе платформы Kubernetes. Кроме Google в разработке Knative также принимают участие такие компании, как IBM, Red Hat, SAP и VMware. Выпуск Knative 1.0 ознаменовал стабилизацию API для разработки приложений, который отныне не будет меняться и сохранит обратную совместимость. Код проекта написан на языке Go и распространяется под лицензией Apache 2.0.
Предлагаемая в Knative бессерверная модель разработки приложений (serverless) предоставляет дополнительный уровень абстракции для облачных систем, позволяющий выполнять функции как сервисы (FaaS, Functions as a service). Суть бессерверной модели в том, что разработчик реализует логику на уровне отдельных функций, не заботясь о создании и управлении инфраструктурой для запуска приложений, и не привязываясь к конкретным серверным приложениям и необходимым для их работы облачным окружениям.
Разработка ведётся без создания монолитных приложений на уровне подготовки набора небольших отдельных функций, каждая их которых обеспечивает обработку определённого события и рассчитана на обособленную работу без привязки к окружению (stateless, результат не зависит от прошлого состояния и содержимого ФС). Функции запускаются только при возникновении необходимости и после обработки события могут сразу завершать свою работу, т.е. в отличие от микросервисов не требуется постоянное наличие запущенных окружений, потребляющих ресурсы на холостом ходу.
Платформа Knative сама запускает контейнеры по мере необходимости, размещает в них подготовленные функции, организует управление и обеспечивает масштабирование окружений, необходимых для выполнения этих функций. Платформа может быть развёрнута на своих мощностях без привязки к внешним облачным сервисам. Для запуска необходим только Kubernetes. Предоставляются средства для поддержки различных типовых фреймворков, включая Django, Ruby on Rails и Spring. Для управления работой платформы может использоваться интерфейс командной стоки.
Платформа предоставляет два основных компонента:
- Serving для запуска бессерверных контейнеров в Kubernetes с автоматической настройкой сетевого взаимодействия, маршрутизацией, отслеживанием изменений (создание снапшотов размещаемого кода и настроек) и поддержанием требуемого уровня масштабирования (вплоть до уменьшение числа pod-ов до нуля при отсутствии активности). Разработчик сосредотачивает внимание только на логке, всем, что связано с выполнением занимается платформа. Для организации сетевого взаимодействия и маршрутизации запросов могут использоваться сетевые подсистемы Ambassador, Contour, Kourier, Gloo и Istio. Имеется поддержка HTTP/2, gRPC и WebSockets.
- Eventing – универсальная система подписки (прикрепления обработчиков), доставки и управления событиями. Позволяет создавать асинхронно работающие приложения, прикрепляя вычислительные ресурсы к потокам данных при помощи объектной модели и механизма обработки событий.