Serverless函数运行时概述

758 阅读4分钟

2018年见证了Serverless和函数即服务的出现,2019年是Serverless架构开始大规模采用的一年。无服务器云计算为研究人员提供了从新的角度重新审视云计算研究的主要主题和主题的机会,尤其是从迁移、互操作性、优化、虚拟化管理、容错、模拟等方面。将无服务器范式扩展到网络的边缘,也有人称之为无设备边缘计算(Deviceless Edge Computing)。

从产品的角度,当前Serverless领域已有的实现已有一定数量,包括云端提供的产品和各种开源项目,可选择性很多,市场碎片化。

从标准化和规范化的角度,由于Serverless众多的产品,但从代码到容器的构建、函数触发的方式、运行时管理能力三个方面,每个云厂商、每个开源项目都各不相同,用户选择产品后都面临着厂商绑定的风险。Google联合Pivotal、IBM、Red Hat和SAP协作开发推出Knative试图标准化Function,构建、部署和管理现代无服务器工作负载,将Kubernetes、Serverless、ServericeMesh整合在一起,提供多云支持,从而不会被某个云提供商锁定,可在不同FaaS平台之间移植,目前处于初步阶段。

从工具的角度,对Serverless和函数计算来说,工具仍缺乏成熟度,这其中包括开发人员和运营团队工具和生态系统支持[27]。

随着企业大规模为关键应用采用Serverless架构,并且随着工作负载的增加,Serverless产品的成本和厂商锁定将日益成为一个突出的问题。通过采用标准化和开源的Serverless解决方案,可以有效地控制成本,并确保互操作性和一致性。

本文需要对现有FaaS运行时选型,基于该FaaS运行时二次开发,以完成在基于Nomad的边缘计算平台接入FaaS运行时。目前开源的Serverless函数运行时有OpenFaaS、OpenWhisk、Knative、Kubeless、Fission、Fn Project、Nuclio等。为明确适合当前边缘计算平台的函数计算框架,有必要对开源函数计算框架进行评估分析。评估基于几个标准:每个项目的GitHub活动、文档、扩展的灵活性、生态系统和行业中的用户数量、容器编排运行时支持。

表2.1  开源Serverless函数运行时比较表

FaaS运行时支持的语言扩缩容策略支持的容器编排器触发器
OpenFaaS任何语言/任何容器QPS,CPU,自定义指标通过实现faas-provider接入HTTP,schedule,Kafka,自定义
OpenWhiskJS,Swift,Java,Python,自定义二进制QPS不需要HTTP,schedule,Kafka
Knative任何语言/任何容器CPU,自定义指标KubernetesHTTP,schedule,Kafka,自定义
KubelessPython,Node.js,Ruby,PHP,Go,.Net,自定义CPU,QPS,自定义指标KubernetesHTTP,schedule,Kafka
FissionPython,Node.js,Go,C#,PHP,自定义CPUKubernetesHTTP,schedule,Kafka
Fn任何语言/任何容器QPSAgnosticHTTP
NuclioGo,Python,.Net,JS,Java,Linux ShellCPUKubernetesHTTP,schedule,Kafka,其他

预定义的评估标准足以快速过滤掉大多数无服务器运行时,因此仅剩OpenFaaS或OpenWhisk作为基于Nomad的边缘计算平台的函数计算框架选型。本文当前设计的FaaS函数运行时计划针对OpenFaaS单一FaaS函数运行时接入。后期可能扩展为包含云端FaaS的多FaaS函数运行时,并设计FaaS调度器组件。本文将容器镜像视为部署单元,因此,开发者可以使用他们熟悉的任何语言、框架或惯用方法。FaaS服务模型完全采用端到端服务,不仅可以简化应用开发内容,还可以使编写的应用尽可能快地运行,降低成本,安全可靠。

在基于Nomad的边缘计算平台针对接入OpenFaaS运行时,需要实现faas-provider接口功能。同时,由于不同于虚拟机任务可以归纳于现有任务作业体系进行编排,新增的函数的概念,需要对现有边缘计算平台概念和组件体系进行扩展,在Nomad新增函数的功能模块并提供给FaaS函数运行时。