Всестороннее сравнение бессерверных платформ Kubernetes (OpennFaas, OpenWhisk, Fission, Kubeless и т. д.)

задняя часть Serverless Kubernetes

Оригинальная ссылка:A Comparison of Serverless Frameworks for Kubernetes: OpenFaas, OpenWhisk, Fission, Kubeless and more

AWS Lambda стал синонимом Serverless. Но отделение от AWS имеет два преимущества: оно позволяет избежать некоторых ограничений и является более гибким.

Serverless (без службы) на самом деле является псевдонимом, на самом деле это набор технологий, которые полностью абстрагируются от базовой аппаратной технологии. Очевидно, что эти функции или функции на самом деле все еще работают где-то на сервере, но нас это не волнует. Разработчикам нужно только предоставить функцию кода, а затем использовать или вызывать через какой-либо интерфейс: обычно REST, но также можно вызывать через технологии на основе сообщений (такие как Kafka, Kinesis, Nats, SQS и т. д.).

Ниже приведено сравнение бессерверных фреймворков для платформы Kubernetes и некоторые рекомендации:

сравнить результаты

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

Проблемы с такими представлениями, как популярность, трудно поддаются количественной оценке, поэтому нам приходится прибегать к некоторым показателям. Например, мне очень хотелось бы знать, сколько людей используют этот фреймворк каждый день, но трудно найти точное число, поэтому мы используем такие показатели, как звезды Github или Google Trends, чтобы выразить «популярность». Более подробную информацию о популярности можно найти здесь:Open Source Metrics.

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

Размеры/рамы OpenFaas OpenWhisk Kubeless Fission IronFunctions Fn
(Добро пожаловать) Github Stars
(Популярность) Google Trends (100 – самый популярный) 37 58 24 Н/Д (конфликтует с расщеплением) N/A 3
(добро пожаловать) стабильность (участник)
(Популярность) Количество сообщений StackOverflow.com 21 359 15 2 5 9
(Добро пожаловать) Участники с коммитами> 10 10 33 7 6 9 19
(Стабильность) Спонсорская компания VMWare IBM(Фонд Апача) Bitnami Plaform9 Iron.io Oracle
(Стабильность) Время первого выпуска 2016/12 2016/02 2016/11 2016/08 2016/02 2016/05
(стабильность) язык разработки Go Scala Go Go Go Go
(инструмент) Инструмент для упаковки Докер-контейнер Докер-контейнер Докер-контейнер Докер-контейнер Docker Docker
(инструмент) метод развертывания k8s Пользовательский манифест yaml Пользовательский манифест yaml Manifest Пользовательский манифест yaml связанные с пользователем связанные с пользователем
(инструмент) пройтиserverlessразвертывать ? YES(WIP) YES YES NO NO YES
(инструмент) базовая технология Alertmanager / Prometheus, Nats CouchDB, Kafka, Nginx, Redis, Zookeeper Нет (необязательно с Nats или Kafka) свободно (может также использовать Nats) Postgres, Redis DB (sqlite3, PostgreSQL, MySQL), MQ (Bolt, Redis), Prometheus
(Простота использования) из коробки YES YES НЕТ (развертывание через serverless не удалось) ДА (но также немного проблематично) не пробовал не пробовал
(Простота использования) Качество документации Good Good Средний (чуть менее организованный) Плохо (плохая организация, отсутствие документации) Средний (чуть менее организованный) Good
(Простота использования) Есть ли канал Slack Да (по электронной почте) имеют имеют(slack.k8s.io) имеют имеют имеют

Рекомендации для бессерверных платформ

Основываясь на сравнении в таблице выше, я рекомендую:

  • использоватьserverless framworkприйти как SDK
  • Используйте OpenFaas или OpenWhisk на k8s для управления функциями
  • OpenFaas является зрелым, простым в использовании и расширяемым, но у него меньше активных разработчиков в основном проекте, чем у OpenWhisk, и он менее популярен. (согласно моему определению активных разработчиков и популярности)
  • OpenWhisk является зрелым, популярным и поддерживается многими активными разработчиками, но при этом сложен. Он написан на Scala и поддерживается IBM/Apache (может быть, хорошо это или плохо, решать вам)

Таким образом, итоговый стек технологий может выглядеть следующим образом:

