Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >无服务器架构的开源框架:OpenFaaS、Knative等等

无服务器架构的开源框架:OpenFaaS、Knative等等

作者头像
CNCF
发布于 2020-04-20 07:29:53
发布于 2020-04-20 07:29:53
8.4K0
举报
文章被收录于专栏:CNCFCNCF

作者:Ran Ribenzaft,Epsagon联合创始人兼首席技术官。最初发表在Epsagon博客上。

https://epsagon.com/blog/serverless-open-source-frameworks-openfaas-knative-more/

本文将讨论上面提到的一些框架,并深入探讨OpenFaaS和Knative,介绍它们的架构、主要组件和基本安装步骤。如果你对这个主题感兴趣,并计划使用开源平台开发无服务器应用程序,那么本文将帮助你更好地理解这些解决方案。

在过去的几年里,无服务器架构已经迅速得到普及。这种技术的主要优点是能够在不需要基础设施管理的情况下创建和运行应用程序。换句话说,当使用无服务器架构时,开发人员不再需要分配资源、扩展和维护服务器来运行应用程序,或者管理数据库和存储系统。他们唯一的责任是编写高质量的代码。

有许多用于构建无服务器框架的开源项目(Apache OpenWhisk、IronFunctions、来自Oracle的Fn、OpenFaaS、Kubeless、Knative、Project Riff等)。此外,由于开源平台提供了对IT创新的普及,许多开发人员对开源解决方案很感兴趣。

OpenWhisk、Firecracker和Oracle FN

在深入研究OpenFaaS和Knative之前,让我们简要地描述一下这三种平台。

Apache OpenWhisk是一个用于无服务器计算的开放云平台,它使用云计算资源作为服务。与其他开源项目(Fission、Kubeless、IronFunctions)相比,Apache OpenWhisk的特点是拥有大量的代码库、高质量的特性和大量的贡献者。但是,这个平台上过于庞大的工具(CouchDB、Kafka、Nginx、Redis和Zookeeper)给开发人员带来了困难。此外,这个平台在安全性方面还不完善。

Firecracker是亚马逊引入的一种虚拟化技术。该技术以最小的开销提供虚拟机,并允许创建和管理隔离的环境和服务。Firecracker提供轻量级虚拟机称为微VM“microVM”,它使用基于硬件的虚拟化技术来实现完全的隔离,同时在传统容器级别上提供性能和灵活性。开发人员的一个不便之处是,该技术的所有开发都是用Rust语言编写的。还使用了带有最少组件集的截断的软件环境。为了节省内存、减少启动时间并提高环境中的安全性,将启动一个修改过的Linux内核,所有多余的东西都将从这个内核中删除。此外,功能和设备支持也减少了。该项目由AWS开发,目的是提高AWS Lambda和AWS Fargate平台的性能和效率。

Oracle Fn是一个开放服务器的无服务器平台,它为云系统提供了额外的抽象级别,以支持函数即服务(FaaS)。与Oracle Fn中的其他开放平台一样,开发人员在各个函数级别实现逻辑。不像现有的商业FaaS平台,如Amazon AWS Lambda、Google Cloud Functions和Microsoft Azure Functions,Oracle的解决方案定位为没有厂商锁定。用户可以选择任何云解决方案提供商来启动Fn基础设施、组合不同的云系统或在自己的设备上运行平台。

Kubeless是一种基础结构,它支持在集群中部署无服务器函数,并使我们能够在Python、Node.js或Ruby代码执行HTTP和事件切换。Kubeless是一个使用Kubernetes的核心功能,如部署、服务、配置卡(ConfigMaps)等构建的平台。这节省了Kubeless基础代码的体积,也意味着开发人员不必重播已经存在于Kubernetes内核内部的大部分调度逻辑代码。

Fission是一个开源平台,提供了一个基于Kubernetes的无服务器架构。Fission的优点之一是它可以处理Kubernetes中自动扩展资源的大部分任务,将你从手动资源管理中解放出来。Fission的第二个优点是,你不受一个提供者的约束,可以自由地从一个提供者移动到另一个提供者,前提是它们支持Kubernetes集群(以及你的应用程序可能具有的任何其他特定需求)。

使用OpenFaaS和Knative的主要好处

