

当然,世界上没有免费的午餐。那么,函数的复杂性又体现在哪里?
目前市面上存在着大量函数即服务选项。而对每款产品而言,其在触发函数的具体方法、可以处理的事件格式、扩展能力以及帮助开发人员抽象出的实际复杂度数量方面皆有所区别。
对于具备实用性的抽象,公有云供应商往往会将其打包为一项服务。其中包括Azure Functions(微软)、Lambda(AWS)以及Google Cloud Functions等等。每种服务都运行函数代码以唾液事件,并根据当前需求进行扩展。此类产品采用务实的计费方式——用户需要按照函数的具体调用次数付费。
开源开发人员也投身于无服务器阵营,并开发出OpenFaaS、Fission、Kubeless以及Project riff等项目。这一切都是函数即服务的典型例子,且建立在Kubernetes基础之上。但各项目之间的共通之处也就仅此而已。
各个项目在以下三大核心领域都有着略有区别的实现方式:
-
各项目都拥有一种构建服务,或者利用函数代码构建并部署容器的方法。
-
各项目都拥有一种实现扩展伸缩以响应对函数调用需求的方法。
-
各项目都提供一种基于事件的函数调用方法,例如包含事件代理的http或发布/订阅机制。

-
Build提供一套可插入模型,用于利用源代码构建容器。
-
Eventing允许各应用/函数发布及订阅事件流,例如Google Cloud Pub/Sub以及Apache Kafka。
-
Serving提供相关能力,用以轻松运行应用程序/函数并对其进行规模伸缩。
-
利用源代码构建应用程序/函数。
-
通过可扩展性实现多种构建方法(Cloud Foundry Buildpacks、Bazel、Kaniko以及Dockerfiles等等)。
-
允许开发人员轻松部署新的(可路由)应用程序/函数。
-
可实现应用程序的零停机升级。
-
自动扩展应用程序实例。
-
为函数、应用或容器构建事件。
-
通过HTTP请求触发函数调用。
-
描述在何处查找构建所使用的源代码。该位置会被存储在/workspace分卷当中,并在后续步骤内被加以使用。源代码的的具体存储位置为各类源代码控制系统(例如GIT、GCS或者其它可访问的源代码自定义容器)。
-
步骤或模板。 即构建容器的实际工作。该流程体现为一系列遵循构建器规范的步骤。您亦可将其视为一套构建模板,由可插拔构建器组成,专门用于利用源代码构建容器。目前,该模型支持五种可共享构建过程的构建模板,分别为之前提到的Cloud Foundry Buildpacks、Google Container Builder、Bazel、Kaniko以及Jib。
-
服务账户。此账户用于运行构建结果。
-
分卷。提供在构建过程当中可供使用的各分卷的定义能力。这些分卷可以具有多种用途,例如共享秘密凭证或为多个步骤提供缓存功能。
-
管理应用程序/函数生命周期的资源,并提供单点控制。其负责处理对象的创建,旨在确保应用程序/函数具备网络路由、配置以及服务更新等版本控制能力。
-
为代码及其配置提供一套不可变快照。各修订版本将引用容器镜像以及由此创建的build。各修订版本之间可共存于同一历史记录之内,从而实现蓝/绿部署或者回滚等高级操作。
-
能够将网络端点映射至一个或多个函数修订版本。
-
定义所需的最新部署状态,并在状态更新时定义修订版本的状态。
Eventing:对发布/订阅细节进行抽象处理,帮助开发人员摆脱相关负担
函数的存在是为了响应事件。FaaS项目与托管服务之间的实现差异,集中体现在获取并使用这些事件的具体方式身上。Knative Eventing组件旨在对这些事件进行抽象处理,从而帮助开发人员摆脱与后端相关的具体细节。如此一来,开发人员将不必费心于挑选消息传递平台以及数据复制方法等工作。
Knative为开发人员提供Kubernetes定制化资源,这些资源可用于事件的生产与消费。此类定制化资源主要分为以下两大类别:
频道:
-
即发布者在发送消息时面向的发布/订阅目标(主题)。从本质上讲,频道可被视为获取或放置事件的位置目录。
-
总线。各频道的后端供应方。其属于支持事件的消息收发平台,具体选项包括Google Cloud PubSub、Apache Kafka以及RabbitMQ等等。
-
为应用程序/函数指定Knative服务,并为其指明立足频道所传递的具体消息。其属于应用程序/函数的入口地址。
尽可能提高抽象水平
Knative是一套全新的解决方案,但目前已经存在大量关于具体使用方式及使用理由的指导性资源。总结而言,企业正编写越来越多的软件方案,这意味着典型的现代企业必然拥有自己的应用程序平台、容器编排工具与函数。Pivotal希望立足这些不同抽象对象推动开源创新。在这项工作当中,Cloud Foundry、Kubernetes以及现在的Knative都将扮演重要的角色,帮助各大公司对自身构建及运行软件的具体方式进行现代化改造。
相关链接:
-
http://github.com/knative
-
https://pivotal.io/platform/pivotal-function-service