Другое дополнительное предложение состоит в том, чтоserverless framworkПозволяет разработчикам развертывать функции на Lambda или других бессерверных платформах k8s. Если у вас уже есть функции, развернутые в Lambda, это очень полезно для миграции функций.

Знакомство с различными фреймворками

Severless Framework

Бессерверный фреймворк будет упоминаться в этой статье много раз, поэтому сначала стоит поговорить о том, что это такое.

Это не платформа, но она может выполнять любую функцию. Это SDK без сервера. По сути, это просто оболочка. Но самое приятное то, что с функциями, упакованными с бессерверной инфраструктурой, вы можете развернуть один и тот же код в Lambda, Google Functions, Azure Functions, OpenWhisk, OpenFaas, Kubeless или Fn.

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

Кроме того, это также позволяет нам в определенной степени не возражать против того, «какой фреймворк следует использовать». Мне нравится, как реализован Kubeless, но он недостаточно зрелый. Если мы основаны на Serverless Framework, то мы можем построить код нашей функции на OpenFaas и Lambda, который позже можно будет легко портировать на Kubeless.

Единственным недостатком является то, что имя немного неудобное и может легко привести к недопониманию. Также сейчас поддерживаются ограниченные языки, но кроме этого, я думаю, что это самый безопасный вариант.

OpenWhisk

OpenWhisk — это зрелая бессерверная среда, поддерживаемая Apache Foundation и IBM. Служба IBM Cloud Functions также построена на OpenWhisk. Основными коммиттерами являются все сотрудники IBM.

OpenWhisk использует CouchDB, Kafka, Nginx, Redis и Zookeeper и имеет множество низкоуровневых компонентов, поэтому добавляет определенный уровень сложности. Преимущество в том, что разработчики могут четко сосредоточиться на масштабируемых и эластичных сервисах. Недостаток в том, что и разработчикам, и пользователям необходимо знать эти инструменты и научиться их использовать. Еще один недостаток в том, что он дублирует некоторые функции, которые уже существуют в Kubernetes ( например, автоматическое масштабирование). В итоге функция запускается в контейнере Docker вместе с фреймворком.

OpenWhisk можно установить с помощью диаграммы Helm, но некоторые шаги по-прежнему выполняются вручную. Приложения-функции можно развернуть с помощью инструментов CLI или бессерверной платформы. Метрики Prometheus (для функций мониторинга, использующих различные метрики) доступны из коробки.

OpenFaas

OpenFaas — популярный и простой в использовании бессерверный фреймворк (хотя и не такой хороший, как OpenWhisk в таблице выше). Но он не так популярен, как OpenWhisk, и коммиты кода делаются на индивидуальной основе. В дополнение к вкладу отдельных разработчиков в свободное время, VMWare также наняла команду для постоянной поддержки OpenFaas. Сейчас в Великобритании зарегистрирована компания OpenFaas, но неясно, как эта компания связана с проектом OpenFaas.

Архитектура OpenFaas относительно проста. Шлюз API можно вызывать через Kafka, SNS, CloudEvents, CRON или другие синхронные/асинхронные триггеры, при этом асинхронные вызовы обрабатываются потоковой передачей NATS. Эластичное масштабирование сервисов выполняется с помощью Prometheus и Prometheus Alertmanager, но также поддерживаетЗаменен на HorizontalPodAutoscaler от Kubernetes..

Helm или kubectl могут обеспечить полную поддержку установки Kubernetes, включая операторов CRD (например, получение функций через kubectl). Существует также WIP оператора Kubernetes, который хорошо работает:openfaas-operator.

Приложения-функции можно развертывать с помощью инструментов CLI или бессерверной среды. также предоставляет "Funtion Store", который предоставляет многие функции, используемые в OpenFaas. Метрики Prometheus (для функций мониторинга, работающих с различными метриками) также доступны из коробки.

Kubeless

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

Мне нравится управлять такими функциями, как стандартные объекты Kubernetes, а это означает, что все обычные возможности Kubernetes доступны из коробки (например, Helm, Ark и т. д.).

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

Это звучит идеально, но. . .

К сожалению, он недостаточно зрел для пользовательского производства. Сообщество также недостаточно велико, и документация неполная (пришлось полагаться на другие статьи или сообщения). И бессерверная поддержка имеет ошибки, что также означает, что ее нельзя использовать в Amazon EKS,