OpenFaaS和Knative是公开可用的自由开源环境,用于创建和托管无服务器的函数。这些平台允许你:

  • 减少资源闲置
  • 迅速处理数据
  • 与其他服务相互连接
  • 通过平衡负载密集处理大量请求

然而,尽管平台和无服务器计算通常都有优点,但是开发人员在开始实现之前必须评估应用程序的逻辑。这意味着你必须首先将逻辑分解成单独的任务,然后才能编写任何代码。

为了清楚起见,让我们分别考虑这些开源的无服务器解决方案。

如何使用OpenFaaS构建和部署无服务器函数

OpenFaaS的主要目标是使用Docker容器简化无服务器函数,允许你运行复杂而灵活的基础设施。

OpenFaas设计与架构

OpenFaaS架构基于云原生标准,包括以下组件:API网关、Watchdog、容器编排器Kubernetes、Docker Swarm、Prometheus和Docker。根据如下所示的架构,当开发人员使用OpenFaaS时,该过程从安装Docker开始,并以网关API结束。

OpenFaaS组件和流程

API网关

通过API网关,可以提供到所有函数所在位置的路由,并通过Prometheus收集云原生指标。

客户端到函数路由

函数Watchdog

Watchdog组件集成到每个容器中,以支持无服务器应用程序,并在用户和函数之间提供公共接口。

OpenFaaS Watchdog接口

Watchdog的主要任务之一是组织在API网关上接收到的HTTP请求,并调用所选的应用程序。

Prometheus

这个组件允许你在任何时候获取指标变化的动态,将它们与其他指标进行比较,转换它们,并以文本格式或图形的形式查看它们,而不需要离开web界面的主页。Prometheus将收集到的指标存储在RAM中,并在达到给定的大小限制或在一段时间之后将它们保存到磁盘中。

Docker Swarm和Kubernetes

Docker Swarm和Kubernetes是编排的引擎。API网关、函数Watchdog和Prometheus实例等组件都在这些编排器之上工作。推荐使用Kubernetes开发产品,Docker Swarm更适合创建本地函数。

此外,所有开发的函数、微服务和产品都存储在Docker容器中,Docker容器是开发人员和系统管理员使用容器开发、部署和运行无服务器应用程序的主要OpenFaaS平台。

在Docker上安装OpenFaaS的要点

OpenFaaS API网关依赖于所选Docker编排器提供的内置功能。为此,API网关连接到所选协调器的适当插件,记录Prometheus中的各种函数指标,并根据通过AlertManager从Prometheus收到的警报调整函数。

例如,假设你正在使用Linux操作系统的机器上工作,并且希望使用OpenFaaS在Docker集群的一个节点上编写一个简单的函数。要做到这一点,你只需遵循以下步骤:

  • 安装Docker CE 17.05或最新版本。
  • 运行Docker: $ docker run hello-world
  • 初始化Docker Swarm: $ docker swarm init
  • 从Github克隆OpenFaaS: git clone https://github.com/openfaas/faas && \ cd faas && \ ./deploy_stack.sh
  • 通过http://127.0.0.1:8080登录到UI门户。

Docker现在已经可以使用了,在编写其他函数时不再需要安装它。

为构建函数准备CLI OpenFaaS

要开发一个函数,你需要使用脚本安装命令行的最新版本。对于brew,这将是 brewinstallfaasclicurl使 curl -sL https://cli.get-faas.com/ | sudo sh。

使用OpenFaas的不同程序语言

要使用CLI中的模板创建和部署OpenFaaS函数,你几乎可以用任何编程语言编写处理程序。例如:

  • 创建新函数: $ faas-cli new --lang prog language <<function name>>
  • 生成堆栈文件和文件夹: $ git clone https://github.com/openfaas/faas \ cd faas \ git checkout 0.6.5 \ ./deploy_stack.sh
  • 构建函数: $ faas-cli build -f <<stack file>> 部署函数:
  • $ faas-cli deploy -f <<stack file>>

从OpenFaaS UI测试该函数

你可以从OpenFaas用户界面以多种方式快速测试该函数,如下所示:

  • 打开OpenFaaS用户界面: http://127.0.0.1:8080/ui/
  • 使用curl: $ curl -d "10" http://localhost:8080/function/fib
  • 使用用户界面