С другой стороны, я считаю, что в течение следующих 6 месяцев Kubeless станет настоящей «бессерверной инфраструктурой Kubernetes».

Fission

Fission очень интересен, потому что он находится на полпути между Kubeless и OpenWhisk. Он в значительной степени зависит от многих функций Kubernetes, но не является полностью интегрированным. Преимущество этого подхода в том, что он использует сильные стороны Kubernetes (например, автоматическое масштабирование), но приводит к повышению производительности, когда вам нужно сделать что-то другое. Например, он имеет довольно сложный механизм пула холодного запуска.

ДелениеPlatform9Поддержка, можно установить через Helm. Influxdb используется для обработки состояния, а FluentD предназначен для сбора журналов для готового использования. Механизм сообщений использует Nats, а кэш использует Redis. Как видите, ни один из других фреймворков не предоставляет встроенных функций кэширования и ведения журнала, хотя добавить их вручную довольно просто.

У Fission есть очень хорошее расширение под названиемFission Workflows. Это инструмент для разработчиков, позволяющий писать функции с использованием функционального кодирования. Это очень интересное направление, и я хотел бы посмотреть, что я могу с ним сделать.

Однако у Fission очень мало пользователей (на StackOverflow есть только два связанных вопроса, но означает ли это, что им легко пользоваться?). Основные участники также очень малы: всего 6 участников делают более 10 коммитов. Есть еще несколько недостатков, но в основном из-за отсутствия пользователей и разработчиков, а также отсутствия документации. Из-за этого разработчикам сложно понять, как работает фреймворк, и я не знаю, как создается шаблон кода и запускаются поды, что может вызвать некоторые скрытые опасности в будущем. В целом, я очень запутался в конструкции Fission. . «Мы ничего не знаем и не смеем спрашивать».

Кроме того, имя Fission трудно найти.

Fn

Имя Fn звучит немного неловко. Это открытый исходный код, но основной вклад в него вносит Oracle. Использование в основном зависит от Fn CLI, и функция работает в контейнере Docker.этот пост в блогеЕсть некоторая информация о CLI, документация находится по адресуздесь. Некоторые компоненты фреймворка можно развернуть с помощью Helm. Существует также новая функция под названием Fn Flow, которую можно использовать для управления несколькими функциями, аналогично OpenWhisk.

Но самое главное отличие в том, как это работает, Fn больше ориентирован на простоту использования, но выглядит очень самодовольно. Он обеспечивает горячее развертывание функций (которое также предоставляют другие фреймворки) и «потоковые функции» (которые уникальны, но неясно, как это работает с другими фреймворками).

Проект Fn стартовал в 2016 году, поэтому на самом деле он примерно того же возраста, что и OpenWhisk, и имеет определенное количество участников. Тем не менее, есть некоторые функции, которые конфликтуют с Kubernetes, и они меня утомляют (например, вы не можете развертывать через Kubernetes AFAICT). Но это мой призыв, поэтому я больше им не пользуюсь. Но он совместим с бессерверной структурой, что в определенной степени облегчает работу. .

IronFunctions

Iron Functions поддерживается одноименной компанией. Так что здесь есть несколько подводных камней: когда вы нажимаете «Документация» в ридми на github, вы фактически переходите на домашнюю страницу Iron. Затем вы снова нажимаете «документы» на странице, и вы получаете контент, который не касается функций железа. На самом деле реальная документация находится в репозиторииdocsПод содержанием. . .

Как и другие фреймворки, он также основан на Docker. Интересной особенностью является то, что он имеет специальную поддержку AWS Lambda. Вы можете получить код от Lambda и запустить его непосредственно в Iron Functions. Это очень удобно для миграции.

К сожалению, он изначально не поддерживает развертывание манифеста в Kubernetes, как это делает Fn, и не поддерживает бессерверную инфраструктуру. Из-за этих недостатков я не стал продолжать попытки его использовать. Он также недостаточно популярен, чтобы появляться в Google Trends.

Funktion

Funktion — это несуществующее решение от RedHat.


Подпишитесь на официальный аккаунт [Сообщество IVWEB], чтобы получать свежие статьи каждую неделю, ведущие к вершине жизни!