乍一看,一切似乎都很简单。但是,你仍然需要处理许多细微差别。如果你必须使用Kubernetes,需要许多函数,或者需要向FaaS主代码库添加额外的依赖项,则尤其如此。

在GitHub上有一个完整的OpenFaas开发人员社区,在那里你也可以找到有用的信息。

https://github.com/openfaas/faas/tree/master/sample-functions

OpenFaaS的优点和缺点

OpenFaaS简化了系统的构建。修复错误变得更容易了,并且向系统添加新功能比在单一应用程序的情况下要快得多。换句话说,OpenFaaS允许你随时随地以任何编程语言运行代码。

然而,也有缺点:

  • 某些编程语言的冷启动时间很长。
  • 容器启动时间取决于提供程序。
  • 有限的生命周期的函数,这意味着不是所有的系统都可以根据无服务器架构工作。(当使用OpenFaaS时,计算容器不能在内存中长时间地存储可执行应用程序代码。平台将自动创建和销毁它们。)

使用Knative部署和运行函数

Knative允许你开发和部署基于容器的服务器应用程序,你可以轻松地在云提供商之间移植这些应用程序。Knative是一个刚刚开始流行的开源平台,但是今天的开发人员对它非常感兴趣。

Knative的架构和组件

Knative架构由Building、Eventing和Serving组件组成。

Knative架构和组件

Building

Knative的Building组件负责确保集群中的容器程序集从源代码启动。这个组件在现有的Kubernetes基本功能的基础上工作,并且扩展了它们。

Eventing

Knative的Eventing组件负责统一的订阅、交付和事件管理,以及在松散耦合的架构组件之间创建通信。此外,此组件允许你扩展服务器上的负载。

Serving

Serving组件的主要目标是支持无服务器应用程序和特性的部署、从零开始的自动扩展、Istio组件的路由和网络编程,以及已部署代码和配置的快照。Knative使用Kubernetes作为编排器,Istio执行查询路由和高级负载平衡功能。

Knative中最简单的函数的例子

你可以使用几种方法在Knative上创建服务器应用程序。你的选择将取决于你在各种服务方面的特定技能和经验,包括Istio、Gloo、Ambassador、Google,特别是Kubernetes Engine、IBM Cloud、Microsoft Azure Kubernetes Service、Minikube和Gardener。

只需为每个Knative组件选择安装文件。以下是三个组件的主要安装文件链接:

Serving组件

https://github.com/knative/serving/releases/download/v0.7.0/serving.yaml

https://github.com/knative/serving/releases/download/v0.7.0/monitoring.yaml

Building组件

https://github.com/knative/build/releases/download/v0.7.0/build.yaml

Eventing组件

https://github.com/knative/eventing/releases/download/v0.7.0/release.yaml

https://github.com/knative/eventing/releases/download/v0.7.0/eventing.yaml

每个组件都由一组对象来描述。关于这些组件的语法和安装的更详细信息可以在Knative自己的开发站点上找到。

https://knative.dev/docs/

Knative的优点和缺点

Knative有很多好处。与OpenFaaS一样,Knative允许你使用容器创建无服务器的环境。这反过来又允许你获得一个本地的基于事件的架构,其中不受公共云服务的限制。Knative还允许你自动化容器组装过程,这就提供了自动伸缩。因此,无服务器函数的能力基于预定义的阈值和事件处理机制。

此外,Knative允许你在内部、云中或第三方数据中心创建应用程序。这意味着你没有绑定到任何一个云提供商。基于Kubernetes和Istio,使得Knative具有更高的采用率和更大的采用率潜力。

Knative的一个主要缺点是需要独立管理容器基础设施。简单地说,Knative并不针对最终用户。然而,由于这一点,市场上有更多的商业管理的Knative服务提供,例如Google Kubernetes Engine和为IBM Cloud Kubernetes Service的Managed Knative。

总结

尽管开源的无服务器平台越来越多,OpenFaaS和Knative将继续受到开发人员的欢迎。值得注意的是,这些平台不容易比较,因为它们是为不同的任务设计的。

与OpenFaas不同,Knative不是一个全面发展的无服务器平台,但是它作为一个用于创建、部署和管理无服务器工作负载的平台的定位更好。但是,从配置和维护的角度来看,OpenFaas更简单。使用OpenFaas,不需要像使用Knative那样分别安装所有组件,而且如果所需的组件已经安装,则不必清除以前的设置和用于新开发的资源。

尽管如此,如上所述,OpenFaaS的一个重要缺点是容器的启动时间依赖于提供者,而Knative并不绑定到任何单一的云解决方案提供者。基于两者的优缺点,组织也可以选择同时使用Knative和OpenFaaS来有效地实现不同的目标。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Knative 入门系列1:knative 概述
Knative 是一个基于 Kubernetes 的,用于构建、部署和管理现代 serverless 应用的平台。Getting Started with Knative 是一本由 Pivotal 公司赞助 O’Reilly 出品的电子书,公众号后台回复”knative“获取下载地址。本书中文版由 ServiceMesher 社区自发翻译,从今天起 ServiceMesher 社区将陆续为大家推出本书的中文译文。
崔秀龙
2019/07/23
2.5K0
Knative 入门系列1:knative 概述
OpenFaaS实战之一:部署
OpenFaaS是来自Docker社区的一款Serverless框架,作用是为用户提供FaaS计算平台,官网:https://www.openfaas.com,下图来自官方:
程序员欣宸
2021/08/11
2.2K0
OpenFaaS实战之一:部署
【无服务器架构】Knative Eventing 介绍
Knative Eventing是一个旨在满足云原生开发的常见需求的系统,并提供可组合的原语以启用后期绑定事件源和事件使用者。
架构师研究会
2020/01/14
3.8K0
【无服务器架构】Knative Eventing 介绍
(译)Knative:在 Kubernetes 上构建可移植 Serverless 平台
Kubernetes 目前如日中天,这一项目不仅在容器编排方面独占鳌头,还给基础设施自动化进程提供了可实践的原语。
崔秀龙
2019/07/23
1.7K0
(译)Knative:在 Kubernetes 上构建可移植 Serverless 平台
OpenFaaS实战之二:函数入门
本文中的操作会用到工具faas-cli,前文已提到过此工具可以部署在任意电脑上,远程连接OpenFaaS,请确保faas-cli所在机器上有docker服务,因为构建镜像时会用到。
程序员欣宸
2021/08/12
8140
OpenFaaS实战之二:函数入门
Github标星23K、目前最好的开源无服务框架,让Serverless和Faas服务部署更简单
OpenFaaS是一款广受欢迎的无服务(Serverless/Faas)部署框架,为开发者提供了一种简单而高效的方式来构建和部署无服务器函数。它旨在降低构建和管理无服务器应用程序的复杂性,同时提供可扩展性和高可用性。
MCNU云原生
2023/09/05
6.3K0
Github标星23K、目前最好的开源无服务框架,让Serverless和Faas服务部署更简单
openfaas/faas 环境搭建和开发使用
serverless 大环境下出现了 faas,即 function as a service,函数即服务;其意思也非常好理解,就是能将一个函数作为一个服务进行使用,用户只需要编写一个函数功能即可,不需要额外去关心别的东西。https://github.com/openfaas/faas 是其中的一种实现方式。
LinkinStar
2022/09/01
1.2K0
openfaas/faas 环境搭建和开发使用
关于Kubernetes原生无服务框架,你知道多少?
内容来源:2018 年 09 月 16 日,当当网数字业务事业部技术总监李志伟在“中国云原生用户大会”进行《基于 Kubernetes 的 FaaS 平台开源实现——Kubeless 的应用实践》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
IT大咖说
2018/10/23
1.5K0
关于Kubernetes原生无服务框架,你知道多少?
函数即服务,一步到位!
谈起构建一个云端项目,你会想到什么?复杂的服务器购买流程和配置、各种复制的环境依赖安装、Docker镜像的打包和构建,还是令人头疼的后期运维......
星橙
2022/11/15
1.3K1
函数即服务,一步到位!
CloudBluePrint-Chapter 1.7 : 云上应用技术架构-函数计算、Serverless、小程序
FaaS(函数即服务)、Serverless、小程序和弹性云计算的诞生可以归因于云计算发展的趋势和应用架构的演变。
行者深蓝
2023/09/01
5750
深入浅出详解Knative云函数框架!
导语 | 业界开源的云函数框架比较多,像knative、openfaas都是比较成熟且优秀的。本文主要介绍一个云原生的云函数框架:knative。希望更多开发者对它有更深的了解~ 引言 云函数现在已经是老生常谈了,之前用腾讯云函数SCF搭建过一些正式的服务。在使用过程中,对云函数的伸缩,复用和冷启动机制都比较好奇,也拉着腾讯云助手做了相关的请教。不过毕竟不是面对面,所以了解的程度比较有限。业界开源的云函数框架比较多,像knative、openfaas都是比较成熟且优秀的。knative目前已经是CNCF的一
腾讯云开发者
2022/07/27
1.9K0
深入浅出详解Knative云函数框架!
无服务器架构,云计算的下一个纪元
传统上,Web应用程序通常部署在Web服务器上。为了使应用程序在服务器上运行,可能需要花费数小时来下载、编译、安装、配置和连接各种组件。计算机的操作系统也需要不断进行升级和修补,以解决安全漏洞。而管理服务器是一项非常耗时的工作,通常需要专门且经验丰富的系统操作人员,这让很多工程师感觉到身心俱疲。
SDNLAB
2020/03/27
1.9K0
Knative 入门系列5:Knative 安装
Knative 是一个基于 Kubernetes 的,用于构建、部署和管理现代 serverless 应用的平台。Getting Started with Knative 是一本由 Pivotal 公司赞助 O’Reilly 出品的电子书,公众号后台回复“knative”获取英文版下载地址。本书中文版由 ServiceMesher 社区自发翻译系列文章,这是该系列的第5章。
崔秀龙
2019/07/23
4K0
深入浅出Serverless:3 Serverless的实现
AWS Lambda、Microsoft Azure Functions及Google Cloud Functions支持的开发语言
yeedomliu
2019/09/27
3.7K0
OpenFaaS实战之八:自制模板(maven+jdk8)
如果您不想自己搭建kubernetes环境,推荐使用腾讯云容器服务TKE:无需自建,即可在腾讯云上使用稳定, 安全,高效,灵活扩展的 Kubernetes 容器平台;
程序员欣宸
2021/09/14
6430
OpenFaaS实战之八:自制模板(maven+jdk8)
Serverless工程实践 从入门到进阶
第0章 从云计算到Serverless 表0-1 云计算面临的问题和机遇 图0-3 IaaS、PaaS、SaaS的区别 2018年,Serverless的发展速度要比想象中的更快。在这一年,Google发布了Knative,一个基于Kubernetes的开源Serverless框架,具备构建容器、流量调配、弹性伸缩、零实例、函数事件等能力。AWS发布了Firecracker,一个开源的虚拟化技术,面向基于函数的服务,创建和管控安全的、多租户的容器。Firecracker的目标是把传统虚拟机的安全性和
yeedomliu
2022/03/29
9250
Serverless工程实践 从入门到进阶
OpenFaaS实战之四:模板操作(template)
如下所示,faas其实就是faas-cli的链接,因此,平时输入命令用faas更简单:
程序员欣宸
2021/08/15
8820
OpenFaaS实战之四:模板操作(template)
【无服务器架构】Knative Serving 介绍
Knative Serving建立在Kubernetes和Istio之上,以支持无服务器应用程序和功能的部署和服务。服务易于上手,并且可以扩展以支持高级方案。
架构师研究会
2019/12/30
9770
无服务器应用程序开发的最新趋势
作者 | Ankur Kumar 译者 | 刘志勇 策划 | marsxxl 无服务器计算已经在主流应用中站稳脚跟,并开始出现在企业组织的技术路线图中。研究公司和业界领袖预测,在 2022 年无服务器的采用将会有更大的发展势头。虽然在存储、计算和网络等基础设施要素方面,无服务器有不同的方面,但是本文主要讨论无服务器应用开发的最新趋势。 随着人们越来越关注将运营方面的工作交给云服务提供商或以平台为中心的解决方案,无服务器架构将作为一种 功能即服务(Function-as-a-Service,FaaS)的编程风
深度学习与Python
2023/03/29
1.4K0
无服务器应用程序开发的最新趋势
Knative获接受为CNCF孵化项目
CNCF 技术监督委员会(TOC)已投票决定接受 Knative 作为 CNCF 的孵化项目。
CNCF
2022/03/28
5540
推荐阅读
相关推荐
Knative 入门系列1:knative 概述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档